dev/c/tex_parser/tex_parser.h

144 lines
4.2 KiB
C

#ifndef _TEX_PARSER_H
#define _TEX_PARSER_H
#include <sys/types.h>
#include "zerror.h"
#define TEX_PARSER_DOMAIN 0
/**
* enum tex_parser_error - the LaTeX parser error codes
*
* @TEX_PARSER_NOERROR: Default state indicates no error.
* @TEX_PARSER_ERROR_UNKNOWN: Uncontrolled error happen
* @TEX_PARSER_ERROR_STACKOVERFLOW: Stack overflow
* @TEX_PARSER_ERROR_PLACE_UNKNOWN: Unknown place (internal error)
* @TEX_PARSER_ERROR_UNEXPECTED_SYMBOL: Unexpected symbol for current place
*
* Defines parser error codes, @TEX_PARSER_NOERROR = %0 is equivalent to no errors.
*/
enum tex_parser_error {
TEX_PARSER_NOERROR = 0,
TEX_PARSER_ERROR_UNKNOWN,
TEX_PARSER_ERROR_STACKOVERFLOW,
TEX_PARSER_ERROR_STACKEMPTY,
TEX_PARSER_ERROR_PLACE_UNKNOWN,
TEX_PARSER_ERROR_UNEXPECTED_SYMBOL,
};
/**
* struct tex_table_row_s - LaTeX table row
*
* @over_line: Text over row (\hline for ex.)
* @cells: Row cells
* @under_line: Text under row (\cline{2-4} for ex.)
*
* @over_line, @cells, @under_line uses zalloc*() functions which stores
* array dimensions.
*/
struct tex_table_row_s {
char *over_line;
char **cells;
char *under_line;
};
/**
* struct tex_table_s - LaTeX table
*
* @document_offset: Table offset (in symbols) in the LaTeX document
* @document_size: Table size (in symbols) in the LaTeX document
* @id: Id in report generator context (Request.Drossel1.Table1 for ex.)
* @col_props: Column properties devided by '>' symbol
* @head_table: Top rows devided by & and automaticaly added on page break
* @foot_table: Bottom rows devided by & and automaticaly added on page break
* @main_table: Central rows which can be devided horizontally and vertically
*
* @col_props, @head_table, @foot_table, @main_table uses zalloc*() functions to
* determine array dimensions.
*/
struct tex_table_s {
size_t document_offset;
size_t document_size;
char *id;
char **col_props;
struct tex_table_row_s *head_table;
struct tex_table_row_s *foot_table;
struct tex_table_row_s *main_table;
};
/**
* struct tex_graphics - LaTeX graphics
*
* @prestr: Preceding string
* @path: Path to image file
* @poststr: Descendant string
*
* Need some description here...
*/
struct tex_graphics {
char *prestr;
char *path;
char *poststr;
};
/**
* enum tex_element_type - Type of LaTeX element
*
* @TEX_ELEM_TEXT: Text containing non-arable code
* @TEX_ELEM_TABLE: LaTeX table or longtable
* @TEX_ELEM_GRAPHICS: LaTeX graphics (images, plots)
*
* Need some description here...
*/
enum tex_elem_type {
TEX_ELEM_TEXT,
TEX_ELEM_TABLE,
TEX_ELEM_GRAPHICS
};
/**
* struct tex_elem_s - Element of LaTeX code
*
* @type: LaTeX element type
* @data: Element data structure
*
* Need some description here...
*/
struct tex_elem_s {
enum tex_elem_type type;
union {
char *text;
struct tex_table_s *table;
struct tex_graphics_s *graphics;
} data;
};
/**
* struct tex_struct_s - LaTeX code structure
*
* @elems: List of LaTeX elements
*
* Need some description here...
*/
struct tex_struct_s {
struct tex_elem_s *elems;
};
/**
* tex_parse() - Parse the LaTeX code
*
* @source: LaTeX code string
* @len: Length of LaTeX string
* @tex_struct: A return location for a #tex_struct_s
* @error: A return location for a #zerror_s
*
* Parses LaTeX text string @source of length len to *@tex_struct.
* If some error occurs, parser returns immediatly with error info in *@error.
* @tex_struct or @error can't be %NULL; *@tex_struct *@error must be %NULL.
*/
void tex_parse(const char *source, size_t len, struct tex_struct_s **tex_struct, struct zerror_s **error);
#endif