plan9fox/sys/src/libhtml/impl.h
2011-03-30 19:35:09 +03:00

161 lines
4.5 KiB
C

// 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 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*