xref: /plan9/sys/src/libhtml/impl.h (revision c93608cc76758b2be624199c6208a0f90bad298d)
19a747e4fSDavid du Colombier 
29a747e4fSDavid du Colombier // UTILS
39a747e4fSDavid du Colombier typedef struct List List;
49a747e4fSDavid du Colombier typedef struct Strlist Strlist;
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier // List of integers (and also generic list with next pointer at beginning)
79a747e4fSDavid du Colombier struct List
89a747e4fSDavid du Colombier {
99a747e4fSDavid du Colombier 	List*	next;
109a747e4fSDavid du Colombier 	int	val;
119a747e4fSDavid du Colombier };
129a747e4fSDavid du Colombier 
139a747e4fSDavid du Colombier struct Strlist
149a747e4fSDavid du Colombier {
159a747e4fSDavid du Colombier 	Strlist*	next;
169a747e4fSDavid du Colombier 	Rune*	val;
179a747e4fSDavid du Colombier };
189a747e4fSDavid du Colombier 
199a747e4fSDavid du Colombier extern int		_inclass(Rune c, Rune* cl);
209a747e4fSDavid du Colombier extern int		_listlen(List* l);
219a747e4fSDavid du Colombier extern List*	_newlist(int val, List* rest);
229a747e4fSDavid du Colombier extern Rune*	_newstr(int n);
239a747e4fSDavid du Colombier extern int		_prefix(Rune* pre, Rune* s);
249a747e4fSDavid du Colombier extern List*	_revlist(List* l);
259a747e4fSDavid du Colombier extern void	_splitl(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2);
269a747e4fSDavid du Colombier extern void	_splitr(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2);
279a747e4fSDavid du Colombier extern int		_splitall(Rune* s, int n, Rune* cl, Rune** strarr, int* lenarr, int alen);
289a747e4fSDavid du Colombier extern Rune*	_Stradd(Rune*s1, Rune* s2, int n);
299a747e4fSDavid du Colombier extern Rune*	_Strclass(Rune* s, Rune* cl);
30*5d459b5aSDavid du Colombier extern int		_Strcmp(Rune* s1, Rune* s2);
319a747e4fSDavid du Colombier extern Rune*	_Strdup(Rune* s);
329a747e4fSDavid du Colombier extern Rune*	_Strdup2(Rune* s, Rune* t);
339a747e4fSDavid du Colombier extern int		_Streqn(Rune* s1, int n1, Rune* s2);
34*5d459b5aSDavid du Colombier extern int		_Strlen(Rune* s);
359a747e4fSDavid du Colombier extern Rune*	_Strnclass(Rune* s, Rune* cl, int n);
369a747e4fSDavid du Colombier extern int		_Strncmpci(Rune* s1, int n1, Rune* s2);
379a747e4fSDavid du Colombier extern Rune*	_Strndup(Rune* s, int n);
389a747e4fSDavid du Colombier extern Rune*	_Strnrclass(Rune* s, Rune* cl, int n);
399a747e4fSDavid du Colombier extern Rune*	_Strrclass(Rune* s, Rune* cl);
409a747e4fSDavid du Colombier extern Rune*	_Strsubstr(Rune* s, int start, int stop);
419a747e4fSDavid du Colombier extern long	_Strtol(Rune* s, Rune** eptr, int base);
429a747e4fSDavid du Colombier extern void	_trimwhite(Rune* s, int n, Rune** pans, int* panslen);
439a747e4fSDavid du Colombier 
449a747e4fSDavid du Colombier extern Rune*	notwhitespace;
459a747e4fSDavid du Colombier extern Rune*	whitespace;
469a747e4fSDavid du Colombier 
479a747e4fSDavid du Colombier // STRINTTAB
489a747e4fSDavid du Colombier typedef struct StringInt StringInt;
499a747e4fSDavid du Colombier 
509a747e4fSDavid du Colombier // Element of String-Int table (used for keyword lookup)
519a747e4fSDavid du Colombier struct StringInt
529a747e4fSDavid du Colombier {
539a747e4fSDavid du Colombier 	Rune*	key;
549a747e4fSDavid du Colombier 	int		val;
559a747e4fSDavid du Colombier };
569a747e4fSDavid du Colombier 
579a747e4fSDavid du Colombier extern int			_lookup(StringInt* t, int n, Rune* key, int keylen, int* pans);
589a747e4fSDavid du Colombier extern StringInt*	_makestrinttab(Rune** a, int n);
599a747e4fSDavid du Colombier extern Rune*		_revlookup(StringInt* t, int n, int val);
609a747e4fSDavid du Colombier 
619a747e4fSDavid du Colombier // Colors, in html format, not Plan 9 format.  (RGB values in bottom 3 bytes)
629a747e4fSDavid du Colombier enum {
639a747e4fSDavid du Colombier 	White = 0xFFFFFF,
649a747e4fSDavid du Colombier 	Black = 0x000000,
659a747e4fSDavid du Colombier 	Blue = 0x0000CC,
669a747e4fSDavid du Colombier };
679a747e4fSDavid du Colombier 
689a747e4fSDavid du Colombier // LEX
699a747e4fSDavid du Colombier 
709a747e4fSDavid du Colombier // HTML 4.0 tags (plus blink, nobr)
719a747e4fSDavid du Colombier // sorted in lexical order; used as array indices
729a747e4fSDavid du Colombier enum {
739a747e4fSDavid du Colombier 	Notfound,
749a747e4fSDavid du Colombier 	Comment,
759a747e4fSDavid du Colombier 	Ta, Tabbr, Tacronym, Taddress, Tapplet, Tarea,
769a747e4fSDavid du Colombier 	Tb, Tbase, Tbasefont, Tbdo, Tbig, Tblink,
779a747e4fSDavid du Colombier 	Tblockquote, Tbody, Tbq, Tbr, Tbutton,
789a747e4fSDavid du Colombier 	Tcaption, Tcenter, Tcite, Tcode, Tcol, Tcolgroup,
799a747e4fSDavid du Colombier 	Tdd, Tdel, Tdfn, Tdir, Tdiv, Tdl, Tdt,
809a747e4fSDavid du Colombier 	Tem,
819a747e4fSDavid du Colombier 	Tfieldset, Tfont, Tform, Tframe, Tframeset,
829a747e4fSDavid du Colombier 	Th1, Th2, Th3, Th4, Th5, Th6,
839a747e4fSDavid du Colombier 	Thead, Thr, Thtml,
849a747e4fSDavid du Colombier 	Ti, Tiframe, Timg, Tinput, Tins, Tisindex,
859a747e4fSDavid du Colombier 	Tkbd,
869a747e4fSDavid du Colombier 	Tlabel, Tlegend, Tli, Tlink,
879a747e4fSDavid du Colombier 	Tmap, Tmenu, Tmeta,
889a747e4fSDavid du Colombier 	Tnobr, Tnoframes, Tnoscript,
899a747e4fSDavid du Colombier 	Tobject, Tol, Toptgroup, Toption,
909a747e4fSDavid du Colombier 	Tp, Tparam, Tpre,
919a747e4fSDavid du Colombier 	Tq,
929a747e4fSDavid du Colombier 	Ts, Tsamp, Tscript, Tselect, Tsmall,
939a747e4fSDavid du Colombier 	Tspan, Tstrike, Tstrong, Tstyle, Tsub, Tsup,
949a747e4fSDavid du Colombier 	Ttable, Ttbody, Ttd, Ttextarea, Ttfoot,
959a747e4fSDavid du Colombier 	Tth, Tthead, Ttitle, Ttr, Ttt,
969a747e4fSDavid du Colombier 	Tu, Tul,
979a747e4fSDavid du Colombier 	Tvar,
989a747e4fSDavid du Colombier 	Numtags,
999a747e4fSDavid du Colombier 	RBRA = Numtags,
1009a747e4fSDavid du Colombier 	Data = Numtags+RBRA
1019a747e4fSDavid du Colombier };
1029a747e4fSDavid du Colombier 
1039a747e4fSDavid du Colombier // HTML 4.0 tag attributes
1049a747e4fSDavid du Colombier // Keep sorted in lexical order
1059a747e4fSDavid du Colombier enum {
1069a747e4fSDavid du Colombier 	Aabbr, Aaccept_charset, Aaccess_key, Aaction,
1079a747e4fSDavid du Colombier 	Aalign, Aalink, Aalt, Aarchive, Aaxis,
1089a747e4fSDavid du Colombier 	Abackground, Abgcolor, Aborder,
1099a747e4fSDavid du Colombier 	Acellpadding, Acellspacing, Achar, Acharoff,
1109a747e4fSDavid du Colombier 	Acharset, Achecked, Acite, Aclass, Aclassid,
1119a747e4fSDavid du Colombier 	Aclear, Acode, Acodebase, Acodetype, Acolor,
1129a747e4fSDavid du Colombier 	Acols, Acolspan, Acompact, Acontent, Acoords,
1139a747e4fSDavid du Colombier 	Adata, Adatetime, Adeclare, Adefer, Adir, Adisabled,
1149a747e4fSDavid du Colombier 	Aenctype,
1159a747e4fSDavid du Colombier 	Aface, Afor, Aframe, Aframeborder,
1169a747e4fSDavid du Colombier 	Aheaders, Aheight, Ahref, Ahreflang, Ahspace, Ahttp_equiv,
1179a747e4fSDavid du Colombier 	Aid, Aismap,
1189a747e4fSDavid du Colombier 	Alabel, Alang, Alink, Alongdesc,
1199a747e4fSDavid du Colombier 	Amarginheight, Amarginwidth, Amaxlength,
1209a747e4fSDavid du Colombier 	Amedia, Amethod, Amultiple,
1219a747e4fSDavid du Colombier 	Aname, Anohref, Anoresize, Anoshade, Anowrap,
1229a747e4fSDavid du Colombier 	Aobject, Aonblur, Aonchange, Aonclick, Aondblclick,
1239a747e4fSDavid du Colombier 	Aonfocus, Aonkeypress, Aonkeyup, Aonload,
1249a747e4fSDavid du Colombier 	Aonmousedown, Aonmousemove, Aonmouseout,
1259a747e4fSDavid du Colombier 	Aonmouseover, Aonmouseup, Aonreset, Aonselect,
1269a747e4fSDavid du Colombier 	Aonsubmit, Aonunload,
1279a747e4fSDavid du Colombier 	Aprofile, Aprompt,
1289a747e4fSDavid du Colombier 	Areadonly, Arel, Arev, Arows, Arowspan, Arules,
1299a747e4fSDavid du Colombier 	Ascheme, Ascope, Ascrolling, Aselected, Ashape,
1309a747e4fSDavid du Colombier 	Asize, Aspan, Asrc, Astandby, Astart, Astyle, Asummary,
1319a747e4fSDavid du Colombier 	Atabindex, Atarget, Atext, Atitle, Atype,
1329a747e4fSDavid du Colombier 	Ausemap,
1339a747e4fSDavid du Colombier 	Avalign, Avalue, Avaluetype, Aversion, Avlink, Avspace,
1349a747e4fSDavid du Colombier 	Awidth,
1359a747e4fSDavid du Colombier 	Numattrs
1369a747e4fSDavid du Colombier };
1379a747e4fSDavid du Colombier 
1389a747e4fSDavid du Colombier struct Attr
1399a747e4fSDavid du Colombier {
1409a747e4fSDavid du Colombier 	Attr*		next;		// in list of attrs for a token
1419a747e4fSDavid du Colombier 	int		attid;		// Aabbr, etc.
1429a747e4fSDavid du Colombier 	Rune*	value;
1439a747e4fSDavid du Colombier };
1449a747e4fSDavid du Colombier 
1459a747e4fSDavid du Colombier struct Token
1469a747e4fSDavid du Colombier {
1479a747e4fSDavid du Colombier 	int		tag;		// Ta, etc
1489a747e4fSDavid du Colombier 	Rune*	text;		// text in Data, attribute text in tag
1499a747e4fSDavid du Colombier 	Attr*		attr;		// list of Attrs
1509a747e4fSDavid du Colombier 	int		starti;	// index into source buffer of token start
1519a747e4fSDavid du Colombier };
1529a747e4fSDavid du Colombier 
1539a747e4fSDavid du Colombier extern Rune*	tagnames[];
1549a747e4fSDavid du Colombier extern Rune*	attrnames[];
1559a747e4fSDavid du Colombier 
1569a747e4fSDavid du Colombier extern void	_freetokens(Token* tarray, int n);
1579a747e4fSDavid du Colombier extern Token*	_gettoks(uchar* data, int datalen, int chset, int mtype, int* plen);
1589a747e4fSDavid du Colombier extern int		_tokaval(Token* t, int attid, Rune** pans, int xfer);
1599a747e4fSDavid du Colombier 
1609a747e4fSDavid du Colombier #pragma varargck	type "T"	Token*
161