/*
$Id: marcomp.h,v 1.1 2003/02/28 12:33:39 oleg Exp $
*/
#ifndef MARCOMP_H
#define MARCOMP_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct mc_subfield
{
char *name;
char *prefix;
char *suffix;
struct {
int start;
int end;
} interval;
int which;
union {
#define MC_SF 1
#define MC_SFGROUP 2
#define MC_SFVARIANT 3
struct mc_field *in_line;
struct mc_subfield *child;
} u;
struct mc_subfield *next;
struct mc_subfield *parent;
} mc_subfield;
#define SZ_FNAME 3
#define SZ_IND 1
#define SZ_SFNAME 1
#define SZ_PREFIX 1
#define SZ_SUFFIX 1
typedef struct mc_field
{
char *name;
char *ind1;
char *ind2;
struct {
int start;
int end;
} interval;
struct mc_subfield *list;
} mc_field;
typedef enum
{
NOP,
REGULAR,
LVARIANT,
RVARIANT,
LGROUP,
RGROUP,
LINLINE,
RINLINE,
SUBFIELD,
LINTERVAL,
RINTERVAL,
} mc_token;
typedef enum
{
EMCOK = 0, /* first always, mondatory */
EMCNOMEM,
EMCF,
EMCSF,
EMCSFGROUP,
EMCSFVAR,
EMCSFINLINE,
EMCEND /* last always, mondatory */
} mc_errcode;
typedef struct mc_context
{
int offset;
int crrval;
mc_token crrtok;
mc_errcode errcode;
int len;
const char *data;
} mc_context;
mc_context *mc_mk_context(const char *s);
void mc_destroy_context(mc_context *c);
mc_field *mc_getfield(mc_context *c);
void mc_destroy_field(mc_field *p);
void mc_pr_field(mc_field *p, int offset);
mc_subfield *mc_getsubfields(mc_context *c, mc_subfield *parent);
void mc_destroy_subfield(mc_subfield *p);
void mc_destroy_subfields_recursive(mc_subfield *p);
void mc_pr_subfields(mc_subfield *p, int offset);
mc_errcode mc_errno(mc_context *c);
const char *mc_error(mc_errcode no);
#ifdef __cplusplus
}
#endif
#endif
syntax highlighted by Code2HTML, v. 0.9.1