home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 13 / MA_Cover_13.bin / source / c / tidy26jul99 / html.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-08  |  18.7 KB  |  723 lines

  1. /* html.h
  2.  
  3.   (c) 1998 (W3C) MIT, INRIA, Keio University
  4.   See tidy.c for the copyright notice.
  5. */
  6.  
  7. /* indentation modes */
  8.  
  9. #define NO_INDENT      0
  10. #define BLOCK_INDENT   1
  11. #define SMART_INDENT   2
  12.  
  13. /* character encodings */
  14.  
  15. #define RAW         0
  16. #define ASCII       1
  17. #define LATIN1      2
  18. #define UTF8        3
  19. #define ISO2022     4
  20.  
  21. /* states for ISO 2022 
  22.  
  23.  A document in ISO-2022 based encoding uses some ESC sequences called 
  24.  "designator" to switch character sets. The designators defined and 
  25.  used in ISO-2022-JP are:
  26.  
  27.     "ESC" + "(" + ?     for ISO646 variants
  28.  
  29.     "ESC" + "$" + ?     and
  30.     "ESC" + "$" + "(" + ?   for multibyte character sets
  31. */
  32. #define FSM_ASCII   0
  33. #define FSM_ESC     1
  34. #define FSM_ESCD    2
  35. #define FSM_ESCDP   3
  36. #define FSM_ESCP    4
  37. #define FSM_NONASCII 5
  38.  
  39. /* lexer char types */
  40.  
  41. #define digit       1
  42. #define letter      2
  43. #define namechar    4
  44. #define white       8
  45. #define newline     16
  46. #define lowercase   32
  47. #define uppercase   64
  48.  
  49. /* lexer GetToken states */
  50.  
  51. #define LEX_CONTENT     0
  52. #define LEX_GT          1
  53. #define LEX_ENDTAG      2
  54. #define LEX_STARTTAG    3
  55. #define LEX_COMMENT     4
  56. #define LEX_DOCTYPE     5
  57. #define LEX_PROCINSTR   6
  58. #define LEX_ENDCOMMENT  7
  59. #define LEX_ASP         8
  60.  
  61. /* content model shortcut encoding */
  62.  
  63. #define CM_UNKNOWN         0
  64. #define CM_EMPTY        (1 << 0)
  65. #define CM_HTML         (1 << 1)
  66. #define CM_HEAD         (1 << 2)
  67. #define CM_BLOCK        (1 << 3)
  68. #define CM_INLINE       (1 << 4)
  69. #define CM_LIST         (1 << 5)
  70. #define CM_DEFLIST      (1 << 6)
  71. #define CM_TABLE        (1 << 7)
  72. #define CM_ROWGRP       (1 << 8)
  73. #define CM_ROW          (1 << 9)
  74. #define CM_FIELD        (1 << 10)
  75. #define CM_OBJECT       (1 << 11)
  76. #define CM_PARAM        (1 << 12)
  77. #define CM_FRAMES       (1 << 13)
  78. #define CM_HEADING      (1 << 14)
  79. #define CM_OPT          (1 << 15)
  80. #define CM_IMG          (1 << 16)
  81. #define CM_MIXED        (1 << 17)
  82. #define CM_NO_INDENT    (1 << 18)
  83. #define CM_OBSOLETE     (1 << 19)
  84. #define CM_NEW          (1 << 20)
  85.  
  86. /*
  87.  Linked list of class names and styles
  88. */
  89. struct _style
  90. {
  91.     char *tag;
  92.     char *tag_class;
  93.     char *properties;
  94.     struct _style *next;
  95. };
  96.  
  97. typedef struct _style Style;
  98.  
  99. /*
  100.  Linked list of style properties
  101. */
  102. struct _styleprop
  103. {
  104.     char *name;
  105.     char *value;
  106.     struct _styleprop *next;
  107. };
  108.  
  109. typedef struct _styleprop StyleProp;
  110.  
  111. /* mode controlling treatment of doctype */
  112. typedef enum
  113. {
  114.     doctype_omit,
  115.     doctype_auto,
  116.     doctype_strict,
  117.     doctype_loose,
  118.     doctype_user
  119. } DocTypeMode;
  120.  
  121. /*
  122.  Attribute/Value linked list node
  123. */
  124.  
  125. struct _attval
  126. {
  127.     struct _attval *next;
  128.     struct _attribute *dict;
  129.     struct _node *asp;
  130.     int delim;
  131.     char *attribute;
  132.     char *value;
  133. };
  134.  
  135. typedef struct _attval AttVal;
  136.  
  137. /*
  138.   node->type is one of these values
  139. */
  140. #define RootNode        0
  141. #define DocTypeTag      1
  142. #define CommentTag      2
  143. #define ProcInsTag      3
  144. #define TextNode        4
  145. #define StartTag        5
  146. #define EndTag          6
  147. #define StartEndTag     7
  148. #define AspTag          8
  149.  
  150. struct _node
  151. {
  152.     struct _node *parent;
  153.     struct _node *prev;
  154.     struct _node *next;
  155.     struct _node *last;
  156.     uint start;             /* start of span onto text array */
  157.     uint end;               /* end of span onto text array */
  158.     uint type;              /* TextNode, StartTag, EndTag etc. */
  159.     Bool implicit;          /* true if inferred */
  160.     struct _tagdict *was;   /* old tag when it was changed */
  161.     struct _tagdict *tag;   /* tag's dictionary definition */
  162.     char *element;          /* name (null for text nodes) */
  163.     struct _attval *attributes;
  164.     struct _node *content;
  165. };
  166.  
  167. typedef struct _node Node;
  168.  
  169. /*
  170.  
  171.  If the document uses just HTML 2.0 tags and attributes described it as HTML 2.0
  172.  Similarly for HTML 3.2 and the 3 flavors of HTML 4.0. If there are proprietary
  173.  tags and attributes then describe it as HTML Proprietary. If it includes the
  174.  xml-lang or xmlns attributes but is otherwise HTML 2.0, 3.2 or 4.0 then describe
  175.  it as one of the flavors of Voyager (strict, loose or frameset).
  176. */
  177.  
  178. #define VERS_UNKNOWN       0
  179.  
  180. #define VERS_HTML20        1
  181. #define VERS_HTML32        2
  182. #define VERS_HTML40_STRICT 4
  183. #define VERS_HTML40_LOOSE  8
  184. #define VERS_FRAMES       16
  185. #define VERS_XML          32
  186.  
  187. #define VERS_NETSCAPE     64
  188. #define VERS_MICROSOFT   128
  189. #define VERS_SUN         256
  190.  
  191. #define VERS_MALFORMED   512
  192.  
  193. #define VERS_ALL (VERS_HTML20|VERS_HTML32|VERS_HTML40_STRICT|VERS_HTML40_LOOSE|VERS_FRAMES)
  194. #define VERS_HTML40 (VERS_HTML40_STRICT|VERS_HTML40_LOOSE|VERS_FRAMES)
  195. #define VERS_LOOSE (VERS_HTML32|VERS_HTML40_LOOSE|VERS_FRAMES)
  196. #define VERS_IFRAMES (VERS_HTML40_LOOSE|VERS_FRAMES)
  197. #define VERS_FROM32  (VERS_HTML40_STRICT|VERS_LOOSE)
  198. #define VERS_PROPRIETARY (VERS_NETSCAPE|VERS_MICROSOFT|VERS_SUN)
  199.  
  200. #define VERS_EVERYTHING (VERS_ALL|VERS_PROPRIETARY)
  201.  
  202. /*
  203.   Mosaic handles inlines via a separate stack from other elements
  204.   We duplicate this to recover from inline markup errors such as:
  205.  
  206.      <i>italic text
  207.      <p>more italic text</b> normal text
  208.  
  209.   which for compatibility with Mosaic is mapped to:
  210.  
  211.      <i>italic text</i>
  212.      <p><i>more italic text</i> normal text
  213.  
  214.   Note that any inline end tag pop's the effect of the current
  215.   inline start tag, so that </b> pop's <i> in the above example.
  216. */
  217.  
  218. struct _inode
  219. {
  220.     struct _inode *next;
  221.     struct _tagdict *tag;   /* tag's dictionary definition */
  222.     char *element;          /* name (null for text nodes) */
  223.     struct _attval *attributes;
  224. };
  225.  
  226. typedef struct _inode IStack;
  227. typedef struct _lexer Lexer;
  228.  
  229. /* tidy.c */
  230. #define EndOfStream EOF
  231.  
  232. /* non-raw input is cleaned up*/
  233. typedef struct
  234. {
  235.     int state;     /* FSM for ISO2022 */
  236.     Bool pushed;
  237.     int c;
  238.     int tabs;
  239.     int lastcol;
  240.     int curcol;
  241.     int curline;
  242.     int encoding;
  243.     FILE *file;
  244.     Lexer *lexer;  /* needed for error reporting */
  245. } StreamIn;
  246.  
  247. StreamIn *OpenInput(FILE *fp);
  248. int ReadChar(StreamIn *in);
  249. void UngetChar(int c, StreamIn *in);
  250.  
  251.  
  252. /*
  253.   The following are private to the lexer
  254.   Use NewLexer(fp) to create a lexer, and
  255.   FreeLexer(lexer) to free it.
  256. */
  257.  
  258. struct _lexer
  259. {
  260.     StreamIn *in;   /* file stream */
  261.     FILE *errout;   /* error output stream */
  262.     uint badAccess; /* for accessibility errors */
  263.     uint badLayout; /* for bad style errors */
  264.     uint badChars;  /* for bad char encodings */
  265.     uint badForm;   /* for mismatched/mispositioned form tags */
  266.     uint warnings;  /* count of warnings in this document */
  267.     uint errors;    /* count of errors */
  268.     uint lines;     /* lines seen */
  269.     uint columns;   /* at start of current token */
  270.     Bool waswhite;  /* used to collapse contiguous white space */
  271.     Bool pushed;    /* true after token has been pushed back */
  272.     Bool insertspace;   /* when space is moved after end tag */
  273.     Bool excludeBlocks;  /* Netscape compatibility */
  274.     Bool isvoyager; /* true if xmlns attribute on html element */
  275.     uint versions;  /* bit vector of HTML versions */
  276.     int doctype;    /* version as given by doctype (if any) */
  277.     Bool bad_doctype; /* e.g. if html or PUBLIC is missing */
  278.     uint txtstart;  /* start of current node */
  279.     uint txtend;    /* end of current node */
  280.     uint state;     /* state of lexer's finite state machine */
  281.     struct _node *token;
  282.  
  283.     /* 
  284.       lexer character buffer
  285.  
  286.       parse tree nodes span onto this buffer
  287.       which contains the concatenated text
  288.       contents of all of the elements.
  289.  
  290.      lexsize must be reset for each file.
  291.     */
  292.     char *lexbuf;     /* char buffer */
  293.     uint lexlength;   /* allocated */
  294.     uint lexsize;     /* used */
  295.  
  296.     /* Inline stack for compatibility with Mosaic */
  297.     Node *inode;        /* for deferring text node */
  298.     IStack *insert;     /* for inferring inline tags */
  299.     IStack *istack;
  300.     uint istacklength;  /* allocated */
  301.     uint istacksize;    /* used */
  302.     uint istackbase;    /* start of frame */
  303.  
  304.     Style *styles;      /* used for cleaning up presentation markup */
  305. };
  306.  
  307. typedef void (Parser)(Lexer *lexer, Node *node, uint mode);
  308. typedef void (CheckAttribs)(Lexer *lexer, Node *node);
  309.  
  310. /* declaration for methods that check attribute values */
  311. typedef void (AttrCheck)(Lexer *lexer, Node *node, AttVal *attval);
  312.  
  313. struct _attribute
  314. {
  315.     struct _attribute *next;
  316.     char *name;
  317.     Bool nowrap;
  318.     unsigned versions;
  319.     AttrCheck *attrchk;
  320. };
  321.  
  322. typedef struct _attribute Attribute;
  323.  
  324. /* well known attributes */
  325. extern Attribute *attr_href;
  326. extern Attribute *attr_src;
  327. extern Attribute *attr_id;
  328. extern Attribute *attr_name;
  329. extern Attribute *attr_summary;
  330. extern Attribute *attr_alt;
  331. extern Attribute *attr_longdesc;
  332. extern Attribute *attr_title;
  333.  
  334. /*
  335.  Tag dictionary node
  336. */
  337.  
  338. struct _tagdict
  339. {
  340.     struct _tagdict *next;
  341.     char *name;
  342.     uint versions;
  343.     uint model;
  344.     Parser *parser;
  345.     CheckAttribs *chkattrs;
  346. };
  347.  
  348. typedef struct _tagdict Dict;
  349.  
  350. /* modes for GetToken() */
  351. #define IgnoreWhitespace    0
  352. #define MixedContent        1
  353. #define Preformatted        2
  354. #define IgnoreMarkup        3
  355.  
  356. void FatalError(char *msg);
  357.  
  358. Node *GetToken(Lexer *lexer, uint mode);
  359.  
  360. /* one level unget only */
  361. void UngetToken(Lexer *lexer);
  362.  
  363. /* create lexer for a file stream */
  364. Lexer *NewLexer(StreamIn *in);
  365.  
  366. /* delete lexer */
  367. void FreeLexer(Lexer *lexer);
  368.  
  369. Bool EndOfInput(Lexer *lexer);
  370.  
  371. /* used for script or style */
  372. Node *GetCDATA(Lexer *lexer, Node *container);
  373.  
  374. /* use this to create node for inferred start tag */
  375. Node *InferredTag(Lexer *lexer, char *name);
  376.  
  377. /* Parser calls this to create RootNode */
  378. Node *NewNode(void);
  379.  
  380. void FreeAttrs(Node *node);
  381.  
  382. /* use this to free parse tree node and all its children */
  383. void FreeNode(Node *node);
  384.  
  385. /* used to clone heading nodes when split by an <HR> */
  386. Node *CloneNode(Lexer *lexer, Node *element);
  387.  
  388. /* lexer char map - must be initialized */
  389. void InitMap(void);
  390.  
  391. void AddCharToLexer(Lexer *lexer, uint c);
  392. void AddStringLiteral(Lexer *lexer, char *str);
  393. Node *TextToken(Lexer *lexer);
  394.  
  395. /* used by pretty printer for tag names */
  396. char FoldCase(char c, Bool tocaps);
  397.  
  398. Bool IsLetter(uint c);
  399. Bool IsDigit(uint c);
  400. Bool IsWhite(uint c);
  401.  
  402. /* used to fixup doctype to match contents */
  403. Node *FindDocType(Node *root);
  404. void DiscardDocType(Node *root);
  405. Bool FixDocType(Lexer *lexer, Node *node);
  406. char *HTMLVersionName(Lexer *lexer);
  407. Bool FixXMLPI(Lexer *lexer, Node *root);
  408. Bool SetXHTMLDocType(Lexer *lexer, Node *root);
  409.  
  410. /* used to detect faulty attributes */
  411. Bool IsValidAttrName( char *attr);
  412.  
  413. /* parser.c */
  414. Node *ParseDocument(Lexer *lexer);
  415. Node *ParseXMLDocument(Lexer *lexer);
  416. Bool XMLPreserveWhiteSpace(Node *element);
  417. void DiscardElement(Lexer *lexer, Node *element);
  418. Bool IsJavaScript(Node *node);
  419.  
  420. /* attrs.c */
  421. void InitAttrs(void);
  422. void FreeAttrTable(void);
  423. Attribute *FindAttribute(AttVal *attval);
  424. Attribute *CheckAttribute(Lexer *lexer, Node *node, AttVal *attval);
  425. Bool IsUrl(char *attrname);
  426. Bool IsScript(char *attrname);
  427.  
  428. /* istack.c */
  429. void PushInline(Lexer *lexer, Node *node);
  430. void PopInline(Lexer *lexer, Node *node);
  431. Bool IsPushed(Lexer *lexer, Node *node);
  432. int InlineDup(Lexer *lexer, Node *node);
  433. Node *InsertedToken(Lexer *lexer);
  434. AttVal *DupAttrs(AttVal *attrs);
  435. void InsertNode(Node *element, Node *node);
  436.  
  437. /* clean.c */
  438. void FreeStyles(Lexer *lexer);
  439. void CleanTree(Lexer *lexer, Node *node);
  440. void EmFromI(Node *node);
  441.  
  442. /* entities.c */
  443. void InitEntities(void);
  444. void FreeEntities(void);
  445. uint EntityCode(char *name);
  446. char *EntityName(uint n);
  447.  
  448. /* tags.c */
  449. void DefineEmptyTag(char *name);
  450. void DefineInlineTag(char *name);
  451. void DefineBlockTag(char *name);
  452.  
  453. Bool FindTag(Node *node);
  454. void InitTags(void);
  455. void FreeTags(void);
  456. int HTMLVersion(Lexer *lexer);
  457.  
  458. /* localize.c -- used for all message text */
  459.  
  460. void NeedsAuthorIntervention(FILE *errout);
  461. void MissingBody(FILE *errout);
  462. void ReportNumberOfSlides(FILE *errout, int count);
  463. void GeneralInfo(FILE *errout);
  464. void HelloMessage(FILE *errout, char *date, char *filename);
  465. void ReportVersion(FILE *errout, char *filename, char *vers);
  466. void ReportNumWarnings(FILE *errout, Lexer *lexer);
  467.  
  468. /* pprint.c */
  469. void FreePrintBuf(void);
  470. void PPrintTree(Out *out, uint mode, uint indent,
  471.                     Lexer *lexer, Node *node);
  472. void PPrintXMLTree(Out *fout, uint mode, uint indent,
  473.                     Lexer *lexer, Node *node);
  474. void PFlushLine(Out *out, uint indent);
  475. void PCondFlushLine(Out *out, uint indent);
  476. void PPrintAsp(Out *fout, uint indent, Lexer *lexer, Node *node);
  477.  
  478. /* tidy.c */
  479. #define EndOfStream EOF
  480.  
  481. void *MemAlloc(uint size);
  482. void *MemRealloc(void *mem, uint newsize);
  483. void MemFree(void *mem);
  484. int ReadChar(StreamIn *in);
  485. void UngetChar(int c, StreamIn *in);
  486.  
  487. /* string functions */
  488. char *wstrdup(char *str);
  489. char *wstrndup(char *str, int len);
  490. void wstrncpy(char *s1, char *s2, int size);
  491. int wstrcmp(char *s1, char *s2);
  492. int wstrcasecmp(char *s1, char *s2);    
  493. int wstrncmp(char *s1, char *s2, int n);
  494. int wstrncasecmp(char *s1, char *s2, int n);   
  495. int wstrlen(char *str);
  496. Bool wsubstr(char *s1, char *s2);
  497. void ClearMemory(void *, uint size);
  498.  
  499. #define uprintf fprintf
  500.  
  501. /* error codes for entities */
  502.  
  503. #define MISSING_SEMICOLON       1
  504. #define UNKNOWN_ENTITY          2
  505. #define UNESCAPED_AMPERSAND     3
  506.  
  507. /* error codes for element messages */
  508.  
  509. #define MISSING_ENDTAG_FOR      1
  510. #define MISSING_ENDTAG_BEFORE   2
  511. #define DISCARDING_UNEXPECTED   3
  512. #define NON_MATCHING_ENDTAG     4
  513. #define TAG_NOT_ALLOWED_IN      5
  514. #define MISSING_STARTTAG        6
  515. #define UNEXPECTED_ENDTAG       7
  516. #define USING_BR_INPLACE_OF     8
  517. #define INSERTING_TAG           9
  518. #define SUSPECTED_MISSING_QUOTE 10
  519. #define MISSING_TITLE_ELEMENT   11
  520. #define DUPLICATE_FRAMESET      12
  521. #define CANT_BE_NESTED          13
  522. #define OBSOLETE_ELEMENT        14
  523. #define PROPRIETARY_ELEMENT     15
  524. #define UNKNOWN_ELEMENT         16
  525. #define TRIM_EMPTY_ELEMENT      17
  526. #define FORCED_END_ANCHOR       18
  527. #define ILLEGAL_NESTING         19
  528. #define NOFRAMES_CONTENT        20
  529. #define CONTENT_AFTER_BODY      21
  530. #define INCONSISTENT_VERSION    22
  531. #define BAD_COMMENT             23
  532. #define BAD_CDATA_CONTENT       24
  533. #define INCONSISTENT_NAMESPACE  25
  534. #define DOCTYPE_AFTER_TAGS      26
  535. #define MALFORMED_DOCTYPE       27
  536. #define UNEXPECTED_END_OF_FILE  28
  537.  
  538. /* error codes used for attribute messages */
  539.  
  540. #define UNKNOWN_ATTRIBUTE       1
  541. #define MISSING_ATTRIBUTE       2
  542. #define MISSING_ATTR_VALUE      3
  543. #define BAD_ATTRIBUTE_VALUE     4
  544. #define UNEXPECTED_GT           5
  545. #define PROPRIETARY_ATTR_VALUE  6
  546. #define MISSING_IMAGEMAP        7
  547. #define XML_ATTRIBUTE_VALUE     8
  548. #define UNEXPECTED_QUOTEMARK    9
  549.  
  550. /* accessibility flaws */
  551.  
  552. #define MISSING_IMAGE_ALT       1
  553. #define MISSING_LINK_ALT        2
  554. #define MISSING_SUMMARY         4
  555. #define MISSING_IMAGE_MAP       8
  556. #define USING_FRAMES            16
  557. #define USING_NOFRAMES          32
  558.  
  559. /* presentation flaws */
  560.  
  561. #define USING_SPACER            1
  562. #define USING_LAYER             2
  563. #define USING_NOBR              4
  564. #define USING_FONT              8
  565.  
  566. /* character encoding errors */
  567. #define WINDOWS_CHARS           1
  568. #define NON_ASCII               2
  569. #define FOUND_UTF16             4
  570.  
  571. void HelpText(FILE *errout, char *prog);
  572. void GeneralInfo(FILE *errout);
  573. void UnknownOption(FILE *errout, char c);
  574. void UnknownFile(FILE *errout, char *program, char *file);
  575. void ErrorSummary(Lexer *lexer);
  576. void ReportEncodingError(Lexer *lexer, uint code, uint c);
  577. void ReportEntityError(Lexer *lexer, uint code, char *entity, int c);
  578. void ReportAttrError(Lexer *lexer, Node *node, char *attr, uint code);
  579. void ReportWarning(Lexer *lexer, Node *element, Node *node, uint code);
  580. void ReportError(Lexer *lexer, Node *element, Node *node, uint code);
  581.  
  582. /* slide maker functions */
  583. Node *FindBody(Node *node);
  584.  
  585. /* counts number of h1 children belonging to node */
  586. int CountSlides(Node *node);
  587. void PPrintSlide(Out *fout, uint mode, uint indent, Lexer *lexer);
  588. void CreateSlides(Lexer *lexer, Node *root);
  589.  
  590. /* config parameters, see config.c for defaults */
  591.  
  592. void InitConfig(void);
  593. void FreeConfig(void);
  594. void ParseConfigFile(char *file);
  595. void AdjustConfig(void);
  596.  
  597. extern uint spaces;         /* default indentation */
  598. extern uint wraplen;        /* default wrap margin */
  599. extern int CharEncoding;
  600. extern int tabsize;
  601.  
  602. extern DocTypeMode doctype_mode;   /* see doctype property */
  603. extern char *doctype_str;   /* user specified doctype */
  604. extern char *slide_style;   /* style sheet for slides */
  605.  
  606. extern char *errfile;       /* file name to write errors to */
  607. extern Bool writeback;      /* if true then output tidied markup */
  608.  
  609. extern Bool OnlyErrors;     /* if true normal output is suppressed */
  610. extern Bool ShowWarnings;   /* errors are always shown */
  611. extern Bool IndentContent;
  612. extern Bool SmartIndent;
  613. extern Bool HideEndTags;
  614. extern Bool XmlTags;
  615. extern Bool XmlOut;
  616. extern Bool xHTML;
  617. extern Bool XmlPi;      /* add <?xml?> */
  618. extern Bool XmlPIs;     /* assume PIs end with ?> as per XML */
  619. extern Bool RawOut;
  620. extern Bool UpperCaseTags;
  621. extern Bool UpperCaseAttrs;
  622. extern Bool MakeClean;
  623. extern Bool LogicalEmphasis;
  624. extern Bool DropFontTags;
  625. extern Bool BurstSlides;
  626. extern Bool BreakBeforeBR;
  627. extern Bool NumEntities;
  628. extern Bool QuoteMarks;
  629. extern Bool QuoteNbsp;
  630. extern Bool QuoteAmpersand;
  631. extern Bool WrapScriptlets;
  632. extern Bool WrapAsp;
  633. extern Bool FixBackslash;
  634. extern Bool IndentAttributes;
  635.  
  636. /* Parser methods for tags */
  637.  
  638. Parser ParseHTML;
  639. Parser ParseHead;
  640. Parser ParseTitle;
  641. Parser ParseScript;
  642. Parser ParseFrameSet;
  643. Parser ParseNoFrames;
  644. Parser ParseBody;
  645. Parser ParsePre;
  646. Parser ParseList;
  647. Parser ParseLI;
  648. Parser ParseDefList;
  649. Parser ParseBlock;
  650. Parser ParseInline;
  651. Parser ParseTableTag;
  652. Parser ParseColGroup;
  653. Parser ParseRowGroup;
  654. Parser ParseRow;
  655. Parser ParseSelect;
  656. Parser ParseOptGroup;
  657. Parser ParseText;
  658. Parser ParseObject;
  659. Parser ParseMap;
  660.  
  661. /* Attribute checking methods */
  662.  
  663. CheckAttribs CheckIMG;
  664. CheckAttribs CheckAREA;
  665. CheckAttribs CheckTABLE;
  666. CheckAttribs CheckCaption;
  667. CheckAttribs CheckSCRIPT;
  668. CheckAttribs CheckHTML;
  669.  
  670. /* used to control printing of null attributes */
  671. Bool IsBoolAttribute(AttVal *attval);
  672.  
  673. extern Dict *tag_html;
  674. extern Dict *tag_head;
  675. extern Dict *tag_body;
  676. extern Dict *tag_frameset;
  677. extern Dict *tag_noframes;
  678. extern Dict *tag_title;
  679. extern Dict *tag_hr;
  680. extern Dict *tag_pre;
  681. extern Dict *tag_listing;
  682. extern Dict *tag_h1;
  683. extern Dict *tag_h2;
  684. extern Dict *tag_p;
  685. extern Dict *tag_ul;
  686. extern Dict *tag_ol;
  687. extern Dict *tag_dir;
  688. extern Dict *tag_li;
  689. extern Dict *tag_dt;
  690. extern Dict *tag_dd;
  691. extern Dict *tag_dl;
  692. extern Dict *tag_td;
  693. extern Dict *tag_th;
  694. extern Dict *tag_tr;
  695. extern Dict *tag_col;
  696. extern Dict *tag_br;
  697. extern Dict *tag_a;
  698. extern Dict *tag_link;
  699. extern Dict *tag_b;
  700. extern Dict *tag_i;
  701. extern Dict *tag_strong;
  702. extern Dict *tag_em;
  703. extern Dict *tag_param;
  704. extern Dict *tag_option;
  705. extern Dict *tag_optgroup;
  706. extern Dict *tag_map;
  707. extern Dict *tag_area;
  708. extern Dict *tag_nobr;
  709. extern Dict *tag_wbr;
  710. extern Dict *tag_layer;
  711. extern Dict *tag_center;
  712. extern Dict *tag_spacer;
  713. extern Dict *tag_font;
  714. extern Dict *tag_style;
  715. extern Dict *tag_script;
  716. extern Dict *tag_noscript;
  717. extern Dict *tag_table;
  718. extern Dict *tag_caption;
  719. extern Dict *tag_form;
  720. extern Dict *tag_blockquote;
  721. extern Dict *tag_div;
  722. extern Dict *tag_span;
  723.