home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 10 / Fresh_Fish_10_2352.bin / new / dev / lang / sgmls / src / pcbrf.c < prev    next >
C/C++ Source or Header  |  1994-07-10  |  68KB  |  1,352 lines

  1. /* PCBRF: Parse tables for reference concrete syntax.
  2. */
  3. #include "config.h"
  4. #include "entity.h"           /* Templates for entity control blocks. */
  5. #include "action.h"           /* Action names for all parsing. */
  6. #include "synxtrn.h"          /* Declarations for concrete syntax constants. */
  7. #include "adl.h"              /* Definitions for attribute list processing. */
  8. /* PCBCONM: State and action table for content parse of mixed content.
  9.             Initial state assumes a start-tag was just processed.
  10. */
  11. /* Symbols for state names (end with a number). */
  12. #define ET0     0   /* Markup found or buffer flushed; no data. */
  13. #define DA0     2   /* Data in buffer. */
  14. #define DA1     4   /* Data and space in buffer. */
  15. #define ER0     6   /* ERO found; start lookahead buffer. */
  16. #define CR0     8   /* CRO found (ERO, RNI). */
  17. #define RS0    10   /* RS found; possible SR 3-6. */
  18. #define ME0    12   /* MSC found; possible SR26. */
  19. #define ME1    14   /* MSC, MSC found. */
  20. #define ES0    16   /* TAGO found; start lookahead buffer. */
  21. #define EE0    18   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  22. #define NE0    20   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  23. #define MD0    22   /* MDO found (TAGO, MDO[2]). */
  24. #define MC0    24   /* MDO, COM found. */
  25. #define SC0    26   /* COM found; possible SR19-20. */
  26. #define SP0    28   /* Space found; data pending; possible SR7 or SR9. */
  27. #define SR0    30   /* SPCR found; possible SR7 or SR9. */
  28. #define TB0    32   /* TAB found; possible SR7 or SR9. */
  29.  
  30. int pcbcnet = ET0;            /* PCBCONM: markup found or data buffer flushed.*/
  31. int pcbcnda = DA0;            /* PCBCONM: data in buffer. */
  32.  
  33. static UNCH
  34. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  35.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  36. et0 []={DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,TB0 ,DA0 ,ET0 ,ER0 ,
  37.         ET0 ,SC0 ,DA0 ,ET0 ,ET0 ,SR0 ,DA0 ,ME0 ,ET0 ,DA0 ,ET0 ,DA0 ,ES0 ,ET0 },/*et0*/
  38. et0a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,GET_,GET_,RSR_,SR2_,DAS_,DAS_,NSC_,LAS_,
  39.         REF_,NOP_,DAS_,NED_,SR10,DAS_,DAS_,NOP_,SR25,DAS_,SR11,DAS_,LAS_,FCE_},
  40.  
  41. da0 []={DA0 ,DA0 ,DA0 ,DA0 ,DA1 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,
  42.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,ET0 ,ET0 },/*da0*/
  43. da0a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,DAF_,DAF_,
  44.         DAF_,DAF_,NOP_,DAF_,DAF_,DAF_,NOP_,DAF_,DAF_,NOP_,DAF_,NOP_,DAF_,DAF_},
  45.  
  46. da1 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,
  47.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,ET0 ,ET0 },/*da1*/
  48. da1a[]={NOP_,NOP_,NOP_,NOP_,DAR_,DAF_,DAF_,DAR_,DAF_,DAR_,DAR_,NOP_,DAF_,DAF_,
  49.         DAF_,DAF_,NOP_,DAF_,DAF_,DAR_,NOP_,DAF_,DAF_,NOP_,DAF_,NOP_,DAF_,DAF_},
  50.  
  51. er0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  52.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  53. er0a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  54.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  55.  
  56. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  57.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  58. cr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  59.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  60. cr0a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  61.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  62.  
  63. rs0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  64.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*rs0*/
  65. rs0a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  66.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  67.  
  68. me0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  69.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ME1 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me0*/
  70. me0a[]={SR26,SR26,SR26,SR26,SR26,SR26,SR26,GET_,SR26,SR26,SR26,SR26,SR26,SR26,
  71.         SR26,SR26,SR26,SR26,SR26,SR26,SR26,NOP_,SR26,SR26,SR26,SR26,SR26,SR26},
  72.  
  73. me1 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  74.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me1*/
  75. me1a[]={RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,GET_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,
  76.         RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,MSE_,RBR_,RBR_},
  77.  
  78. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  79.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  80. es0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ES0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  81.         ET0 ,ET0 ,EE0 ,NE0 ,ET0 ,ET0 ,MD0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*es0*/
  82. es0a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  83.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  84.  
  85. ee0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,EE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  86.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ee0*/
  87. ee0a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  88.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  89.  
  90. ne0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,NE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  91.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ne0*/
  92. ne0a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  93.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  94.  
  95. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  96.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  97. md0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, MD0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  98.         ET0 ,MC0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*md0*/
  99. md0a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  100.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  101.  
  102. mc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, MC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  103.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*mc0*/
  104. mc0a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  105.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  106.  
  107. sc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, SC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  108.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*sc0*/
  109. sc0a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  110.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  111.  
  112. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  113.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  114. sp0 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,SP0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  115.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*sp0*/
  116. sp0a[]={NOP_,NOP_,NOP_,NOP_,SR9_,DAF_,DAF_,GTR_,DAF_,SR7_,SR9_,NOP_,NOP_,DAF_,
  117.         DAF_,DAF_,NOP_,DAF_,DAF_,SR9_,NOP_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,DAF_},
  118.  
  119. sr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,SR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  120.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*sr0*/
  121. sr0a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  122.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  123.  
  124. tb0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,TB0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  125.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*tb0*/
  126. tb0a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  127.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  128.  
  129. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  130.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  131.  
  132. *conmtab[] = {et0, et0a, da0, da0a, da1, da1a, er0, er0a, cr0, cr0a, rs0, rs0a,
  133.               me0, me0a, me1, me1a, es0, es0a, ee0, ee0a, ne0, ne0a, md0, md0a,
  134.               mc0, mc0a, sc0, sc0a, sp0, sp0a, sr0, sr0a, tb0, tb0a };
  135. struct parse pcbconm = {"CONM", lexcnm, conmtab, 0, 0, 0, 0};
  136. #undef ET0
  137. #undef DA0
  138. #undef DA1
  139. #undef ER0
  140. #undef CR0
  141. #undef RS0
  142. #undef ME0
  143. #undef ME1
  144. #undef ES0
  145. #undef EE0
  146. #undef NE0
  147. #undef MD0
  148. #undef MC0
  149. #undef SC0
  150. #undef SP0
  151. #undef SR0
  152. #undef TB0
  153. /* PCBCONE: State and action table for content parse of element content.
  154.             Initial state assumes a start-tag was just processed.
  155. */
  156. /* Symbols for state names (end with a number). */
  157. #define ET2     0   /* Markup found. */
  158. #define ER2     2   /* ERO found; start lookahead buffer. */
  159. #define CR2     4   /* CRO found (ERO, RNI). */
  160. #define RS2     6   /* RS found; possible SR 3-6 if they were declared. */
  161. #define ME2     8   /* MSC found. */
  162. #define ME3    10   /* MSC, MSC found. */
  163. #define ES2    12   /* TAGO found; start lookahead buffer. */
  164. #define EE2    14   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  165. #define NE2    16   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  166. #define MD2    18   /* MDO found (TAGO, MDO[2]). */
  167. #define MC2    20   /* MDO, COM found. */
  168. #define SC2    22   /* COM found; possible SR19-20 if they were mapped. */
  169. #define SP2    24   /* Space found; possible SR7 or SR9. */
  170. #define SR2    26   /* SPCR found; possible SR7 or SR9. */
  171. #define TB2    28   /* TAB found; possible SR7 or SR9. */
  172.  
  173. static UNCH
  174. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  175.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  176. et2 []={ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,TB2 ,ET2 ,ET2 ,ER2 ,
  177.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*et2*/
  178. et2a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,GET_,GET_,RS_ ,SR2_,NOP_,DCE_,DCE_,LAS_,
  179.         NOP_,NOP_,DCE_,NED_,SR10,NOP_,DCE_,NOP_,SR25,DCE_,SR11,DCE_,LAS_,FCE_},
  180.  
  181. er2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  182.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 },/*er2*/
  183. er2a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  184.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  185.  
  186. cr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  187.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*cr2*/
  188. cr2a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  189.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  190.  
  191. rs2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  192.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*rs2*/
  193. rs2a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  194.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  195.  
  196. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  197.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  198. me2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  199.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ME3 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me2*/
  200. me2a[]={SR26,SR26,SR26,SR26,SR26,SR26,SR26,GET_,SR26,SR26,SR26,SR26,SR26,SR26,
  201.         SR26,SR26,SR26,SR26,SR26,SR26,SR26,NOP_,SR26,SR26,SR26,SR26,SR26,SR26},
  202.  
  203. me3 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  204.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me3*/
  205. me3a[]={RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,GET_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,
  206.         RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,RBR_,MSE_,RBR_,RBR_},
  207.  
  208. es2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  209.         ET2 ,ET2 ,EE2 ,NE2 ,ET2 ,ET2 ,MD2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*es2*/
  210. es2a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  211.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  212.  
  213. ee2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,EE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  214.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ee2*/
  215. ee2a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  216.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  217.  
  218. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  219.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  220. ne2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,NE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  221.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ne2*/
  222. ne2a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  223.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  224.  
  225. md2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, MD2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  226.         ET2 ,MC2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*md2*/
  227. md2a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  228.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  229.  
  230. mc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, MC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  231.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*mc2*/
  232. mc2a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  233.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  234.  
  235. sc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, SC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  236.         ET2 ,ET2 ,ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*sc2*/
  237. sc2a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  238.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  239.  
  240. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  241.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  242. sp2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,
  243.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*sp2*/
  244. sp2a[]={DCE_,DCE_,DCE_,DCE_,SR9_,DCE_,GET_,GET_,RS_ ,SR7_,SR9_,DCE_,DCE_,LAS_,
  245.         NOP_,NOP_,DCE_,NED_,SR10,SR9_,DCE_,LAS_,DCE_,DCE_,SR11,DCE_,LAS_,DCE_},
  246.  
  247. sr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  248.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*sr2*/
  249. sr2a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  250.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  251.  
  252. tb2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,TB2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  253.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*tb2*/
  254. tb2a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  255.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  256.  
  257. *conetab[] = {et2, et2a, er2, er2a, cr2, cr2a, rs2, rs2a, me2, me2a, me3, me3a,
  258.               es2, es2a, ee2, ee2a, ne2, ne2a, md2, md2a, mc2, mc2a, sc2, sc2a,
  259.               sp2, sp2a, sr2, sr2a, tb2, tb2a  };
  260. struct parse pcbcone = {"CONE", lexcnm, conetab, 0, 0, 0, 0};
  261. #undef ET2
  262. #undef ER2
  263. #undef CR2
  264. #undef RS2
  265. #undef ME2
  266. #undef ME3
  267. #undef ES2
  268. #undef EE2
  269. #undef NE2
  270. #undef MD2
  271. #undef MC2
  272. #undef SC2
  273. #undef SP2
  274. #undef SR2
  275. #undef TB2
  276. /* PCBCONR: State and action table for content parse of replaceable character
  277.             data.  Initial state assumes a start-tag was just processed.
  278.             Only entity references and character references are recognized.
  279. */
  280. /* Symbols for state names (end with a number). */
  281. #define ET4     0   /* Markup found or buffer flushed; no data. */
  282. #define DA4     2   /* Data in buffer. */
  283. #define ER4     4   /* ERO found; start lookahead buffer. */
  284. #define CR4     6   /* CRO found (ER2, RNI). */
  285. #define ES4     8   /* TAGO found; start lookahead buffer. */
  286. #define EE4    10   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  287. #define NE4    12   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  288.  
  289. static UNCH
  290. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  291.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  292. et4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,ET4 ,ER4 ,
  293.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ES4 },/*et4*/
  294. et4a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,NSC_,LAS_,
  295.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  296.  
  297. da4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,ET4 ,ET4 ,
  298.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 },/*da4*/
  299. da4a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,DAF_,
  300.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  301.  
  302. er4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ER4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  303.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 },/*er4*/
  304. er4a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  305.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_},
  306.  
  307. cr4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  308.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*cr4*/
  309. cr4a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  310.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  311.  
  312. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  313.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  314. es4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  315.         ET4 ,ET4 ,EE4 ,NE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  316. es4a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  317.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  318.  
  319. ee4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,EE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  320.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*ee4*/
  321. ee4a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  322.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  323.  
  324. ne4 []={EE4 ,EE4 ,EE4 ,ET4 ,EE4 ,EE4 ,EE4 ,NE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,
  325.         EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,ET4 ,EE4 },/*ne4*/
  326. ne4a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  327.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  328.  
  329. *conrtab[] = {et4, et4a, da4, da4a, er4, er4a, cr4, cr4a,
  330.               es4, es4a, ee4, ee4a, ne4, ne4a};
  331. struct parse pcbconr = {"CONR", lexcon, conrtab, 0, 0, 0, 0};
  332. #undef ET4
  333. #undef DA4
  334. #undef ER4
  335. #undef CR4
  336. #undef ES4
  337. #undef EE4
  338. #undef NE4
  339. /* PCBCONC: State and action table for content parse of character data.
  340.             Initial state assumes a start-tag was just processed.
  341. */
  342. /* Symbols for state names (end with a number). */
  343. #define ET6     0   /* Markup found or buffer flushed; no data. */
  344. #define DA6     2   /* Data in buffer. */
  345. #define ES6     4   /* TAGO found; start lookahead buffer. */
  346. #define EE6     6   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  347. #define NE6     8   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  348.  
  349. static UNCH
  350. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  351.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  352. et6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,
  353.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ES6 },/*et6*/
  354. et6a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,NSC_,DAS_,
  355.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  356.  
  357. da6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,ET6 ,ET6 ,
  358.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 },/*da6*/
  359. da6a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,DAF_,
  360.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  361.  
  362. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  363.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  364. es6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ES6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  365.         ET6 ,ET6 ,EE6 ,NE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*es6*/
  366. es6a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  367.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  368.  
  369. ee6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,EE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  370.         ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*ee6*/
  371. ee6a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  372.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  373.  
  374. ne6 []={EE6 ,EE6 ,EE6 ,ET6 ,EE6 ,EE6 ,EE6 ,NE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,
  375.         EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,ET6 ,EE6 },/*ne6*/
  376. ne6a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  377.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  378.  
  379. *conctab[] = {et6, et6a, da6, da6a, es6, es6a, ee6, ee6a, ne6, ne6a};
  380. struct parse pcbconc = {"CONC", lexcon, conctab, 0, 0, 0, 0};
  381. #undef ET6
  382. #undef DA6
  383. #undef ES6
  384. #undef EE6
  385. #undef NE6
  386. /* PCBPRO: State and action table for prolog parse.
  387.            Initial state assumes document just began.
  388. */
  389. /* Symbols for state names (end with a number). */
  390. #define ET7     0   /* Markup found. */
  391. #define ES7     2   /* TAGO found; start lookahead buffer. */
  392. #define MD7     4   /* MDO found (TAGO, MDO[2]). */
  393. #define MC7     6   /* MDO, COM found. */
  394. #define EE7     8   /* TAGO, ETI found */
  395.  
  396. static UNCH
  397. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  398.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  399. et7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  400.         ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 },/*et7*/
  401. et7a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,EE_ ,GET_,RS_ ,NOP_,NOP_,DCE_,DCE_,DCE_,
  402.         DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,LAS_},
  403.  
  404. es7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  405.         ET7 ,ET7 ,EE7 ,ET7 ,MD7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 },/*es7*/
  406. es7a[]={PEP_,PEP_,PEP_,STE_,PEP_,PEP_,PEP_,GET_,PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,
  407.         PEP_,PEP_,LAM_,PEP_,LAM_,PEP_,PEP_,PEP_,PIS_,PEP_,STE_,PEP_},
  408.  
  409. md7 []={ET7, ET7, ET7, ET7, ET7 ,ET7, ET7, MD7, ET7 ,ET7 ,ET7 ,ET7, ET7, ET7,
  410.         ET7, MC7, ET7, ET7, ET7, ET7 ,ET7, ET7, ET7, ET7 ,ET7, ET7 },/*md7*/
  411. md7a[]={LAF_,LAF_,LAF_,DTD_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  412.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,MSP_,LAF_,LAF_,LAF_,NOP_,LAF_},
  413.  
  414. mc7 []={ET7, ET7, ET7, ET7, ET7, ET7 ,ET7, MC7, ET7 ,ET7, ET7 ,ET7, ET7, ET7,
  415.         ET7, ET7, ET7, ET7, ET7, ET7 ,ET7 ,ET7, ET7 ,ET7 ,ET7, ET7 },/*mc7*/
  416. mc7a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  417.         LAF_,MDC_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  418.  
  419. ee7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,EE7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  420.         ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 },/*ee7*/
  421. ee7a[]={LAF_,LAF_,LAF_,ETE_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  422.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,ETE_,LAF_},
  423.  
  424. *protab[] = {et7, et7a, es7, es7a, md7, md7a, mc7, mc7a, ee7, ee7a};
  425. struct parse pcbpro = {"PRO", lexcon, protab, 0, 0, 0, 0};
  426. #undef ET7
  427. #undef ES7
  428. #undef MD7
  429. #undef MC7
  430. #undef EE7
  431. /* PCBMDS: State and action table for parse of markup declaration subset.
  432.            Initial state assumes subset just began (MSO found).
  433. */
  434. /* Symbols for state names (end with a number). */
  435. #define ET8     0   /* Markup found. */
  436. #define ER8     2   /* PERO found; start lookahead buffer. */
  437. #define ME8     4   /* MSC found. */
  438. #define ME9     6   /* MSC, MSC found. */
  439. #define ES8     8   /* TAGO found; start lookahead buffer. */
  440. #define MD8    10   /* MDO found (TAGO, MDO[2]). */
  441. #define MC8    12   /* MDO, CD found. */
  442. #define DC8    14   /* Data characters found (erroneously). */
  443.  
  444. static UNCH
  445. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  446.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  447. et8 []={DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,ET8 ,ET8 ,ET8 ,ET8 ,DC8 ,DC8 ,DC8 ,
  448.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ME8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,ES8 },/*et8*/
  449. et8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  450.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  451.  
  452. er8 []={DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  453.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 },/*er8*/
  454. er8a[]={NOP_,NOP_,NOP_,PER_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,
  455.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  456.  
  457. me8 []={ET8, ET8, ET8, ET8, ET8 ,ET8, ET8, ME8, ET8 ,ET8 ,ET8 ,ET8, ET8, ET8,
  458.         ET8 ,ET8, ET8 ,ET8, ET8, ME9 ,ET8, ET8, ET8, ET8 ,ET8, ET8 },/*me8*/
  459. me8a[]={DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,GET_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,
  460.         DTE_,DTE_,DTE_,DTE_,DTE_,NOP_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_},
  461.  
  462. me9 []={DC8, DC8, DC8, DC8, DC8 ,DC8, DC8, ME9, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  463.         DC8 ,DC8, DC8 ,DC8, DC8, DC8 ,DC8, DC8, DC8, DC8 ,ET8, DC8 },/*me9*/
  464. me9a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,
  465.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_},
  466.  
  467. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  468.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  469. es8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ES8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  470.         DC8 ,DC8 ,DC8 ,DC8 ,MD8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 },/*es8*/
  471. es8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,
  472.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,PIS_,NOP_,NOP_,NOP_},
  473.  
  474. md8 []={DC8, DC8, DC8, ET8, DC8 ,DC8, DC8, MD8, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  475.         DC8 ,MC8, DC8 ,DC8, DC8, DC8 ,ET8, DC8, DC8, DC8 ,ET8, DC8 },/*md8*/
  476. md8a[]={NOP_,NOP_,NOP_,MD_ ,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,
  477.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  478.  
  479. mc8 []={DC8, DC8, DC8, DC8, DC8, DC8 ,DC8, MC8, DC8 ,DC8, DC8 ,DC8, DC8, DC8,
  480.         DC8 ,ET8, DC8 ,DC8, DC8, DC8 ,DC8 ,DC8, DC8 ,DC8 ,DC8, DC8 },/*mc8*/
  481. mc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,
  482.         NOP_,MDC_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  483.  
  484. dc8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  485.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ET8 },/*dc8*/
  486. dc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  487.         NOP_,NOP_,NOP_,NOP_,NOP_,CIR_,NOP_,CIR_,NOP_,NOP_,NOP_,CIR_},
  488.  
  489. *mdstab[] = {et8, et8a, er8, er8a, me8, me8a, me9, me9a,
  490.              es8, es8a, md8, md8a, mc8, mc8a, dc8, dc8a};
  491. struct parse pcbmds = {"MDS", lexcon, mdstab, 0, 0, 0, 0};
  492. #undef ET8
  493. #undef ER8
  494. #undef ME8
  495. #undef ME9
  496. #undef ES8
  497. #undef MD8
  498. #undef MC8
  499. #undef DC8
  500. /* PCBGRCM: State and action table for content model group.
  501.             Groups can nest.  Reserved names are allowed.
  502.             Data tag token groups are allowed.
  503.             A non-reserved name or model group can have a suffix.
  504.             Columns are based on LEXGRP.C.
  505. */
  506. /* Symbols for state names (end with a number). */
  507. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  508. #define CO1     2   /* Connector between tokens expected. */
  509. #define ER1     4   /* PERO found when token was expected. */
  510. #define SP1     6   /* Name or model: suffix or connector expected. */
  511. #define RN1     8   /* RNI found; possible #PCDATA. */
  512. #define DG1    10   /* Data tag: group begun; name expected. */
  513. #define DN1    12   /* Data tag: name found; SEQ connector expected. */
  514. #define DT1    14   /* Data tag: ignore template and pattern; MSC expected. */
  515. #define DR1    16   /* PERO found when data tag name was expected. */
  516. #define LI1    18   /* Literal in data tag group; search for LIT. */
  517. #define LA1    20   /* Literal in data tag group; search for LITA. */
  518.  
  519. static UNCH
  520. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  521.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  522. tk01 []={TK1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  523.          TK1 ,DG1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,RN1 ,TK1 ,TK1 },/*tk1*/
  524. tk01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,GRP_,INV_,INV_,
  525.          INV_,GRP_,INV_,INV_,NOP_,INV_,INV_,NOP_,INV_,INV_},
  526.  
  527. co01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  528.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  529. co01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  530.          INV_,INV_,INV_,OR  ,INV_,INV_,INV_,INV_,SEQ ,INV_},
  531.  
  532. er01 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  533.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  534. er01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  535.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  536.  
  537. sp01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,SP1 ,CO1 ,SP1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  538.          TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  539. sp01a[]={INV_,LEN_,LEN_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  540.          INV_,INV_,OPT ,OR  ,INV_,REP ,OREP,INV_,SEQ ,LEN_},
  541.  
  542. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  543.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  544. rn01 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  545.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*rn1*/
  546. rn01a[]={PCI_,PCI_,RNS_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  547.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  548.  
  549. dg01 []={TK1 ,TK1 ,DN1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  550.          TK1 ,TK1 ,TK1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dg1*/
  551. dg01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  552.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  553.  
  554. dn01 []={TK1 ,TK1 ,TK1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  555.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dn1*/
  556. dn01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  557.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,DTAG,INV_},
  558.  
  559. dt01 []={TK1 ,TK1 ,TK1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,TK1 ,DT1 ,DT1 ,LI1 ,LA1 ,
  560.          SP1 ,TK1 ,TK1 ,DT1 ,DT1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dt1*/
  561. dt01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,NOP_,NOP_,NOP_,NOP_,
  562.          GRPE,INV_,INV_,NOP_,NOP_,INV_,INV_,INV_,NOP_,INV_},
  563.  
  564. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  565.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  566. dr01 []={TK1 ,TK1 ,DG1 ,TK1 ,TK1 ,DR1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  567.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dr1*/
  568. dr01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  569.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  570.  
  571. li01 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,DT1 ,LI1 ,
  572.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  573. li01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  574.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  575.  
  576. la01 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,DT1 ,
  577.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  578. la01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  579.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  580.  
  581. *grcmtab[] = {tk01, tk01a, co01, co01a, er01, er01a, sp01, sp01a,
  582.               rn01, rn01a, dg01, dg01a, dn01, dn01a, dt01, dt01a,
  583.               dr01, dr01a, li01, li01a, la01, la01a};
  584. struct parse pcbgrcm = {"GRCM", lexgrp, grcmtab, 0, 0, 0, 0};
  585. #undef TK1
  586. #undef CO1
  587. #undef ER1
  588. #undef SP1
  589. #undef RN1
  590. #undef DG1
  591. #undef DN1
  592. #undef DT1
  593. #undef DR1
  594. #undef LI1
  595. #undef LA1
  596. /* PCBGRCS: State and action table for content model suffix.
  597.             If suffix occurs, process it.  Otherwise, put character
  598.             back for the next parse.
  599. */
  600. /* Symbols for state names (end with a number). */
  601. #define SP4     0   /* Suffix expected. */
  602.  
  603. static UNCH
  604. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  605.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  606. sp04 []={SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,
  607.          SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 },/*sp4*/
  608. sp04a[]={RCR_,RCR_,RCR_,RCR_,RCR_,SYS_,EE_ ,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  609.          RCR_,RCR_,OPT ,RCR_,RCR_,REP ,OREP,RCR_,RCR_,RCR_},
  610.  
  611. *grcstab[] = {sp04, sp04a};
  612. struct parse pcbgrcs = {"GRCS", lexgrp, grcstab, 0, 0, 0, 0};
  613. #undef SP4
  614. /* PCBGRNT: State and action table for name token group parse.
  615.             Groups cannot nest.  Reserved names are not allowed.
  616.             No suffixes or data tag pattern groups.
  617. */
  618. /* Symbols for state names (end with a number). */
  619. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  620. #define CO1     2   /* Connector between tokens expected. */
  621. #define ER1     4   /* PERO found when token was expected. */
  622.  
  623. static UNCH
  624. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  625.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  626. tk02 []={TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  627.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,CO1 },/*tk1*/
  628. tk02a[]={INV_,NMT_,NMT_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  629.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NMT_},
  630.  
  631. co02 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  632.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  633. co02a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  634.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  635.  
  636. er02 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  637.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  638. er02a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  639.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  640.  
  641. *grnttab[] = {tk02, tk02a, co02, co02a, er02, er02a};
  642. struct parse pcbgrnt = {"GRNT", lexgrp, grnttab, 0, 0, 0, 0};
  643. #undef TK1
  644. #undef CO1
  645. #undef ER1
  646. /* PCBGRNM: State and action table for name group parse.
  647.             Groups cannot nest.  Reserved names are not allowed.
  648.             No suffixes or data tag pattern groups.
  649. */
  650. /* Symbols for state names (end with a number). */
  651. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  652. #define CO1     2   /* Connector between tokens expected. */
  653. #define ER1     4   /* PERO found when token was expected. */
  654.  
  655. static UNCH
  656. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  657.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  658. tk03 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  659.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*tk1*/
  660. tk03a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  661.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  662.  
  663. co03 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  664.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  665. co03a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  666.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  667.  
  668. er03 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  669.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  670. er03a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  671.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  672.  
  673. *grnmtab[] = {tk03, tk03a, co03, co03a, er03, er03a};
  674. struct parse pcbgrnm = {"GRNM", lexgrp, grnmtab, 0, 0, 0, 0};
  675. #undef TK1
  676. #undef CO1
  677. #undef ER1
  678. /* PCBREF: State and action table to find the end of entity, parameter entity,
  679.            and character references.  The opening delimiter and name
  680.            have already been found; the parse determines whether the
  681.            tokenization of the name ended normally and processes the REFC.
  682. */
  683. /* Symbols for state names (end with a number). */
  684. #define ER5     0   /* Handle REFC or other entity reference termination. */
  685. #define ER6     2   /* Return to caller and reset state for next call. */
  686.  
  687. static UNCH
  688. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  689.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  690. er05 []={ER5 ,ER6 ,ER6 ,ER6 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  691.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER6 },/*er5*/
  692. er05a[]={RCR_,LEN_,LEN_,NOP_,RCR_,SYS_,RCR_,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  693.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,NOP_},
  694.  
  695. er06 []={ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  696.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 },/*er6*/
  697. er06a[]={RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  698.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_},
  699.  
  700. *reftab[]={er05, er05a, er06, er06a};
  701. struct parse pcbref = {"ENTREF", lexgrp, reftab, 0, 0, 0, 0};
  702. #undef ER5
  703. #undef ER6
  704. /*
  705. Use (typical)           Name   Ending  Chsw References RS   RE   SEP
  706. Parameter literal       LITPC  LIT/A   OK   Parm,Char  RSM_ LAM_ LAM_
  707.      Data tag template                 NO
  708. System ID               LITC   LIT/A   n/a  none       RSM_ LAM_ LAM_
  709.      Processing instruction    PIC
  710. Attribute value         LITRV  LIT/A   NO   Gen,Char   RS_  FUN_ FUN_
  711. Minimum literal         LITV   LIT/A   n/a  none       RS_  FUN_ MLE_
  712. */
  713. /* PCBLITP: Literal parse with parameter and character references;
  714.             no function character translation.
  715. */
  716. /* Symbols for state names (end with a number). */
  717. #define DA0     0   /* Data in buffer. */
  718. #define ER0     2   /* ERO found. */
  719. #define CR0     4   /* CRO found (ER0, RNI). */
  720. #define PR0     6   /* PRO found (for PCBLITP). */
  721.  
  722. static UNCH
  723. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  724.          mdo  msc  mso  pero rni  tagc tago litc */
  725. da13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  726.          DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da3*/
  727. da13a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RSM_,MLA_,MLA_,MLA_,NSC_,NOP_,
  728.          MLA_,MLA_,MLA_,NOP_,MLA_,MLA_,MLA_,TER_},
  729.  
  730. er13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  731.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er3*/
  732. er13a[]={LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  733.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  734.  
  735. cr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  736.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr3*/
  737. cr13a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  738.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  739.  
  740. pr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  741.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*pr3*/
  742. pr13a[]={LPR_,LPR_,LPR_,PEX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  743.          LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_},
  744.  
  745. *litptab[] = {da13, da13a, er13, er13a, cr13, cr13a, pr13, pr13a};
  746. struct parse pcblitp = {"LITP", lexlms, litptab, 0, 0, 0, 0};
  747. #undef DA0
  748. #undef ER0
  749. #undef CR0
  750. #undef PR0
  751. /* PCBLITC: Literal parse; no references; no function char translation.
  752.             Used for character data (system data).
  753. */
  754. /* Symbols for state names (end with a number). */
  755. #define DA0     0   /* Data in buffer. */
  756.  
  757. static UNCH
  758. /*      free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  759.         mdo  msc  mso  pero rni  tagc tago litc */
  760. da2 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  761.         DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da2*/
  762. da2a[]={MLA_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RSM_,MLA_,MLA_,MLA_,SYS_,MLA_,
  763.         MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  764.  
  765. *litctab[] = {da2, da2a};
  766. struct parse pcblitc = {"LITC", lexlms, litctab, 0, 0, 0, 0};
  767. #undef DA0
  768. /* PCBLITR: Attribute value parse; general and character references;
  769.             function chars are translated.
  770. */
  771. /* Symbols for state names (end with a number). */
  772. #define DA0     0   /* Data in buffer. */
  773. #define ER0     2   /* ERO found. */
  774. #define CR0     4   /* CRO found (ER0, RNI). */
  775.  
  776. static UNCH
  777. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  778.          mdo  msc  mso  pero rni  tagc tago litc */
  779. da11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  780.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da1*/
  781. da11a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RS_ ,FUN_,FUN_,MLA_,NSC_,NOP_,
  782.          MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  783.  
  784. er11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  785.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er1*/
  786. er11a[]={LPR_,LPR_,LPR_,ERX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  787.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  788.  
  789. cr11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  790.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr1*/
  791. cr11a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  792.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  793.  
  794. *litrtab[] = {da11, da11a, er11, er11a, cr11, cr11a};
  795. struct parse pcblitr = {"LITR", lexlms, litrtab, 0, 0, 0, 0};
  796. #undef DA0
  797. #undef ER0
  798. #undef CR0
  799. /* PCBLITV: Literal parse; no references; RS ignored; RE/SPACE sequences
  800.             become single SPACE.  Only minimum data characters allowed.
  801. */
  802. /* Symbols for state names (end with a number). */
  803. #define LS0     0   /* Leading SPACE or RE found. */
  804. #define VA0     2   /* Valid character found. */
  805. #define SP0     4   /* SPACE/RE sequence begun. */
  806.  
  807. static UNCH
  808. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  
  809.          litc */              
  810. ls10 []={VA0 ,VA0 ,VA0 ,VA0 ,LS0 ,VA0 ,LS0 ,LS0 ,LS0 ,LS0 ,LS0 ,VA0 ,VA0 ,
  811.          LS0 },/*ls0*/          
  812. ls10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,SYS_,
  813.          TER_},              
  814. va10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,SP0 ,VA0 ,VA0 ,
  815.          LS0 },/*va0*/          
  816. da10a[]={MLE_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RS_ ,FUN_,MLE_,SYS_,SYS_,
  817.          TER_},              
  818. sp10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,SP0 ,SP0 ,SP0 ,SP0 ,VA0 ,VA0 ,
  819.          LS0 },/*sp0*/          
  820. sp10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,SYS_,
  821.          RPR_},
  822.  
  823. *litvtab[] = {ls10, ls10a, va10, da10a, sp10, sp10a};
  824. struct parse pcblitv = {"LITV", lexmin, litvtab, 0, 0, 0, 0};
  825. #undef LS0
  826. #undef VA0
  827. #undef SP0
  828. /* PCBLITT: Tokenized attribute value parse.
  829. */
  830.  
  831. /* PCBLITT: Attribute value parse; general and character references;
  832.             function chars are translated.
  833. */
  834. /* Symbols for state names (end with a number). */
  835. #define SP0    0   /* Ignore spaces */
  836. #define DA0     2   /* Data character */
  837. #define ER0     4   /* ERO found; ignore space */
  838. #define ER1     6   /* ERO found; don't ignore space */
  839. #define CR0     8   /* CRO found (ER0, RNI); ignore space */
  840. #define CR1     10  /* CR0 found; don't ignore space */
  841.  
  842. int pcblittda = DA0;
  843.  
  844. static UNCH
  845. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  846.          mdo  msc  mso  pero rni  tagc tago litc */
  847.  
  848. sp14 []={DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,DA0 ,DA0 ,SP0 ,SP0 ,SP0 ,SP0 ,DA0 ,DA0 ,ER0 ,
  849.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*sp0*/
  850. sp14a[]={MLA_,MLA_,MLA_,MLA_,NOP_,NON_,EE_ ,GET_,RS_ ,NOP_,NOP_,MLA_,NSC_,NOP_,
  851.          MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  852.  
  853. da14 []={DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,SP0 ,DA0 ,DA0 ,ER1 ,
  854.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,SP0 },/*da0*/
  855. da14a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RS_ ,FUN_,FUN_,MLA_,NSC_,NOP_,
  856.          MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  857.  
  858. er14 []={DA0 ,DA0 ,DA0 ,SP0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  859.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er0*/
  860. er14a[]={LPR_,LPR_,LPR_,ERX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  861.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  862.  
  863. er15 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER1 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  864.          DA0 ,DA0 ,DA0 ,DA0 ,CR1 ,DA0 ,DA0 ,DA0 },/*er1*/
  865. er15a[]={LPR_,LPR_,LPR_,ERX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  866.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  867.  
  868. cr14 []={DA0 ,DA0 ,DA0 ,SP0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  869.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr0*/
  870. cr14a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  871.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  872.  
  873. cr15 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR1 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  874.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr1*/
  875. cr15a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  876.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  877.  
  878. *litttab[] = {sp14, sp14a, da14, da14a, er14, er14a, er15, er15a, cr14, cr14a,
  879.           cr15, cr15a};
  880. struct parse pcblitt = {"LITT", lexlms, litttab, 0, 0, 0, 0};
  881. #undef SP0
  882. #undef DA0
  883. #undef ER0
  884. #undef ER1
  885. #undef CR0
  886. #undef CR1
  887. /* PCBMD: State and action table for markup declaration tokenization.
  888.           Columns are based on LEXMARK.C.
  889. */
  890. /* Symbols for state names (end with a number). */
  891. #define SP1     0   /* Separator before token expected (but not -). */
  892. #define SP2     2   /* Separator before token expected. */
  893. #define TK1     4   /* Token expected. */
  894. #define CM1     6   /* COM[1] found: possible comment, MGRP, or minus.*/
  895. #define CM2     8   /* COM[2] found; in comment. */
  896. #define CM3    10   /* Ending COM[1] found; end comment or continue it. */
  897. #define PR1    12   /* PERO found when token was expected. */
  898. #define PX1    14   /* PLUS found: PGRP or error. */
  899. #define RN1    16   /* RNI found; possible reserved name start. */
  900.  
  901. int pcbmdtk = TK1;            /* PCBMD: token expected. */
  902.  
  903. static UNCH
  904. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  905.          dso  dsc  pero plus refc rni  tagc tago vi    */
  906. sp21 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,TK1 ,SP1 ,TK1 ,SP1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  907.          TK1 ,SP1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  908. sp21a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EE_ ,GET_,RS_ ,LEN_,INV_,GRPS,LIT ,LITE,
  909.          MDS ,INV_,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  910.  
  911. sp22 []={SP2 ,SP2 ,SP2 ,SP2 ,TK1 ,SP2 ,TK1 ,SP2 ,TK1 ,CM1 ,SP2 ,TK1 ,TK1 ,TK1 ,
  912.          TK1 ,SP2 ,PR1 ,PX1 ,SP2 ,RN1 ,SP2 ,SP2 ,SP2 },
  913. sp22a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  914.          MDS ,INV_,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  915.  
  916. tk21 []={SP1 ,SP1 ,SP2 ,SP1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,CM1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  917.          TK1 ,SP1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  918. tk21a[]={INV_,NMT ,NUM ,NAS ,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  919.          MDS ,INV_,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  920.  
  921. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  922.          dso  dsc  pero plus refc rni  tagc tago vi    */
  923.  
  924. cm21 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,CM1 ,TK1 ,CM1 ,TK1 ,CM2 ,TK1 ,TK1 ,TK1 ,TK1 ,
  925.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  926. cm21a[]={CDR ,CDR ,CDR ,CDR ,CDR ,SYS_,CDR ,GET_,CDR ,NOP_,CDR ,MGRP,CDR ,CDR ,
  927.          CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR },
  928.  
  929. cm22 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,TK1 ,CM2 ,CM2 ,CM3 ,CM2 ,CM2 ,CM2 ,CM2 ,
  930.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  931. cm22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  932.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  933.  
  934. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  935.          dso  dsc  pero plus refc rni  tagc tago vi    */
  936. cm23 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM3 ,TK1 ,CM3 ,CM2 ,TK1 ,CM2 ,CM2 ,CM2 ,CM2 ,
  937.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  938. cm23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  939.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  940.  
  941. pr21 []={SP1 ,SP1 ,SP1 ,TK1 ,TK1 ,PR1 ,SP2 ,PR1 ,TK1 ,SP2 ,SP1 ,SP1 ,SP1 ,SP1 ,
  942.          SP1 ,SP1 ,SP2 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 },
  943. pr21a[]={PCI_,PCI_,PCI_,PER_,PEN ,SYS_,PENR,GET_,PEN ,PENR,PCI_,PCI_,PCI_,PCI_,
  944.          PCI_,PCI_,PENR,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  945.  
  946. px21 []={SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,PX1 ,SP1 ,PX1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,
  947.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  948. px21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PGRP,PCI_,PCI_,
  949.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  950.  
  951. rn21 []={TK1 ,TK1 ,TK1 ,SP1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  952.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  953. rn21a[]={PCI_,PCI_,PCI_,RNS ,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  954.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  955.  
  956. *mdtab[] = {sp21, sp21a, sp22, sp22a, tk21, tk21a, cm21, cm21a, cm22, cm22a,
  957.             cm23, cm23a, pr21, pr21a, px21, px21a, rn21, rn21a};
  958. struct parse pcbmd = {"MD", lexmark, mdtab, 0, 0, 0, 0};
  959. #undef SP1
  960. #undef SP2
  961. #undef TK1
  962. #undef CM1
  963. #undef CM2
  964. #undef CM3
  965. #undef PR1
  966. #undef PX1
  967. #undef RN1
  968. /* PCBMDC: State and action table for comment declaration.
  969. */
  970. /* Symbols for state names (end with a number). */
  971. #define CD2     0   /* COM[2] found; in comment. */
  972. #define CD3     2   /* Ending COM[1] found; end comment or continue it. */
  973. #define EM1     4   /* Ending COM[2] found; start new comment or end. */
  974. #define CD1     6   /* COM[1] found; new comment or error. */
  975.  
  976. static UNCH
  977. /*      bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  978.         dso  dsc  pero plus refc rni  tagc tago vi    */
  979. cd22 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD2 ,CD2 ,CD2 ,
  980.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  981. cd22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  982.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  983.  
  984. cd23 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD3 ,CD2 ,EM1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  985.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  986. cd23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  987.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  988.  
  989. em21 []={CD2 ,CD2 ,CD2 ,CD2 ,EM1 ,EM1 ,CD2 ,EM1 ,EM1 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  990.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  991. em21a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,INV_,INV_,INV_,INV_,
  992.          INV_,INV_,INV_,INV_,INV_,INV_,EMD ,INV_,INV_},
  993.  
  994. cd21 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD1 ,CD2 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,
  995.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  996. cd21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,EOF_,GET_,PCI_,NOP_,PCI_,PCI_,PCI_,PCI_,
  997.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  998.  
  999. *mdctab[] = {cd22, cd22a, cd23, cd23a, em21, em21a, cd21, cd21a};
  1000. struct parse pcbmdc = {"MDC", lexmark, mdctab, 0, 0, 0, 0};
  1001. #undef CD2
  1002. #undef CD3
  1003. #undef EM1
  1004. #undef CD1
  1005. /* PCBMDI: State and action table for ignoring markup declarations.
  1006.            Literals are handled properly so a TAGC won't end the declaration.
  1007.            An error is noted if the entity ends within a declaration that
  1008.            is being ignored.
  1009.            TO DO: Handle nested declaration sets.
  1010. */
  1011. /* Symbols for state names (end with a number). */
  1012. #define NC1     0   /* Not in a comment; TAGC ends declaration. */
  1013. #define IC1     2   /* COM[1] found; possible comment. */
  1014. #define IC2     4   /* COM[2] found; in comment. */
  1015. #define IC3     6   /* Ending COM[1] found; end comment or continue it. */
  1016. #define LI1     8   /* Literal parameter; search for LIT. */
  1017. #define LA1    10   /* Literal parameter; search for LITA. */
  1018.  
  1019. static UNCH
  1020. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1021.          dso  dsc  pero plus refc rni  tagc tago vi    */
  1022. nc21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,NC1 ,LI1 ,LA1 ,
  1023.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  1024. nc21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1025.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  1026.  
  1027. ic21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,IC1 ,NC1 ,IC2 ,NC1 ,NC1 ,LI1 ,LA1 ,
  1028.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  1029. ic21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1030.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  1031.  
  1032. ic22 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,NC1 ,IC2 ,IC2 ,IC3 ,IC2 ,IC2 ,IC2 ,IC2 ,
  1033.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },
  1034. ic22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1035.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1036.  
  1037. ic23 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC3 ,NC1 ,IC3 ,IC2 ,NC1 ,IC2 ,IC2 ,IC2 ,IC2 ,
  1038.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },/*ic3*/
  1039. ic23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1040.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1041.  
  1042. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1043.          dso  dsc  pero plus refc rni  tagc tago vi    */
  1044. li21 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,NC1 ,LI1 ,
  1045.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  1046. li21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1047.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1048.  
  1049. la21 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,NC1 ,
  1050.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  1051. la21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1052.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1053.  
  1054. *mditab[] = {nc21, nc21a, ic21, ic21a, ic22, ic22a,
  1055.              ic23, ic23a, li21, li21a, la21, la21a};
  1056. struct parse pcbmdi = {"MDI", lexmark, mditab, 0, 0, 0, 0};
  1057. #undef NC1
  1058. #undef IC1
  1059. #undef IC2
  1060. #undef IC3
  1061. #undef LI1
  1062. #undef LA1
  1063. /* PCBMSRC: State and action table for marked section in RCDATA mode.
  1064.             Nested marked sections are not recognized; the first MSE ends it.
  1065.             Initial state assumes an MS declaration was processed.
  1066.             Columns are based on LEXLMS.C but LITC column needn't exist.
  1067. */
  1068. /* Symbols for state names (end with a number). */
  1069. #define ET0     0   /* MSS processed or buffer flushed; no data. */
  1070. #define DA0     2   /* Data in buffer. */
  1071. #define ER0     4   /* ERO found; start lookahead buffer. */
  1072. #define CR0     6   /* CRO found (ER0, RNI). */
  1073. #define ME0     8   /* MSC found. */
  1074. #define ME1    10   /* MSC, MSC found. */
  1075.  
  1076. static UNCH
  1077. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1078.          mdo  msc  mso  pero rni  tagc tago litc */
  1079. et30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,ER0 ,
  1080.          DA0 ,ME0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*et0*/
  1081. et30a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,NSC_,LAS_,
  1082.          DAS_,LAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1083.  
  1084. da30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,ET0 ,
  1085.          DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da0*/
  1086. da30a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,DAF_,
  1087.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1088.  
  1089. er30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1090.          ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  1091. er30a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1092.          LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  1093.  
  1094. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1095.          mdo  msc  mso  pero rni  tagc tago litc */
  1096. cr30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1097.          ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  1098. cr30a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1099.          LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1100.  
  1101. me30 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1102.          ET0, ME1, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0 },/*me0*/
  1103. me30a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1104.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1105.  
  1106. me31 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1107.          ET0, ET0, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0,},/*me1*/
  1108. me31a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1109.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1110.  
  1111. *msrctab[]={et30, et30a, da30, da30a, er30, er30a, cr30, cr30a,
  1112.         me30, me30a, me31, me31a};
  1113. struct parse pcbmsrc = {"MSRCDATA", lexlms, msrctab, 0, 0, 0, 0};
  1114. #undef ET0
  1115. #undef DA0
  1116. #undef ER0
  1117. #undef CR0
  1118. #undef ME0
  1119. #undef ME1
  1120. /* PCBMSC: State and action table for marked section in CDATA mode.
  1121.            Nested marked sections are not recognized; the first MSE ends it.
  1122.            Initial state assumes an MS declaration was processed.
  1123. */
  1124. /* Symbols for state names (end with a number). */
  1125. #define ET2     0   /* MSS processed or buffer flushed; no data. */
  1126. #define DA2     2   /* Data in buffer. */
  1127. #define ME2     4   /* MSC found. */
  1128. #define ME3     6   /* MSC, MSC found. */
  1129.  
  1130. static UNCH
  1131. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1132.          mdo  msc  mso  pero rni  tagc tago litc */
  1133. et32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,ET2 ,DA2 ,
  1134.          DA2 ,ME2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*et2*/
  1135. et32a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,NSC_,DAS_,
  1136.          DAS_,LAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1137.  
  1138. da32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,ET2 ,DA2 ,
  1139.          DA2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*da2*/
  1140. da32a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,NOP_,
  1141.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1142.  
  1143. me32 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1144.          ET2, ME3, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me2*/
  1145. me32a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1146.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1147.  
  1148. me33 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1149.          ET2, ET2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me3*/
  1150. me33a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1151.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1152.  
  1153. *msctab[]={et32, et32a, da32, da32a, me32, me32a, me33, me33a};
  1154. struct parse pcbmsc = {"MSCDATA", lexlms, msctab, 0, 0, 0, 0};
  1155. #undef ET2
  1156. #undef DA2
  1157. #undef ME2
  1158. #undef ME3
  1159. /* PCBMSI: State and action table for marked section in IGNORE mode.
  1160.            Nested marked sections are recognized; the matching MSE ends it.
  1161.            Initial state assumes an MS declaration, MSS, or MSE was processed.
  1162. */
  1163. /* Symbols for state names (end with a number). */
  1164. #define ET4     0   /* Markup found or buffer flushed; no data. */
  1165. #define ME4     2   /* MSC found. */
  1166. #define ME5     4   /* MSC, MSC found. */
  1167. #define ES4     6   /* TAGO found. */
  1168. #define MD4     8   /* MDO found (TAGO, MDO[2]). */
  1169.  
  1170. static UNCH
  1171. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1172.          mdo  msc  mso  pero rni  tagc tago litc refc */
  1173. et34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  1174.          ET4 ,ME4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 },/*et4*/
  1175. et34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  1176.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1177.  
  1178. me34 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1179.          ET4, ME5 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me4*/
  1180. me34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  1181.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1182.  
  1183. me35 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME5, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1184.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me5*/
  1185. me35a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  1186.          NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_,NOP_,NOP_},
  1187.  
  1188. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1189.          mdo  msc  mso  pero rni  tagc tago litc */
  1190. es34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,
  1191.          MD4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  1192. es34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  1193.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1194.  
  1195. md34 []={ET4, ET4, ET4, ET4, ET4 ,MD4, ET4, MD4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1196.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4,},/*md4*/
  1197. md34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,SYS_,NOP_,
  1198.          NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1199.  
  1200. *msitab[]={et34, et34a, me34, me34a, me35, me35a, es34, es34a, md34, md34a};
  1201. struct parse pcbmsi = {"MSIGNORE", lexlms, msitab, 0, 0, 0, 0};
  1202. #undef ET4
  1203. #undef ME4
  1204. #undef ME5
  1205. #undef ES4
  1206. #undef MD4
  1207. #undef NS4
  1208. /* PCBSTAG: State and action table for start-tag parse.
  1209.             Columns are based on LEXMARK.C.
  1210. */
  1211. /* Symbols for state names (end with a number). */
  1212. #define SP1     0   /* Separator before name expected. */
  1213. #define AN1     2   /* Attribute name expected. */
  1214. #define SP2     4   /* Separator or value indicator expected. */
  1215. #define VI1     6   /* Value indicator expected. */
  1216. #define AV1     8   /* Attribute value expected. */
  1217.  
  1218. int pcbstan = AN1;            /* PCBSTAG: attribute name expected. */
  1219.  
  1220. static UNCH
  1221. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1222.          dso  dsc  pero plus refc rni  tagc tago vi    */
  1223. sp41 []={SP1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1224.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1225. sp41a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,LEN_,ETIC,INV_,INV_,INV_,
  1226.          INV_,DSC ,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1227.  
  1228. an41 []={SP1 ,SP1 ,SP1 ,SP2 ,AN1 ,AN1 ,AN1 ,AN1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1229.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1230. an41a[]={INV_,NTV ,NTV ,NVS ,NOP_,SYS_,EOF_,GET_,RS_ ,NTV ,ETIC,INV_,INV_,INV_,
  1231.          INV_,DSC ,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1232.  
  1233. sp42 []={SP1 ,SP1 ,SP1 ,SP1 ,VI1 ,SP2 ,SP2 ,SP2 ,VI1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1234.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1235. sp42a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,LEN_,NASV,INV_,INV_,INV_,
  1236.          INV_,NASV,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1237.  
  1238. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1239.          dso  dsc  pero plus refc rni  tagc tago vi    */
  1240. vi41 []={SP1 ,AN1 ,AN1 ,AN1 ,VI1 ,VI1 ,VI1 ,VI1 ,VI1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1241.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1242. vi41a[]={INV_,NASV,NASV,NASV,NOP_,SYS_,EOF_,GET_,RS_ ,NASV,NASV,INV_,INV_,INV_,
  1243.          INV_,NASV,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1244.  
  1245. av41 []={SP1 ,SP1 ,SP1 ,SP1 ,AV1 ,AV1 ,AV1 ,AV1 ,AV1 ,SP1 ,SP1 ,SP1 ,AN1 ,AN1 ,
  1246.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1247. av41a[]={INV_,AVU ,AVU ,AVU ,NOP_,SYS_,EOF_,GET_,RS_ ,AVU ,INV_,INV_,AVD ,AVDA,
  1248.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1249.  
  1250. *stagtab[] = {sp41, sp41a, an41, an41a, sp42, sp42a, vi41, vi41a, av41, av41a};
  1251. struct parse pcbstag = {"STAG", lexmark, stagtab, 0, 0, 0, 0};
  1252. #undef SP1
  1253. #undef AN1
  1254. #undef SP2
  1255. #undef VI1
  1256. #undef AV1
  1257. /* PCBETAG: State and action table for end-tag parse.
  1258. */
  1259. #define TC1     0   /* Tag close expected (no attributes allowed). */
  1260.  
  1261. static UNCH
  1262. /*       bit  nmc  nu   nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1263.          dso  dsc  pero plus refc rni  tagc tago vi    */
  1264. tc41 []={TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,
  1265.          TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 },/*tc1*/
  1266. tc41a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  1267.          INV_,INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1268.  
  1269. *etagtab[] = {tc41, tc41a};
  1270. struct parse pcbetag = {"ETAG", lexmark, etagtab, 0, 0, 0, 0};
  1271. #undef TC1
  1272. /* PCBVAL: State and action table for tokenizing attribute values.
  1273.            Columns are based on lextoke (but EOB cannot occur).
  1274. */
  1275. /* Symbols for state names (end with a number). */
  1276. #define TK1     0   /* Token expected. */
  1277. #define SP1     2   /* Separator before token expected. */
  1278.  
  1279. static UNCH
  1280. /*       inv  rec  sep  sp   nmc  nms  nu   eob   */
  1281. tk51 []={TK1 ,TK1 ,TK1 ,TK1 ,SP1 ,SP1 ,SP1 },/*tk1*/
  1282. tk51a[]={INVA,INVA,INVA,NOPA,NMTA,NASA,NUMA},
  1283.  
  1284. sp51 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  1285. sp51a[]={INVA,INVA,INVA,NOPA,LENA,LENA,LENA},
  1286.  
  1287. *valtab[] = {tk51, tk51a, sp51, sp51a};
  1288. struct parse pcbval = {"VAL", lextoke, valtab, 0, 0, 0, 0};
  1289. #undef TK1
  1290. #undef SP1
  1291. /* PCBEAL: State and action table for end of attribute specification list.
  1292.            If delimiter occurs, process it.  Otherwise, put invalid character
  1293.            back for the next parse.
  1294. */
  1295. /* Symbols for state names (end with a number). */
  1296. #define AL0     0   /* Delimiter expected. */
  1297.  
  1298. static UNCH
  1299. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  1300.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  1301. al00 []={AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,
  1302.          AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 },/*al0*/
  1303. al00a[]={INV_,INV_,INV_,INV_,INV_,SYS_,EE_ ,GET_,INV_,INV_,INV_,INV_,INV_,INV_,
  1304.          GRPE,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1305.  
  1306. *ealtab[] = {al00, al00a};
  1307. struct parse pcbeal = {"EAL", lexgrp, ealtab, 0, 0, 0, 0};
  1308. #undef AL0
  1309.  
  1310. /* PCBSD: State and action tables for SGML declaration parsing. */
  1311.  
  1312. /* Symbols for state names. */
  1313.  
  1314. #define SP1     0   /* Separator before token expected (but not -) */
  1315. #define SP2     2   /* Separator before token expected. */
  1316. #define TK1     4   /* Token expected. */
  1317. #define CM1     6   /* COM[1] found: possible comment.*/
  1318. #define CM2     8   /* COM[2] found; in comment. */
  1319. #define CM3    10   /* Ending COM[1] found; end comment or continue it. */
  1320. static UNCH
  1321. /*       sig  dat  num  nms  spc  non  ee   eob  rs   com  lit  lita tagc  */
  1322.                        
  1323. sp31 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,TK1 ,TK1 ,SP1 },
  1324. sp31a[]={INV_,ISIG,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,LEN_,LIT1,LIT2,ESGD},
  1325.                        
  1326. sp32 []={SP2 ,SP2 ,SP2 ,SP2 ,TK1 ,SP2 ,SP2 ,SP2 ,TK1 ,CM1 ,TK1 ,TK1 ,SP2 },
  1327. sp32a[]={INV_,ISIG,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,LIT1,LIT2,ESGD},
  1328.                        
  1329. tk31 []={TK1 ,TK1 ,SP2 ,SP1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,CM1 ,TK1 ,TK1 ,SP1 },
  1330. tk31a[]={INV_,ISIG,NUM1,NAS1,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,LIT1,LIT2,ESGD},
  1331.                        
  1332. cm31 []={TK1 ,CM1 ,TK1 ,TK1 ,TK1 ,CM1 ,TK1 ,CM1 ,TK1 ,CM2 ,TK1 ,TK1 ,TK1 },
  1333. cm31a[]={PCI_,ISIG,PCI_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,NOP_,PCI_,PCI_,PCI_},
  1334.                        
  1335. cm32 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,TK1 ,CM2 ,CM2 ,CM3 ,CM2 ,CM2 ,CM2 },
  1336. cm32a[]={NOP_,ISIG,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_},
  1337.                        
  1338. cm33 []={CM2 ,CM3 ,CM2 ,CM2 ,CM2 ,CM3 ,TK1 ,CM3 ,CM2 ,TK1 ,CM2 ,CM2 ,CM2 },
  1339. cm33a[]={NOP_,ISIG,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_},
  1340.  
  1341. *sdtab[]={sp31, sp31a, sp32, sp32a, tk31, tk31a, cm31, cm31a, cm32, cm32a,
  1342.       cm33, cm33a};
  1343.  
  1344. struct parse pcbsd = {"SD", lexsd, sdtab, 0, 0, 0, 0};
  1345.  
  1346. #undef SP1
  1347. #undef SP2
  1348. #undef TK1
  1349. #undef CM1
  1350. #undef CM2
  1351. #undef CM3
  1352.