123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- /* Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016
- Free Software Foundation, Inc.
- 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 3 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, see <http://www.gnu.org/licenses/>. */
- #include <stdlib.h>
- #include "command_ids.h"
- #include "element_types.h"
- typedef struct TEXT {
- char *text;
- size_t space; /* Allocated bytes in 'text', including terminating null. */
- size_t end;
- } TEXT;
- enum extra_type {
- extra_element,
- extra_element_contents,
- extra_element_contents_array,
- extra_element_text,
- extra_index_entry,
- extra_misc_args,
- extra_node_spec,
- extra_node_spec_array,
- extra_string,
- extra_def_args,
- extra_float_type,
- extra_deleted
- };
- typedef struct KEY_PAIR {
- char *key;
- enum extra_type type;
- struct ELEMENT *value;
- } KEY_PAIR;
- typedef struct {
- enum command_id cmd;
- char *begin;
- char *end;
- } INFO_ENCLOSE;
- typedef struct ELEMENT_LIST {
- struct ELEMENT **list;
- size_t number;
- size_t space;
- } ELEMENT_LIST;
- typedef struct LINE_NR {
- int line_nr;
- char *file_name;
- char *macro;
- } LINE_NR;
- /* Type of a link in the route from the root of the tree to an element. */
- enum route_element_type { route_uninitialized, route_contents, route_args,
- route_not_in_tree };
- typedef struct {
- /* Element that contains a reference to this one. */
- struct ELEMENT *element;
- /* Index into the referring element's extra keys that is the reference. */
- int extra_index;
- } PENDING_REFERENCE;
- typedef struct ELEMENT {
- enum command_id cmd;
- TEXT text;
- enum element_type type;
- ELEMENT_LIST args;
- ELEMENT_LIST contents;
- struct ELEMENT *parent;
- LINE_NR line_nr;
- KEY_PAIR *extra;
- size_t extra_number;
- size_t extra_space;
- /* Set to route_not_in_tree if element not in main tree. Also
- used for routing information along with 'index_in_parent' when
- dumping to a text stream. */
- enum route_element_type parent_type;
- /********* Used when dumping to a text stream only. ************/
- int index_in_parent;
- PENDING_REFERENCE *pending_references;
- size_t pending_number;
- size_t pending_space;
- /********* Used when building Perl tree only ********************/
- /* should be HV *hv; */
- void *hv;
- } ELEMENT;
- typedef struct GLOBAL_INFO {
- char *input_file_name;
- char *input_encoding_name;
- /* Elements that should be unique. */
- // 288 and Common.pm:164
- ELEMENT *settitle; /* Title of document. */
- ELEMENT *copying;
- ELEMENT *title;
- ELEMENT *titlepage;
- ELEMENT *top;
- ELEMENT *setfilename;
- ELEMENT *documentdescription;
- ELEMENT *setcontentsaftertitlepage;
- ELEMENT *setshortcontentsaftertitlepage;
- ELEMENT *novalidate;
- ELEMENT *validatemenus;
- ELEMENT *pagesizes;
- ELEMENT *fonttextsize;
- ELEMENT *footnotestyle;
- ELEMENT *setchapternewpage;
- ELEMENT *everyheading;
- ELEMENT *everyfooting;
- ELEMENT *evenheading;
- ELEMENT *evenfooting;
- ELEMENT *oddheading;
- ELEMENT *oddfooting;
- ELEMENT *everyheadingmarks;
- ELEMENT *everyfootingmarks;
- ELEMENT *evenheadingmarks;
- ELEMENT *oddheadingmarks;
- ELEMENT *evenfootingmarks;
- ELEMENT *oddfootingmarks;
- ELEMENT *shorttitlepage;
- /* Arrays of elements */
- ELEMENT footnotes;
- ELEMENT hyphenation;
- ELEMENT insertcopying;
- ELEMENT printindex;
- ELEMENT subtitle;
- ELEMENT titlefont;
- ELEMENT listoffloats;
- ELEMENT detailmenu;
- ELEMENT part;
- ELEMENT allowcodebreaks;
- ELEMENT clickstyle;
- ELEMENT codequotebacktick;
- ELEMENT codequoteundirected;
- ELEMENT contents;
- ELEMENT deftypefnnewline;
- ELEMENT documentencoding;
- ELEMENT documentlanguage;
- ELEMENT exampleindent;
- ELEMENT firstparagraphindent;
- ELEMENT frenchspacing;
- ELEMENT headings;
- ELEMENT kbdinputstyle;
- ELEMENT paragraphindent;
- ELEMENT shortcontents;
- ELEMENT urefbreakstyle;
- ELEMENT xrefautomaticsectiontitle;
- } GLOBAL_INFO;
- typedef struct CONF {
- int show_menu;
- } CONF;
- typedef struct {
- char *index_name;
- char *index_prefix;
- enum command_id index_at_command;
- enum command_id index_type_command;
- /* content->contents is the index entry text */
- ELEMENT *content;
- /* content_normalized */
- ELEMENT *command;
- ELEMENT *node;
- int number; /* Index of entry in containing index, 1-based. */
- ELEMENT *region;
- } INDEX_ENTRY;
- typedef struct INDEX {
- char *name;
- char *prefix;
- int in_code;
- struct INDEX *merged_in; /* Index this index is merged into, if any. */
- INDEX_ENTRY *index_entries;
- size_t index_number;
- size_t index_space;
- /********* Used when building Perl hash value ********************/
- void *hv;
- void *contained_hv;
- } INDEX;
- /* Used when dumping to a text stream only. A reference to an
- index entry, in the "index_entry" extra key of an element.
- index->index_entries[entry] is the referred-to index entry. */
- typedef struct {
- INDEX *index;
- int entry;
- } INDEX_ENTRY_REF;
- /* See parse_node_manual function. */
- typedef struct {
- ELEMENT *manual_content;
- ELEMENT *node_content;
- } NODE_SPEC_EXTRA;
- typedef struct {
- char **labels;
- ELEMENT **elements;
- int nelements;
- int space;
- } DEF_ARGS_EXTRA;
- typedef struct {
- ELEMENT *content;
- char *normalized;
- } EXTRA_FLOAT_TYPE;
- enum error_type { error, warning };
- typedef struct {
- char *macro_name;
- ELEMENT *element;
- enum command_id cmd;
- char *macrobody;
- } MACRO;
|