(root)/
texinfo-7.1/
tp/
Texinfo/
XS/
parsetexi/
parser.h
       1  /* parser.h - include many other header files.  type declarations.
       2     declarations for close.c, end_line.c, separator.c, parser.c,
       3     multitable.c, extra.c and menu.c. */
       4  
       5  #ifndef PARSER_H
       6  #define PARSER_H
       7  /* Copyright 2010-2023 Free Software Foundation, Inc.
       8  
       9     This program is free software: you can redistribute it and/or modify
      10     it under the terms of the GNU General Public License as published by
      11     the Free Software Foundation, either version 3 of the License, or
      12     (at your option) any later version.
      13  
      14     This program is distributed in the hope that it will be useful,
      15     but WITHOUT ANY WARRANTY; without even the implied warranty of
      16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17     GNU General Public License for more details.
      18  
      19     You should have received a copy of the GNU General Public License
      20     along with this program.  If not, see <http://www.gnu.org/licenses/>. */
      21  
      22  #include "tree_types.h"
      23  #include "tree.h"
      24  #include "context_stack.h"
      25  #include "commands.h"
      26  #include "handle_commands.h"
      27  #include "errors.h"
      28  #include "counter.h"
      29  #include "macro.h"
      30  #include "conf.h"
      31  
      32  typedef struct GLOBAL_INFO {
      33      char *input_file_name;
      34      int sections_level;
      35      ELEMENT dircategory_direntry; /* an array of elements */
      36  
      37      /* Elements that should be unique. */
      38      ELEMENT *settitle; /* Title of document. */
      39      ELEMENT *copying;
      40      ELEMENT *title;
      41      ELEMENT *titlepage;
      42      ELEMENT *top;
      43      ELEMENT *setfilename;
      44      ELEMENT *documentdescription;
      45      ELEMENT *pagesizes;
      46      ELEMENT *fonttextsize;
      47      ELEMENT *footnotestyle;
      48      ELEMENT *setchapternewpage;
      49      ELEMENT *everyheading;
      50      ELEMENT *everyfooting;
      51      ELEMENT *evenheading;
      52      ELEMENT *evenfooting;
      53      ELEMENT *oddheading;
      54      ELEMENT *oddfooting;
      55      ELEMENT *everyheadingmarks;
      56      ELEMENT *everyfootingmarks;
      57      ELEMENT *evenheadingmarks;
      58      ELEMENT *oddheadingmarks;
      59      ELEMENT *evenfootingmarks;
      60      ELEMENT *oddfootingmarks;
      61      ELEMENT *shorttitlepage;
      62      ELEMENT *novalidate;
      63      ELEMENT *afourpaper;
      64      ELEMENT *afourlatex;
      65      ELEMENT *afourwide;
      66      ELEMENT *afivepaper;
      67      ELEMENT *bsixpaper;
      68      ELEMENT *smallbook;
      69  
      70      /* Arrays of elements */
      71      ELEMENT author;
      72      ELEMENT detailmenu;
      73      ELEMENT floats;
      74      ELEMENT footnotes;
      75      ELEMENT hyphenation;
      76      ELEMENT insertcopying;
      77      ELEMENT listoffloats;
      78      ELEMENT part;
      79      ELEMENT printindex;
      80      ELEMENT subtitle;
      81      ELEMENT titlefont;
      82  
      83      ELEMENT allowcodebreaks;
      84      ELEMENT clickstyle;
      85      ELEMENT codequotebacktick;
      86      ELEMENT codequoteundirected;
      87      ELEMENT contents;
      88      ELEMENT deftypefnnewline;
      89      ELEMENT documentencoding;
      90      ELEMENT documentlanguage;
      91      ELEMENT exampleindent;
      92      ELEMENT firstparagraphindent;
      93      ELEMENT frenchspacing;
      94      ELEMENT headings;
      95      ELEMENT kbdinputstyle;
      96      ELEMENT microtype;
      97      ELEMENT paragraphindent;
      98      ELEMENT shortcontents;
      99      ELEMENT urefbreakstyle;
     100      ELEMENT xrefautomaticsectiontitle;
     101  
     102      /* Ignored characters for index sort key */
     103      IGNORED_CHARS ignored_chars;
     104  } GLOBAL_INFO;
     105  
     106  
     107  /* In close.c */
     108  int is_container_empty (ELEMENT *current);
     109  void remove_empty_content (ELEMENT *current);
     110  ELEMENT *close_container (ELEMENT *current);
     111  void close_command_cleanup (ELEMENT *current);
     112  ELEMENT *close_commands (ELEMENT *current, enum command_id closed_block_command,
     113                           ELEMENT **closed_element, enum command_id);
     114  ELEMENT *close_all_style_commands (ELEMENT *current,
     115                                 enum command_id closed_block_command,
     116                                 enum command_id interrupting_command);
     117  ELEMENT *close_current (ELEMENT *current,
     118                          enum command_id closed_block_command,
     119                          enum command_id interrupting_command);
     120  ELEMENT *close_brace_command (ELEMENT *current,
     121                                enum command_id closed_block_command,
     122                                enum command_id interrupting_command,
     123                                int missing_brace);
     124  void close_ignored_block_conditional (ELEMENT *current);
     125  
     126  /* In end_line.c */
     127  ELEMENT *end_line (ELEMENT *current);
     128  ELEMENT *end_line_misc_line (ELEMENT *current);
     129  ELEMENT *end_line_starting_block (ELEMENT *current);
     130  
     131  typedef struct {
     132      char *type;
     133      ELEMENT *element;
     134  } FLOAT_RECORD;
     135  
     136  extern FLOAT_RECORD *floats_list;
     137  extern size_t floats_number;
     138  extern size_t floats_space;
     139  
     140  
     141  /* In separator.c */
     142  ELEMENT * handle_open_brace (ELEMENT *current, char **line_inout);
     143  ELEMENT * handle_close_brace (ELEMENT *current, char **line_inout);
     144  ELEMENT * handle_comma (ELEMENT *current, char **line_inout);
     145  
     146  /* In parser.c */
     147  typedef struct {
     148      enum command_id command;
     149      SOURCE_MARK *source_mark;
     150  } CONDITIONAL_STACK_ITEM;
     151  
     152  size_t count_convert_u8 (char *text);
     153  int isascii_alnum (int c);
     154  ELEMENT *parse_texi (ELEMENT *root_elt, ELEMENT *current_elt);
     155  void push_conditional_stack (enum command_id cond, SOURCE_MARK *source_mark);
     156  CONDITIONAL_STACK_ITEM *pop_conditional_stack (void);
     157  CONDITIONAL_STACK_ITEM *top_conditional_stack (void);
     158  extern size_t conditional_number;
     159  ELEMENT *parse_texi_document (void);
     160  int abort_empty_line (ELEMENT **current_inout, char *additional);
     161  ELEMENT *end_paragraph (ELEMENT *current,
     162                          enum command_id closed_block_command,
     163                          enum command_id interrupting_command);
     164  void isolate_last_space (ELEMENT *current);
     165  int kbd_formatted_as_code (ELEMENT *current);
     166  int parent_of_command_as_argument (ELEMENT *current);
     167  void register_command_as_argument (ELEMENT *cmd_as_arg);
     168  ELEMENT *begin_preformatted (ELEMENT *current);
     169  ELEMENT *end_preformatted (ELEMENT *current,
     170                             enum command_id closed_block_command,
     171                             enum command_id interrupting_command);
     172  char *read_command_name (char **ptr);
     173  char *read_comment (char *line, int *has_comment);
     174  char *read_flag_name (char **ptr);
     175  ELEMENT *merge_text (ELEMENT *current, char *text,
     176                       ELEMENT *transfer_marks_element);
     177  void start_empty_line_after_command (ELEMENT *current, char **line_inout,
     178                                       ELEMENT *command);
     179  ELEMENT *begin_paragraph (ELEMENT *current);
     180  int format_expanded_p (char *format);
     181  int is_end_current_command (ELEMENT *current, char **line,
     182                              enum command_id *end_cmd);
     183  void set_documentlanguage (char *);
     184  void set_documentlanguage_override (char *value);
     185  void set_accept_internalvalue (void);
     186  char *element_type_name (ELEMENT *e);
     187  int check_space_element (ELEMENT *e);
     188  void gather_spaces_after_cmd_before_arg (ELEMENT *current);
     189  char *parse_command_name (char **ptr, int *single_char);
     190  
     191  /* Return values */
     192  #define GET_A_NEW_LINE 0
     193  #define STILL_MORE_TO_PROCESS 1
     194  #define FINISHED_TOTALLY 2
     195  
     196  extern const char *whitespace_chars, *whitespace_chars_except_newline;
     197  extern const char *linecommand_expansion_delimiters;
     198  extern const char *digit_chars;
     199  
     200  extern ELEMENT *current_node;
     201  extern ELEMENT *current_section;
     202  extern ELEMENT *current_part;
     203  
     204  extern GLOBAL_INFO global_info;
     205  extern char *global_clickstyle;
     206  extern char *global_documentlanguage;
     207  extern int global_documentlanguage_fixed;
     208  extern int global_accept_internalvalue;
     209  
     210  enum kbd_enum {kbd_none, kbd_code, kbd_example, kbd_distinct };
     211  extern enum kbd_enum global_kbdinputstyle;
     212  
     213  int register_global_command (ELEMENT *current);
     214  void wipe_global_info (void);
     215  
     216  extern COUNTER count_remaining_args, count_items, count_cells;
     217  
     218  ELEMENT *setup_document_root_and_before_node_section (void);
     219  
     220  /* In multitable.c */
     221  ELEMENT *item_line_parent (ELEMENT *current);
     222  ELEMENT *item_multitable_parent (ELEMENT *current);
     223  void gather_previous_item (ELEMENT *current, enum command_id next_command);
     224  
     225  /* In extra.c */
     226  void add_extra_element (ELEMENT *e, char *key, ELEMENT *value);
     227  void add_extra_element_oot (ELEMENT *e, char *key, ELEMENT *value);
     228  void add_extra_contents (ELEMENT *e, char *key, ELEMENT *value);
     229  void add_extra_text (ELEMENT *e, char *key, ELEMENT *value);
     230  void add_extra_misc_args (ELEMENT *e, char *key, ELEMENT *value);
     231  void add_extra_string (ELEMENT *e, char *key, char *value);
     232  void add_extra_string_dup (ELEMENT *e, char *key, char *value);
     233  void add_extra_integer (ELEMENT *e, char *key, long value);
     234  void add_info_string (ELEMENT *e, char *key, char *value);
     235  void add_info_string_dup (ELEMENT *e, char *key, char *value);
     236  void add_info_element_oot (ELEMENT *e, char *key, ELEMENT *value);
     237  KEY_PAIR *lookup_extra (ELEMENT *e, char *key);
     238  KEY_PAIR *lookup_info (ELEMENT *e, char *key);
     239  ELEMENT *lookup_extra_element (ELEMENT *e, char *key);
     240  ELEMENT *lookup_info_element (ELEMENT *e, char *key);
     241  
     242  /* In menus.c */
     243  int handle_menu_entry_separators (ELEMENT **current_inout, char **line_inout);
     244  ELEMENT *end_line_menu_entry (ELEMENT *current);
     245  #endif