Blame sgmls-1.1/etype.h

Packit 9741aa
/* ETYPE.H: Definitions for element type and group processing.
Packit 9741aa
*/
Packit 9741aa
#define MCHARS    0x80        /* Model: contains #CHARS. */
Packit 9741aa
#define MGI       0x40        /* Model: contains GI names. */
Packit 9741aa
#define MPHRASE   0x20        /* Model: first token is #CHARS. */
Packit 9741aa
#define MKEYWORD  0x1F        /* Model: defined with single keyword. */
Packit 9741aa
#define MNONE     0x10        /* Model: contains no GIs or #CHARS. */
Packit 9741aa
#define MANY      0x08        /* Model: contains any GIs or #CHARS. */
Packit 9741aa
#define MRCDATA   0x04        /* Model: contains RCDATA. */
Packit 9741aa
#define MCDATA    0x02        /* Model: contains CDATA. */
Packit 9741aa
Packit 9741aa
#define TOREP (TOPT+TREP)     /* 11000000 Optional and repeatable. */
Packit 9741aa
#define TOPT      0x80        /* Token: 1=optional; 0=required. */
Packit 9741aa
#define TREP      0x40        /* Token: 1=repeatable; 0=not. */
Packit 9741aa
#define TXOREP (TXOPT+TXREP)  /* * explicitly specified */
Packit 9741aa
#define TXOPT     0x20	      /* ? explicitly specified */
Packit 9741aa
#define TXREP     0x10	      /* + explicitly specified */
Packit 9741aa
#define TTMASK    0x0F        /* 00001111 Mask for testing token type. */
Packit 9741aa
#define TTETD        4        /* 00000100 Token is an ETD. */
Packit 9741aa
#define TTAND        3        /* 00000011 Token is an AND group. */
Packit 9741aa
#define TTSEQ        2        /* 00000010 Token is a sequence group. */
Packit 9741aa
#define TTOR         1        /* 00000001 Token is an OR group. */
Packit 9741aa
#define TTCHARS      0        /* 00000000 Token is #CHARS. */
Packit 9741aa
Packit 9741aa
struct thdr {                 /* Token header or model header. */
Packit 9741aa
     UNCH ttype;              /* Token type attributes or model content. */
Packit 9741aa
     union {
Packit 9741aa
          int tnum;           /* Group token: tokens in group. 
Packit 9741aa
				 Model header: content tokens at any level. */
Packit 9741aa
          struct etd *thetd;  /* GI token: ptr to etd. */
Packit 9741aa
     } tu;
Packit 9741aa
};
Packit 9741aa
#define THSZ (sizeof(struct thdr))
Packit 9741aa
Packit 9741aa
#define ETDHASH   211	      /* Size of element hash table. Must be prime. */
Packit 9741aa
#define SMO       0x40        /* ETDMIN: Start-tag O minimization. */
Packit 9741aa
#define EMO       0x04        /* ETDMIN: End-tag O minimization. */
Packit 9741aa
#define EMM       0x02	      /* ETDMIN: End-tag minimization explicitly
Packit 9741aa
				 specified to be minus */
Packit 9741aa
#define ETDDCL    0x80        /* ETDMIN: Element was declared. */
Packit 9741aa
#define ETDUSED   0x20        /* ETDMIN: Element used in another declaration. */
Packit 9741aa
#define ETDOCC    0x10        /* ETDMIN: Element occurred in document. */
Packit 9741aa
Packit 9741aa
struct etd {                  /* Element type definition. */
Packit 9741aa
     struct etd *etdnext;     /* Next element type definition in hash chain. */
Packit 9741aa
     UNCH *etdgi;	      /* GI preceded by its length, followed by EOS. */
Packit 9741aa
     UNCH etdmin;             /* Flag bits: minimization. */
Packit 9741aa
     UNCH mark;		      /* Mark bit: for ambiguity checking */
Packit 9741aa
     struct thdr *etdmod;     /* Content model. */
Packit 9741aa
     struct etd **etdmex;     /* Minus exceptions. */
Packit 9741aa
     struct etd **etdpex;     /* Plus exceptions. */
Packit 9741aa
     struct ad *adl;          /* Attribute descriptor list. */
Packit 9741aa
     struct entity **etdsrm;  /* Short reference map. */
Packit 9741aa
};
Packit 9741aa
#define ETDSZ (sizeof(struct etd))
Packit 9741aa
typedef struct etd *PETD;
Packit 9741aa
extern struct etd dumetd[];
Packit 9741aa
Packit 9741aa
/* Number of bits in a long must be >= 1<
Packit 9741aa
#define LONGPOW 5
Packit 9741aa
Packit 9741aa
#define LONGBITS (1<
Packit 9741aa
Packit 9741aa
struct mpos {                 /* Position of current element in model. */
Packit 9741aa
     UNCH g;                  /* Index of this group in the model. */
Packit 9741aa
     UNCH t;                  /* Index of the current token in this group. */
Packit 9741aa
     unsigned long *h;	      /* Hit bits of this group's tokens. */
Packit 9741aa
};
Packit 9741aa
Packit 9741aa
#define HITCLEAR(h) MEMZERO((UNIV)(h), grplongs*sizeof(unsigned long))
Packit 9741aa
Packit 9741aa
#define TAGCONER  0x01        /* 00000001 (contersw) Tag was out of context. */
Packit 9741aa
#define TAGNET    0x02        /* 00000010 (etisw)    Tag has NET enabled. */
Packit 9741aa
#define TAGPEX    0x04        /* 00000100 (pexsw)    Tag was plus exception. */
Packit 9741aa
#define TAGREF    0x08        /* 00001000 (conrefsw) Tag had CONREF or EMPTY.*/
Packit 9741aa
struct tag {                  /* Tag control block. */
Packit 9741aa
     UNCH   status;           /* Status of context check. */
Packit 9741aa
     UNCH   tflags;           /* Flags: TAGCONER TAGNET TAGPEX TAGREF */
Packit 9741aa
     struct etd *tetd;        /* Element type definition for tag. */
Packit 9741aa
     struct entity **tsrm;    /* Current short reference map. */
Packit 9741aa
     struct mpos *tpos;       /* Position of next tag in this model. */
Packit 9741aa
};
Packit 9741aa
Packit 9741aa
#define RCEND    1            /* No more tokens: end element and retry GI. */
Packit 9741aa
#define RCREQ    2            /* Required GI must precede proposed GI. */
Packit 9741aa
#define RCMISS   3            /* GI invalid: not element end; no required GI. */
Packit 9741aa
#define RCHIT    4            /* GI is the one expected next. */
Packit 9741aa
#define RCMEX    5            /* GI invalid: minus exception. */
Packit 9741aa
#define RCHITMEX 6            /* RCMEX with invalid attempted minus exclusion.*/
Packit 9741aa
#define RCPEX    7            /* GI is valid solely because of plus exclusion.*/
Packit 9741aa
#define RCNREQ   8            /* Token is not required; can retry invalid GI. */