1 2 // UTILS 3 typedef struct List List; 4 typedef struct Strlist Strlist; 5 6 // List of integers (and also generic list with next pointer at beginning) 7 struct List 8 { 9 List* next; 10 int val; 11 }; 12 13 struct Strlist 14 { 15 Strlist* next; 16 Rune* val; 17 }; 18 19 extern int _inclass(Rune c, Rune* cl); 20 extern int _listlen(List* l); 21 extern List* _newlist(int val, List* rest); 22 extern Rune* _newstr(int n); 23 extern int _prefix(Rune* pre, Rune* s); 24 extern List* _revlist(List* l); 25 extern void _splitl(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2); 26 extern void _splitr(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2); 27 extern int _splitall(Rune* s, int n, Rune* cl, Rune** strarr, int* lenarr, int alen); 28 extern Rune* _Stradd(Rune*s1, Rune* s2, int n); 29 extern Rune* _Strclass(Rune* s, Rune* cl); 30 extern int _Strcmp(Rune* s1, Rune* s2); 31 extern Rune* _Strdup(Rune* s); 32 extern Rune* _Strdup2(Rune* s, Rune* t); 33 extern int _Streqn(Rune* s1, int n1, Rune* s2); 34 extern int _Strlen(Rune* s); 35 extern Rune* _Strnclass(Rune* s, Rune* cl, int n); 36 extern int _Strncmpci(Rune* s1, int n1, Rune* s2); 37 extern Rune* _Strndup(Rune* s, int n); 38 extern Rune* _Strnrclass(Rune* s, Rune* cl, int n); 39 extern Rune* _Strrclass(Rune* s, Rune* cl); 40 extern Rune* _Strsubstr(Rune* s, int start, int stop); 41 extern long _Strtol(Rune* s, Rune** eptr, int base); 42 extern void _trimwhite(Rune* s, int n, Rune** pans, int* panslen); 43 44 extern Rune* notwhitespace; 45 extern Rune* whitespace; 46 47 // STRINTTAB 48 typedef struct StringInt StringInt; 49 50 // Element of String-Int table (used for keyword lookup) 51 struct StringInt 52 { 53 Rune* key; 54 int val; 55 }; 56 57 extern int _lookup(StringInt* t, int n, Rune* key, int keylen, int* pans); 58 extern StringInt* _makestrinttab(Rune** a, int n); 59 extern Rune* _revlookup(StringInt* t, int n, int val); 60 61 // Colors, in html format, not Plan 9 format. (RGB values in bottom 3 bytes) 62 enum { 63 White = 0xFFFFFF, 64 Black = 0x000000, 65 Blue = 0x0000CC, 66 }; 67 68 // LEX 69 70 // HTML 4.0 tags (plus blink, nobr) 71 // sorted in lexical order; used as array indices 72 enum { 73 Notfound, 74 Comment, 75 Ta, Tabbr, Tacronym, Taddress, Tapplet, Tarea, 76 Tb, Tbase, Tbasefont, Tbdo, Tbig, Tblink, 77 Tblockquote, Tbody, Tbq, Tbr, Tbutton, 78 Tcaption, Tcenter, Tcite, Tcode, Tcol, Tcolgroup, 79 Tdd, Tdel, Tdfn, Tdir, Tdiv, Tdl, Tdt, 80 Tem, 81 Tfieldset, Tfont, Tform, Tframe, Tframeset, 82 Th1, Th2, Th3, Th4, Th5, Th6, 83 Thead, Thr, Thtml, 84 Ti, Tiframe, Timg, Tinput, Tins, Tisindex, 85 Tkbd, 86 Tlabel, Tlegend, Tli, Tlink, 87 Tmap, Tmenu, Tmeta, 88 Tnobr, Tnoframes, Tnoscript, 89 Tobject, Tol, Toptgroup, Toption, 90 Tp, Tparam, Tpre, 91 Tq, 92 Ts, Tsamp, Tscript, Tselect, Tsmall, 93 Tspan, Tstrike, Tstrong, Tstyle, Tsub, Tsup, 94 Ttable, Ttbody, Ttd, Ttextarea, Ttfoot, 95 Tth, Tthead, Ttitle, Ttr, Ttt, 96 Tu, Tul, 97 Tvar, 98 Numtags, 99 RBRA = Numtags, 100 Data = Numtags+RBRA 101 }; 102 103 // HTML 4.0 tag attributes 104 // Keep sorted in lexical order 105 enum { 106 Aabbr, Aaccept_charset, Aaccess_key, Aaction, 107 Aalign, Aalink, Aalt, Aarchive, Aaxis, 108 Abackground, Abgcolor, Aborder, 109 Acellpadding, Acellspacing, Achar, Acharoff, 110 Acharset, Achecked, Acite, Aclass, Aclassid, 111 Aclear, Acode, Acodebase, Acodetype, Acolor, 112 Acols, Acolspan, Acompact, Acontent, Acoords, 113 Adata, Adatetime, Adeclare, Adefer, Adir, Adisabled, 114 Aenctype, 115 Aface, Afor, Aframe, Aframeborder, 116 Aheaders, Aheight, Ahref, Ahreflang, Ahspace, Ahttp_equiv, 117 Aid, Aismap, 118 Alabel, Alang, Alink, Alongdesc, 119 Amarginheight, Amarginwidth, Amaxlength, 120 Amedia, Amethod, Amultiple, 121 Aname, Anohref, Anoresize, Anoshade, Anowrap, 122 Aobject, Aonblur, Aonchange, Aonclick, Aondblclick, 123 Aonfocus, Aonkeypress, Aonkeyup, Aonload, 124 Aonmousedown, Aonmousemove, Aonmouseout, 125 Aonmouseover, Aonmouseup, Aonreset, Aonselect, 126 Aonsubmit, Aonunload, 127 Aprofile, Aprompt, 128 Areadonly, Arel, Arev, Arows, Arowspan, Arules, 129 Ascheme, Ascope, Ascrolling, Aselected, Ashape, 130 Asize, Aspan, Asrc, Astandby, Astart, Astyle, Asummary, 131 Atabindex, Atarget, Atext, Atitle, Atype, 132 Ausemap, 133 Avalign, Avalue, Avaluetype, Aversion, Avlink, Avspace, 134 Awidth, 135 Numattrs 136 }; 137 138 struct Attr 139 { 140 Attr* next; // in list of attrs for a token 141 int attid; // Aabbr, etc. 142 Rune* value; 143 }; 144 145 struct Token 146 { 147 int tag; // Ta, etc 148 Rune* text; // text in Data, attribute text in tag 149 Attr* attr; // list of Attrs 150 int starti; // index into source buffer of token start 151 }; 152 153 extern Rune* tagnames[]; 154 extern Rune* attrnames[]; 155 156 extern void _freetokens(Token* tarray, int n); 157 extern Token* _gettoks(uchar* data, int datalen, int chset, int mtype, int* plen); 158 extern int _tokaval(Token* t, int attid, Rune** pans, int xfer); 159 160 #pragma varargck type "T" Token* 161