125 lines
5.8 KiB
C
125 lines
5.8 KiB
C
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these librararies and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/* $XConsortium: sgmlmain.h /main/3 1996/06/19 17:17:52 drk $ */
|
|
/* SGMLMAIN: Main interface to SGML services.
|
|
|
|
Preprocessor variable names are the only supported interface
|
|
to data maintained by SGML. They are defined in this file or in adl.h.
|
|
*/
|
|
/* Return control block types (RCBTYPE) from calls to parser (SGML):
|
|
Names and strings follow the convention for the IPBs.
|
|
*/
|
|
enum sgmlevent {
|
|
SGMLEOD, /* End of document. */
|
|
SGMLDAF, /* Data found. */
|
|
SGMLSTG, /* Start-tag found. */
|
|
SGMLETG, /* End-tag found. */
|
|
SGMLREF, /* Record end found. */
|
|
SGMLPIS, /* Processing instruction (string). */
|
|
SGMLAPP /* APPINFO (string) */
|
|
};
|
|
|
|
struct rcbdata { /* Return control block: DAF EOD REF PIS APP. */
|
|
UNS contersw; /* 1=context error; 2,4,8=data type; 0=not. */
|
|
UNS datalen; /* Length of data or PI (0=single nonchar). */
|
|
UNCH *data; /* Data, PI, single nonSGML, or NDATA ecb ptr. */
|
|
};
|
|
|
|
struct rcbtag { /* Return control block for STG and ETG. */
|
|
UNS contersw; /* 1=context error; 2=NET enabled; 0/0=not. */
|
|
UNS tagmin; /* Minim: NONE NULL NET DATA; implied by S/ETAG */
|
|
UNCH *curgi; /* Start-tag (or end-tag) GI. */
|
|
union {
|
|
struct ad *al; /* Start-tag: attribute list. */
|
|
UNCH *oldgi; /* End-tag: resumed GI. */
|
|
} ru;
|
|
struct ad *lal; /* Start-tag: link attribute list (UNUSED). */
|
|
UNS format; /* Format class for default processing. */
|
|
struct etd *tagreal; /* Dummy etd or ptr to GI that implied this tag.*/
|
|
int etictr; /* Number of elements on stack with NET enabled.*/
|
|
UNCH *srmnm; /* Current SHORTREF map name (NULL=#EMPTY). */
|
|
};
|
|
|
|
/* Accessors for rcbdata and rcbtag. */
|
|
/* Datatype abbreviations: C=unsigned char S=string U=unsigned int L=4 bytes
|
|
A=array P=ptr to structure N=name (see sgmlcb.h)
|
|
*/
|
|
/* Data control block fields: processing instructions (SGMLPIS).
|
|
*/
|
|
#define PDATA(d) ((d).data) /*S PI string. */
|
|
#define PDATALEN(d) ((d).datalen) /*U Length of PI string. */
|
|
#define PIESW(d) (((d).contersw & 4)) /*U 1=PIDATA entity returned. */
|
|
/* Data control block fields: other data types.
|
|
*/
|
|
#define CDATA(d) ((d).data) /*S CDATA content string. */
|
|
#define CDATALEN(d) ((d).datalen) /*U Length of CDATA content string. */
|
|
#define CONTERSW(d) (((d).contersw &1))/*U 1=CDATA or TAG out of context. */
|
|
#define CDESW(d) (((d).contersw & 2)) /*U 1=CDATA entity returned. */
|
|
#define SDESW(d) (((d).contersw & 4)) /*U 1=SDATA entity returned. */
|
|
#define NDESW(d) (((d).contersw & 8)) /*U 1=NDATA entity returned. */
|
|
#define NEPTR(d) ((PNE)(d).data) /*P Ptr to NDATA control block. */
|
|
#define MARKUP(d) ((d).data) /*A Markup delimiter strings. */
|
|
#define DTYPELEN(d) ((d).datalen) /*U Length of doc type name +len+EOS. */
|
|
#define DOCTYPE(d) ((d).data) /*S Document type name (with len+EOS). */
|
|
#define ADATA(d) ((d).data) /*S APPINFO */
|
|
#define ADATALEN(d) ((d).datalen) /*U Length of APPINFO string. */
|
|
/* Tag control block fields.
|
|
*/
|
|
#define ALPTR(t) ((t).ru.al) /*P Ptr to SGML attribute list. */
|
|
#define CURGI(t) ((t).curgi+1) /*N GI of started or ended element. */
|
|
#define OLDGI(t) ((t).ru.oldgi) /*S GI of resumed element. */
|
|
#define TAGMIN(t) (t).tagmin /*U Minimization for current tag. */
|
|
#define TAGREAL(t) ((t).tagreal) /*P Dummy etd that implied this tag. */
|
|
#define TAGRLNM(t) ((UNCH *)(t).tagreal) /*P GI of tag that implied this tag.*/
|
|
#define ETISW(t) (((t).contersw & 2)) /*U 1=NET delimiter enabled by ETI. */
|
|
#define PEXSW(t) (((t).contersw & 4)) /*U 1=Element was plus exception. */
|
|
#define MTYSW(t) (((t).contersw & 8)) /*U 1=Element is empty. */
|
|
#define ETICTR(t) ((t).etictr) /*U Number of active NET delimiters. */
|
|
#define SRMNM(t) ((t).srmnm) /*S Name of current SHORTREF map. */
|
|
#define SRMCNT(t) ((t).contersw) /*U Number of SHORTREF maps defined. */
|
|
#define FORMAT(t) ((t).format) /*U Format class.*/
|
|
|
|
/* These function names are chosen so as to be distinct in the first 6
|
|
letters. */
|
|
|
|
/* Initialize. */
|
|
struct markup *sgmlset P((struct switches *));
|
|
/* Cleanup and return capacity usage statistics. */
|
|
VOID sgmlend P((struct sgmlcap *));
|
|
/* Set document entity. */
|
|
int sgmlsdoc P((UNIV));
|
|
/* Get entity. */
|
|
int sgmlgent P((UNCH *, PNE *, UNCH **));
|
|
/* Mark an entity. Return is non-zero if already marked.*/
|
|
int sgmlment P((UNCH *));
|
|
/* Get the next sgml event. */
|
|
enum sgmlevent sgmlnext P((struct rcbdata *, struct rcbtag *));
|
|
/* Get the error count. */
|
|
int sgmlgcnterr P((void));
|
|
/* Get the current location. */
|
|
int sgmlloc P((unsigned long *, char **));
|
|
/* Write out the SGML declaration. */
|
|
VOID sgmlwrsd P((FILE *));
|
|
/* Note subdocument capacity usage. */
|
|
VOID sgmlsubcap P((long *));
|