aboutsummaryrefslogtreecommitdiff
path: root/src/libhtml/impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libhtml/impl.h')
-rw-r--r--src/libhtml/impl.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/src/libhtml/impl.h b/src/libhtml/impl.h
new file mode 100644
index 00000000..f8c79ea3
--- /dev/null
+++ b/src/libhtml/impl.h
@@ -0,0 +1,163 @@
+
+// UTILS
+typedef struct List List;
+typedef struct Strlist Strlist;
+
+// List of integers (and also generic list with next pointer at beginning)
+struct List
+{
+ List* next;
+ int val;
+};
+
+struct Strlist
+{
+ Strlist* next;
+ Rune* val;
+};
+
+extern int _inclass(Rune c, Rune* cl);
+extern int _listlen(List* l);
+extern Rune* _ltoStr(int n);
+extern List* _newlist(int val, List* rest);
+extern Rune* _newstr(int n);
+extern int _prefix(Rune* pre, Rune* s);
+extern List* _revlist(List* l);
+extern void _splitl(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2);
+extern void _splitr(Rune* s, int n, Rune* cl, Rune** p1, int* n1, Rune** p2, int* n2);
+extern int _splitall(Rune* s, int n, Rune* cl, Rune** strarr, int* lenarr, int alen);
+extern Rune* _Stradd(Rune*s1, Rune* s2, int n);
+extern Rune* _Strclass(Rune* s, Rune* cl);
+extern int _Strcmp(Rune* s1, Rune* s2);
+extern Rune* _Strdup(Rune* s);
+extern Rune* _Strdup2(Rune* s, Rune* t);
+extern int _Streqn(Rune* s1, int n1, Rune* s2);
+extern int _Strlen(Rune* s);
+extern Rune* _Strnclass(Rune* s, Rune* cl, int n);
+extern int _Strncmpci(Rune* s1, int n1, Rune* s2);
+extern Rune* _Strndup(Rune* s, int n);
+extern Rune* _Strnrclass(Rune* s, Rune* cl, int n);
+extern Rune* _Strrclass(Rune* s, Rune* cl);
+extern Rune* _Strsubstr(Rune* s, int start, int stop);
+extern long _Strtol(Rune* s, Rune** eptr, int base);
+extern void _trimwhite(Rune* s, int n, Rune** pans, int* panslen);
+
+extern Rune notwhitespace[];
+extern Rune whitespace[];
+
+// STRINTTAB
+typedef struct StringInt StringInt;
+
+// Element of String-Int table (used for keyword lookup)
+struct StringInt
+{
+ Rune* key;
+ int val;
+};
+
+extern int _lookup(StringInt* t, int n, Rune* key, int keylen, int* pans);
+extern StringInt* _makestrinttab(Rune** a, int n);
+extern Rune* _revlookup(StringInt* t, int n, int val);
+
+// Colors, in html format, not Plan 9 format. (RGB values in bottom 3 bytes)
+enum {
+ White = 0xFFFFFF,
+ Black = 0x000000,
+ Blue = 0x0000CC,
+};
+
+// LEX
+
+// HTML 4.0 tags (plus blink, nobr)
+// sorted in lexical order; used as array indices
+enum {
+ Notfound,
+ Comment,
+ Ta, Tabbr, Tacronym, Taddress, Tapplet, Tarea,
+ Tb, Tbase, Tbasefont, Tbdo, Tbig, Tblink,
+ Tblockquote, Tbody, Tbq, Tbr, Tbutton,
+ Tcaption, Tcenter, Tcite, Tcode, Tcol, Tcolgroup,
+ Tdd, Tdel, Tdfn, Tdir, Tdiv, Tdl, Tdt,
+ Tem,
+ Tfieldset, Tfont, Tform, Tframe, Tframeset,
+ Th1, Th2, Th3, Th4, Th5, Th6,
+ Thead, Thr, Thtml,
+ Ti, Tiframe, Timg, Tinput, Tins, Tisindex,
+ Tkbd,
+ Tlabel, Tlegend, Tli, Tlink,
+ Tmap, Tmenu, Tmeta,
+ Tnobr, Tnoframes, Tnoscript,
+ Tobject, Tol, Toptgroup, Toption,
+ Tp, Tparam, Tpre,
+ Tq,
+ Ts, Tsamp, Tscript, Tselect, Tsmall,
+ Tspan, Tstrike, Tstrong, Tstyle, Tsub, Tsup,
+ Ttable, Ttbody, Ttd, Ttextarea, Ttfoot,
+ Tth, Tthead, Ttitle, Ttr, Ttt,
+ Tu, Tul,
+ Tvar,
+ Numtags,
+ RBRA = Numtags,
+ Data = Numtags+RBRA
+};
+
+// HTML 4.0 tag attributes
+// Keep sorted in lexical order
+enum {
+ Aabbr, Aaccept_charset, Aaccess_key, Aaction,
+ Aalign, Aalink, Aalt, Aarchive, Aaxis,
+ Abackground, Abgcolor, Aborder,
+ Acellpadding, Acellspacing, Achar, Acharoff,
+ Acharset, Achecked, Acite, Aclass, Aclassid,
+ Aclear, Acode, Acodebase, Acodetype, Acolor,
+ Acols, Acolspan, Acompact, Acontent, Acoords,
+ Adata, Adatetime, Adeclare, Adefer, Adir, Adisabled,
+ Aenctype,
+ Aface, Afor, Aframe, Aframeborder,
+ Aheaders, Aheight, Ahref, Ahreflang, Ahspace, Ahttp_equiv,
+ Aid, Aismap,
+ Alabel, Alang, Alink, Alongdesc,
+ Amarginheight, Amarginwidth, Amaxlength,
+ Amedia, Amethod, Amultiple,
+ Aname, Anohref, Anoresize, Anoshade, Anowrap,
+ Aobject, Aonblur, Aonchange, Aonclick, Aondblclick,
+ Aonfocus, Aonkeypress, Aonkeyup, Aonload,
+ Aonmousedown, Aonmousemove, Aonmouseout,
+ Aonmouseover, Aonmouseup, Aonreset, Aonselect,
+ Aonsubmit, Aonunload,
+ Aprofile, Aprompt,
+ Areadonly, Arel, Arev, Arows, Arowspan, Arules,
+ Ascheme, Ascope, Ascrolling, Aselected, Ashape,
+ Asize, Aspan, Asrc, Astandby, Astart, Astyle, Asummary,
+ Atabindex, Atarget, Atext, Atitle, Atype,
+ Ausemap,
+ Avalign, Avalue, Avaluetype, Aversion, Avlink, Avspace,
+ Awidth,
+ Numattrs
+};
+
+struct Attr
+{
+ Attr* next; // in list of attrs for a token
+ int attid; // Aabbr, etc.
+ Rune* value;
+};
+
+struct Token
+{
+ int tag; // Ta, etc
+ Rune* text; // text in Data, attribute text in tag
+ Attr* attr; // list of Attrs
+ int starti; // index into source buffer of token start
+};
+
+extern Rune** tagnames;
+extern Rune** attrnames;
+
+extern void _freetokens(Token* tarray, int n);
+extern Token* _gettoks(uchar* data, int datalen, int chset, int mtype, int* plen);
+extern int _tokaval(Token* t, int attid, Rune** pans, int xfer);
+
+#pragma varargck type "T" Token*
+
+#include "runetab.h"