Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef _TEXUTIL_H
  2. #define _TEXUTIL_H
  3. /* texutil.h */
  4. /*****************************************************************************/
  5. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  6. /*                                                                           */
  7. /* AS                                                                        */
  8. /*                                                                           */
  9. /* TeX-->ASCII/HTML Converter: Common Utils/Variables                        */
  10. /*                                                                           */
  11. /*****************************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <stdarg.h>
  15. #include "datatypes.h"
  16.  
  17. /*---------------------------------------------------------------------------*/
  18.  
  19. #define TOKLEN 350
  20.  
  21. typedef const char *const_char_ptr_t;
  22.  
  23. typedef struct tex_infile
  24. {
  25.   struct tex_infile *p_next;
  26.   char *p_name;
  27.   FILE *p_file;
  28.   const char *p_buf_line;
  29.   char *p_buf_line_to_free;
  30.   int curr_line, curr_column;
  31.   char *p_saved_buffer_line;
  32.   int saved_buffer_line_ptr;
  33.   char save_last_char;
  34. } tex_infile_t;
  35.  
  36. extern tex_infile_t *p_curr_tex_infile;
  37. extern char buffer_line[1001], *p_buffer_line_ptr, buffer_last_char;
  38.  
  39. extern const char *p_infile_name, *p_outfile_name;
  40. extern FILE *p_outfile;
  41.  
  42.  
  43. extern char tex_token_sep_string[TOKLEN],
  44.             tex_backslash_token_sep_string[TOKLEN];
  45.  
  46.  
  47. typedef struct tex_counter
  48. {
  49.   struct tex_counter *p_next;
  50.   char *p_name;
  51.   Word ref_num;
  52.   unsigned value;
  53. } tex_counter_t;
  54.  
  55. typedef struct tex_newif
  56. {
  57.   struct tex_newif *p_next;
  58.   char *p_name;
  59.   Boolean value;
  60. } tex_newif_t;
  61.  
  62. typedef struct tex_environment
  63. {
  64.   struct tex_environment *p_next;
  65.   char *p_name;
  66.   char *p_begin_commands,
  67.        *p_end_commands;
  68. } tex_environment_t;
  69.  
  70. typedef struct tex_newcommand
  71. {
  72.   struct tex_newcommand *p_next;
  73.   char *p_name;
  74.   char *p_body;
  75.   unsigned num_args;
  76. } tex_newcommand_t;
  77.  
  78. typedef enum
  79. {
  80.   EnvNone, EnvDocument, EnvItemize, EnvEnumerate, EnvDescription, EnvTable,
  81.   EnvTabular, EnvRaggedLeft, EnvRaggedRight, EnvCenter, EnvVerbatim,
  82.   EnvQuote, EnvTabbing, EnvBiblio, EnvMarginPar, EnvCaption, EnvHeading, EnvUser,
  83.   EnvCount
  84. } EnvType;
  85.  
  86. extern const char *tex_env_names[EnvCount];
  87.  
  88. typedef enum
  89. {
  90.   AlignNone, AlignCenter, AlignLeft, AlignRight
  91. } TAlignment;
  92.  
  93. typedef struct tex_env_data
  94. {
  95.   int ListDepth, ActLeftMargin, LeftMargin, RightMargin;
  96.   int EnumCounter, FontNest;
  97.   Boolean InListItem;
  98.   TAlignment Alignment;
  99. } tex_env_data_t;
  100.  
  101. typedef struct tex_env_save
  102. {
  103.   struct tex_env_save *p_next;
  104.   EnvType save_env;
  105.   char *p_save_user_env_name;
  106.   tex_env_data_t save_env_data;
  107. } tex_env_save_t;
  108.  
  109.  
  110. extern tex_env_data_t curr_tex_env_data;
  111. extern EnvType curr_tex_env;
  112. extern char *p_curr_tex_user_env_name;
  113. extern tex_env_save_t *p_env_stack;
  114.  
  115.  
  116. typedef struct tex_output_consumer
  117. {
  118.   struct tex_output_consumer *p_next;
  119.   void (*consume)(struct tex_output_consumer*, const_char_ptr_t *pp_str);
  120.   void (*destroy)(struct tex_output_consumer*);
  121. } tex_output_consumer_t;
  122.  
  123. extern tex_output_consumer_t *p_current_tex_output_consumer;
  124.  
  125. typedef enum { e_tex_if_if, e_tex_if_else } tex_if_state_t;
  126. typedef struct tex_if_stack
  127. {
  128.   struct tex_if_stack *p_next;
  129.   tex_if_state_t state;
  130.   int condition;
  131. } tex_if_stack_t;
  132.  
  133. extern Boolean DoRepass;
  134.  
  135. /*---------------------------------------------------------------------------*/
  136.  
  137. extern void tex_infile_pop(void);
  138. extern void tex_infile_pop_all(void);
  139. extern void tex_infile_push_file(const char *p_name);
  140. extern void tex_infile_push_line(const char *p_src, const char *p_line, Boolean line_dynamic);
  141. extern char *tex_infile_gets(char *p_dest, size_t dest_cap, tex_infile_t *p_infile);
  142.  
  143. extern int tex_get_char(void);
  144. extern Boolean tex_issep(char inp);
  145. extern Boolean tex_isalphanum(char inp);
  146. extern Boolean tex_read_token(char *p_dest);
  147. extern void tex_push_back_token(char *p_token);
  148. extern void tex_token_reset(void);
  149. extern void tex_assert_token(const char *p_ref);
  150. extern void tex_collect_token(char *p_dest, const char *p_term);
  151.  
  152. extern void tex_counter_add(const char *p_name);
  153. extern void tex_counters_free(void);
  154. extern void tex_counter_set(const char *p_name, unsigned new_value);
  155. extern unsigned tex_counter_get(const char *p_name);
  156. extern void tex_counter_step(const char *p_name);
  157. extern void TeXNewCounter(Word index);
  158. extern void TeXStepCounter(Word index);
  159. extern void TeXSetCounter(Word index);
  160.  
  161. extern void tex_newif_add(const char *p_name);
  162. extern void tex_newifs_free(void);
  163. extern Boolean tex_newif_lookup(const char *p_name);
  164. extern void TeXNewIf(Word index);
  165.  
  166. extern void tex_newcommand_add(const char *p_name, const char *p_body, unsigned num_args);
  167. extern void tex_newcommands_free(void);
  168. extern const tex_newcommand_t *tex_newcommand_lookup(const char *p_name);
  169. extern void tex_newcommand_expand_push(const tex_newcommand_t *p_cmd);
  170. extern void TeXNewCommand(Word Index);
  171.  
  172. extern void tex_environment_add(const char *p_name, const char *p_begin_commands, const char *p_end_commands);
  173. extern void tex_environments_free(void);
  174. extern const tex_environment_t *tex_environment_lookup(const char *p_name);
  175. extern EnvType tex_get_env_type(char *p_name, const tex_environment_t **pp_env);
  176. extern void TeXNewEnvironment(Word Index);
  177.  
  178. extern void tex_verror(const char *p_msg, va_list ap);
  179. extern void tex_error(const char *p_msg, ...);
  180. extern void tex_vwarning(const char *p_msg, va_list ap);
  181. extern void tex_warning(const char *p_msg, ...);
  182.  
  183. extern void tex_save_env(EnvType new_env, const char *p_user_env_name);
  184. extern void tex_restore_env(void);
  185.  
  186. extern void tex_output_consumer_push(tex_output_consumer_t *p_consumer);
  187. extern void tex_output_consumer_pop(void);
  188. extern void tex_output_consumer_pop_all(void);
  189.  
  190. extern void tex_if_push(int condition);
  191. extern void tex_if_toggle(void);
  192. extern void tex_if_pop(void);
  193. extern int tex_if_query(void);
  194. extern void tex_if_pop_all(void);
  195. extern unsigned tex_if_nest(void);
  196.  
  197. extern void TeXIfNum(Word index);
  198. extern void TeXFi(Word index);
  199.  
  200. #endif /* _TEXUTIL_H */
  201.