dev/c/tex_parser/tex_table.c

80 lines
1.2 KiB
C

#include "tex_table.h"
#include <string.h>
#include <ctype.h>
#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;
}