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