/* tree_types.h - types for the parse tree that are used in many places */ #ifndef TREE_TYPES_H #define TREE_TYPES_H /* Copyright 2010-2021 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 . */ #include #include "command_ids.h" #include "element_types.h" #include "text.h" enum extra_type { extra_element, extra_element_oot, extra_contents, extra_contents_oot, extra_contents_array, extra_text, extra_index_entry, extra_misc_args, extra_node_spec, extra_node_spec_array, extra_string, extra_integer, extra_def_info, extra_float_type, extra_deleted }; typedef struct KEY_PAIR { char *key; enum extra_type type; struct ELEMENT *value; } KEY_PAIR; 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; 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; /********* Used when building Perl tree only ********************/ void *hv; /* This should be HV *hv, but we don't want to include the Perl headers everywhere; */ } ELEMENT; 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; ELEMENT *command; ELEMENT *node; int number; /* Index of entry in containing index, 1-based. */ ELEMENT *region; char *sortas; /* the sort key for the index */ } 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; /* See parse_node_manual function. */ typedef struct { ELEMENT *manual_content; ELEMENT *node_content; } NODE_SPEC_EXTRA; /* For 'def_parsed_hash'. */ typedef struct { ELEMENT *category; ELEMENT *class; ELEMENT *type; ELEMENT *name; } DEF_INFO; typedef struct { ELEMENT *content; char *normalized; } EXTRA_FLOAT_TYPE; #endif