#include "tex_table.h" #include #include #include "tex_table_tags.h" #include "zmalloc.h" int parse_table(const char *table_source, size_t len, struct table_s *table, struct xerror_s *error) { if (!len) len = strlen(table_source); char *tag = NULL; size_t i = 0; enum where_e { IN_GLOBAL, IN_TAG, IN_TAG_END, IN_TAG_BEGIN_END, IN_TAG_PARAM, IN_TAG_BEGIN_PARAM } where = IN_GLOBAL; /* Ищем первое вхождение * \begin{longtable} */ for (i = 0; i < len; i++) { char c = table_source[i]; switch (where) { case IN_GLOBAL: if (c == '\\') { zfree(&tag); where = IN_TAG; } break; case IN_TAG: if (!isalpha(c)) { size_t len = zmalloc_getlen(tag); zrealloc(&tag, len + 1); tag[len] = c; } else { if (!strcmp(tag, TEX_TAG_BEGIN)) where = IN_TAG_BEGIN_END; else where = IN_TAG_END; } break; case IN_TAG_PARAM: if () if (!isspace(c) || c == '{') else if (isspace(c)) { } else { } break; case IN_TAG_BEGIN_PARAM: if (isalpha(c)) { } else if (isspace(c)) { } else { } break; } } table->id = "Drossel1.Table1"; error->message = NULL; return 0; }