#pragma lib "libhtml.a"#pragma src "/sys/src/libhtml" /* UTILS */extern uchar* fromStr(Rune* buf, int n, int chset);extern Rune* toStr(uchar* buf, int n, int chset); /* Common LEX and BUILD enums */ /* Media types */enum{ ApplMsword, ApplOctets, ApplPdf, ApplPostscript, ApplRtf, ApplFramemaker, ApplMsexcel, ApplMspowerpoint, UnknownType, Audio32kadpcm, AudioBasic, ImageCgm, ImageG3fax, ImageGif, ImageIef, ImageJpeg, ImagePng, ImageTiff, ImageXBit, ImageXBit2, ImageXBitmulti, ImageXXBitmap, ModelVrml, MultiDigest, MultiMixed, TextCss, TextEnriched, TextHtml, TextJavascript, TextPlain, TextRichtext, TextSgml, TextTabSeparatedValues, TextXml, VideoMpeg, VideoQuicktime, NMEDIATYPES}; /* HTTP methods */enum{ HGet, HPost}; /* Charsets */enum{ UnknownCharset, US_Ascii, ISO_8859_1, UTF_8, Unicode, NCHARSETS}; /* Frame Target IDs */enum { FTtop, FTself, FTparent, FTblank}; /* LEX */typedef struct Token Token;typedef struct Attr Attr; #pragma incomplete Token /* BUILD */ typedef struct Item Item;typedef struct Itext Itext;typedef struct Irule Irule;typedef struct Iimage Iimage;typedef struct Iformfield Iformfield;typedef struct Itable Itable;typedef struct Ifloat Ifloat;typedef struct Ispacer Ispacer;typedef struct Genattr Genattr;typedef struct SEvent SEvent;typedef struct Formfield Formfield;typedef struct Option Option;typedef struct Form Form;typedef struct Table Table;typedef struct Tablecol Tablecol;typedef struct Tablerow Tablerow;typedef struct Tablecell Tablecell;typedef struct Align Align;typedef struct Dimen Dimen;typedef struct Anchor Anchor;typedef struct DestAnchor DestAnchor;typedef struct Map Map;typedef struct Area Area;typedef struct Background Background;typedef struct Kidinfo Kidinfo;typedef struct Docinfo Docinfo;typedef struct Stack Stack;typedef struct Pstate Pstate;typedef struct ItemSource ItemSource;typedef struct Lay Lay; /* defined in Layout module */ #pragma incomplete Lay /* Alignment types */enum { ALnone = 0, ALleft, ALcenter, ALright, ALjustify, ALchar, ALtop, ALmiddle, ALbottom, ALbaseline,}; struct Align{ uchar halign; /* one of ALnone, ALleft, etc. */ uchar valign; /* one of ALnone, ALtop, etc. */}; /* * A Dimen holds a dimension specification, especially for those * cases when a number can be followed by a % or a * to indicate * percentage of total or relative weight. * Dnone means no dimension was specified */ /* To fit in a word, use top bits to identify kind, rest for value */enum { Dnone = 0, Dpixels = (1<<29), Dpercent = (2<<29), Drelative = (3<<29), Dkindmask = (3<<29), Dspecmask = (~Dkindmask)}; struct Dimen{ int kindspec; /* kind | spec */}; /* * Background is either an image or a color. * If both are set, the image has precedence. */struct Background{ Rune* image; /* url */ int color;}; /* * There are about a half dozen Item variants. * The all look like this at the start (using Plan 9 C's * anonymous structure member mechanism), * and then the tag field dictates what extra fields there are. */struct Item{ Item* next; /* successor in list of items */ int width; /* width in pixels (0 for floating items) */ int height; /* height in pixels */ Rectangle r; int ascent; /* ascent (from top to baseline) in pixels */ int anchorid; /* if nonzero, which anchor we're in */ int state; /* flags and values (see below) */ Genattr*genattr; /* generic attributes and events */ int tag; /* variant discriminator: Itexttag, etc. */}; /* Item variant tags */enum { Itexttag, Iruletag, Iimagetag, Iformfieldtag, Itabletag, Ifloattag, Ispacertag}; struct Itext{ Item; /* (with tag ==Itexttag) */ Rune* s; /* the characters */ int fnt; /* style*NumSize+size (see font stuff, below) */ int fg; /* Pixel (color) for text */ uchar voff; /* Voffbias+vertical offset from baseline, in pixels (+ve == down) */ uchar ul; /* ULnone, ULunder, or ULmid */}; struct Irule{ Item; /* (with tag ==Iruletag) */ uchar align; /* alignment spec */ uchar noshade; /* if true, don't shade */ int size; /* size attr (rule height) */ int color; /* color attr */ Dimen wspec; /* width spec */}; struct Iimage{ Item; /* (with tag ==Iimagetag) */ Rune* imsrc; /* image src url */ int imwidth; /* spec width (actual, if no spec) */ int imheight; /* spec height (actual, if no spec) */ Rune* altrep; /* alternate representation, in absence of image */ Map* map; /* if non-nil, client side map */ int ctlid; /* if animated */ uchar align; /* vertical alignment */ uchar hspace; /* in pixels; buffer space on each side */ uchar vspace; /* in pixels; buffer space on top and bottom */ uchar border; /* in pixels: border width to draw around image */ Iimage* nextimage; /* next in list of document's images */ void* aux;}; struct Iformfield{ Item; /* (with tag ==Iformfieldtag) */ Formfield*formfield; void* aux;}; struct Itable{ Item; /* (with tag ==Itabletag) */ Table* table;}; struct Ifloat{ Item; /* (with tag ==Ifloattag) */ Item* item; /* table or image item that floats */ int x; /* x coord of top (from right, if ALright) */ int y; /* y coord of top */ uchar side; /* margin it floats to: ALleft or ALright */ uchar infloats; /* true if this has been added to a lay.floats */ Ifloat* nextfloat; /* in list of floats */}; struct Ispacer{ Item; /* (with tag ==Ispacertag) */ int spkind; /* ISPnull, etc. */}; /* Item state flags and value fields */enum { IFbrk = 0x80000000, /* forced break before this item */ IFbrksp = 0x40000000, /* add 1 line space to break (IFbrk set too) */ IFnobrk = 0x20000000, /* break not allowed before this item */ IFcleft = 0x10000000, /* clear left floats (IFbrk set too) */ IFcright= 0x08000000, /* clear right floats (IFbrk set too) */ IFwrap = 0x04000000, /* in a wrapping (non-pre) line */ IFhang = 0x02000000, /* in a hanging (into left indent) item */ IFrjust = 0x01000000, /* right justify current line */ IFcjust = 0x00800000, /* center justify current line */ IFsmap = 0x00400000, /* image is server-side map */ IFindentshift = 8, IFindentmask = (255<<IFindentshift), /* current indent, in tab stops */ IFhangmask = 255 /* current hang into left indent, in 1/10th tabstops */}; /* Bias added to Itext's voff field */enum { Voffbias = 128 }; /* Spacer kinds */enum { ISPnull, /* 0 height and width */ ISPvline, /* height and ascent of current font */ ISPhspace, /* width of space in current font */ ISPgeneral /* other purposes (e.g., between markers and list) */}; /* Generic attributes and events (not many elements will have any of these set) */struct Genattr{ Rune* id; Rune* class; Rune* style; Rune* title; SEvent* events;}; struct SEvent{ SEvent* next; /* in list of events */ int type; /* SEonblur, etc. */ Rune* script;}; enum { SEonblur, SEonchange, SEonclick, SEondblclick, SEonfocus, SEonkeypress, SEonkeyup, SEonload, SEonmousedown, SEonmousemove, SEonmouseout, SEonmouseover, SEonmouseup, SEonreset, SEonselect, SEonsubmit, SEonunload, Numscriptev}; /* Form field types */enum { Ftext, Fpassword, Fcheckbox, Fradio, Fsubmit, Fhidden, Fimage, Freset, Ffile, Fbutton, Fselect, Ftextarea}; /* Information about a field in a form */struct Formfield{ Formfield*next; /* in list of fields for a form */ int ftype; /* Ftext, Fpassword, etc. */ int fieldid; /* serial no. of field within its form */ Form* form; /* containing form */ Rune* name; /* name attr */ Rune* value; /* value attr */ int size; /* size attr */ int maxlength; /* maxlength attr */ int rows; /* rows attr */ int cols; /* cols attr */ uchar flags; /* FFchecked, etc. */ Option* options; /* for Fselect fields */ Item* image; /* image item, for Fimage fields */ int ctlid; /* identifies control for this field in layout */ SEvent* events; /* same as genattr->events of containing item */ void* aux;}; enum { FFchecked = (1<<7), FFmultiple = (1<<6)}; /* Option holds info about an option in a "select" form field */struct Option{ Option* next; /* next in list of options for a field */ int selected; /* true if selected initially */ Rune* value; /* value attr */ Rune* display; /* display string */}; /* Form holds info about a form */struct Form{ Form* next; /* in list of forms for document */ int formid; /* serial no. of form within its doc */ Rune* name; /* name or id attr (netscape uses name, HTML 4.0 uses id) */ Rune* action; /* action attr */ int target; /* target attr as targetid */ int method; /* HGet or HPost */ int nfields; /* number of fields */ Formfield*fields; /* field's forms, in input order */}; /* Flags used in various table structures */enum { TFparsing = (1<<7), TFnowrap = (1<<6), TFisth = (1<<5)}; /* Information about a table */struct Table{ Table* next; /* next in list of document's tables */ int tableid; /* serial no. of table within its doc */ Tablerow*rows; /* array of row specs (list during parsing) */ int nrow; /* total number of rows */ Tablecol*cols; /* array of column specs */ int ncol; /* total number of columns */ Tablecell*cells; /* list of unique cells */ int ncell; /* total number of cells */ Tablecell***grid; /* 2-D array of cells */ Align align; /* alignment spec for whole table */ Dimen width; /* width spec for whole table */ int border; /* border attr */ int cellspacing; /* cellspacing attr */ int cellpadding; /* cellpadding attr */ Background background; /* table background */ Item* caption; /* linked list of Items, giving caption */ uchar caption_place; /* ALtop or ALbottom */ Lay* caption_lay; /* layout of caption */ int totw; /* total width */ int toth; /* total height */ int caph; /* caption height */ int availw; /* used for previous 3 sizes */ Token* tabletok; /* token that started the table */ uchar flags; /* Lchanged, perhaps */}; struct Tablecol{ int width; Align align; Point pos;}; struct Tablerow{ Tablerow*next; /* Next in list of rows, during parsing */ Tablecell*cells; /* Cells in row, linked through nextinrow */ int height; int ascent; Align align; Background background; Point pos; uchar flags; /* 0 or TFparsing */}; /* * A Tablecell is one cell of a table. * It may span multiple rows and multiple columns. * Cells are linked on two lists: the list for all the cells of * a document (the next pointers), and the list of all the * cells that start in a given row (the nextinrow pointers) */struct Tablecell{ Tablecell*next; /* next in list of table's cells */ Tablecell*nextinrow; /* next in list of row's cells */ int cellid; /* serial no. of cell within table */ Item* content; /* contents before layout */ Lay* lay; /* layout of cell */ int rowspan; /* number of rows spanned by this cell */ int colspan; /* number of cols spanned by this cell */ Align align; /* alignment spec */ uchar flags; /* TFparsing, TFnowrap, TFisth */ Dimen wspec; /* suggested width */ int hspec; /* suggested height */ Background background; /* cell background */ int minw; /* minimum possible width */ int maxw; /* maximum width */ int ascent; /* cell's ascent */ int row; /* row of upper left corner */ int col; /* col of upper left corner */ Point pos; /* nw corner of cell contents, in cell */ Rectangle r;}; /* Anchor is for info about hyperlinks that go somewhere */struct Anchor{ Anchor* next; /* next in list of document's anchors */ int index; /* serial no. of anchor within its doc */ Rune* name; /* name attr */ Rune* href; /* href attr */ int target; /* target attr as targetid */}; /* DestAnchor is for info about hyperlinks that are destinations */struct DestAnchor{ DestAnchor*next; /* next in list of document's destanchors */ int index; /* serial no. of anchor within its doc */ Rune* name; /* name attr */ Item* item; /* the destination */}; /* Maps (client side) */struct Map{ Map* next; /* next in list of document's maps */ Rune* name; /* map name */ Area* areas; /* list of map areas */};Lines 1–500 of 637. Load more
#pragma lib "libhtml.a" #pragma src "/sys/src/libhtml" /* UTILS */ extern uchar* fromStr(Rune* buf, int n, int chset); extern Rune* toStr(uchar* buf, int n, int chset); /* Common LEX and BUILD enums */ /* Media types */ enum { ApplMsword, ApplOctets, ApplPdf, ApplPostscript, ApplRtf, ApplFramemaker, ApplMsexcel, ApplMspowerpoint, UnknownType, Audio32kadpcm, AudioBasic, ImageCgm, ImageG3fax, ImageGif, ImageIef, ImageJpeg, ImagePng, ImageTiff, ImageXBit, ImageXBit2, ImageXBitmulti, ImageXXBitmap, ModelVrml, MultiDigest, MultiMixed, TextCss, TextEnriched, TextHtml, TextJavascript, TextPlain, TextRichtext, TextSgml, TextTabSeparatedValues, TextXml, VideoMpeg, VideoQuicktime, NMEDIATYPES }; /* HTTP methods */ enum { HGet, HPost }; /* Charsets */ enum { UnknownCharset, US_Ascii, ISO_8859_1, UTF_8, Unicode, NCHARSETS }; /* Frame Target IDs */ enum { FTtop, FTself, FTparent, FTblank }; /* LEX */ typedef struct Token Token; typedef struct Attr Attr; #pragma incomplete Token /* BUILD */ typedef struct Item Item; typedef struct Itext Itext; typedef struct Irule Irule; typedef struct Iimage Iimage; typedef struct Iformfield Iformfield; typedef struct Itable Itable; typedef struct Ifloat Ifloat; typedef struct Ispacer Ispacer; typedef struct Genattr Genattr; typedef struct SEvent SEvent; typedef struct Formfield Formfield; typedef struct Option Option; typedef struct Form Form; typedef struct Table Table; typedef struct Tablecol Tablecol; typedef struct Tablerow Tablerow; typedef struct Tablecell Tablecell; typedef struct Align Align; typedef struct Dimen Dimen; typedef struct Anchor Anchor; typedef struct DestAnchor DestAnchor; typedef struct Map Map; typedef struct Area Area; typedef struct Background Background; typedef struct Kidinfo Kidinfo; typedef struct Docinfo Docinfo; typedef struct Stack Stack; typedef struct Pstate Pstate; typedef struct ItemSource ItemSource; typedef struct Lay Lay; /* defined in Layout module */ #pragma incomplete Lay /* Alignment types */ enum { ALnone = 0, ALleft, ALcenter, ALright, ALjustify, ALchar, ALtop, ALmiddle, ALbottom, ALbaseline, }; struct Align { uchar halign; /* one of ALnone, ALleft, etc. */ uchar valign; /* one of ALnone, ALtop, etc. */ }; /* * A Dimen holds a dimension specification, especially for those * cases when a number can be followed by a % or a * to indicate * percentage of total or relative weight. * Dnone means no dimension was specified */ /* To fit in a word, use top bits to identify kind, rest for value */ enum { Dnone = 0, Dpixels = (1<<29), Dpercent = (2<<29), Drelative = (3<<29), Dkindmask = (3<<29), Dspecmask = (~Dkindmask) }; struct Dimen { int kindspec; /* kind | spec */ }; /* * Background is either an image or a color. * If both are set, the image has precedence. */ struct Background { Rune* image; /* url */ int color; }; /* * There are about a half dozen Item variants. * The all look like this at the start (using Plan 9 C's * anonymous structure member mechanism), * and then the tag field dictates what extra fields there are. */ struct Item { Item* next; /* successor in list of items */ int width; /* width in pixels (0 for floating items) */ int height; /* height in pixels */ Rectangle r; int ascent; /* ascent (from top to baseline) in pixels */ int anchorid; /* if nonzero, which anchor we're in */ int state; /* flags and values (see below) */ Genattr*genattr; /* generic attributes and events */ int tag; /* variant discriminator: Itexttag, etc. */ }; /* Item variant tags */ enum { Itexttag, Iruletag, Iimagetag, Iformfieldtag, Itabletag, Ifloattag, Ispacertag }; struct Itext { Item; /* (with tag ==Itexttag) */ Rune* s; /* the characters */ int fnt; /* style*NumSize+size (see font stuff, below) */ int fg; /* Pixel (color) for text */ uchar voff; /* Voffbias+vertical offset from baseline, in pixels (+ve == down) */ uchar ul; /* ULnone, ULunder, or ULmid */ }; struct Irule { Item; /* (with tag ==Iruletag) */ uchar align; /* alignment spec */ uchar noshade; /* if true, don't shade */ int size; /* size attr (rule height) */ int color; /* color attr */ Dimen wspec; /* width spec */ }; struct Iimage { Item; /* (with tag ==Iimagetag) */ Rune* imsrc; /* image src url */ int imwidth; /* spec width (actual, if no spec) */ int imheight; /* spec height (actual, if no spec) */ Rune* altrep; /* alternate representation, in absence of image */ Map* map; /* if non-nil, client side map */ int ctlid; /* if animated */ uchar align; /* vertical alignment */ uchar hspace; /* in pixels; buffer space on each side */ uchar vspace; /* in pixels; buffer space on top and bottom */ uchar border; /* in pixels: border width to draw around image */ Iimage* nextimage; /* next in list of document's images */ void* aux; }; struct Iformfield { Item; /* (with tag ==Iformfieldtag) */ Formfield*formfield; void* aux; }; struct Itable { Item; /* (with tag ==Itabletag) */ Table* table; }; struct Ifloat { Item; /* (with tag ==Ifloattag) */ Item* item; /* table or image item that floats */ int x; /* x coord of top (from right, if ALright) */ int y; /* y coord of top */ uchar side; /* margin it floats to: ALleft or ALright */ uchar infloats; /* true if this has been added to a lay.floats */ Ifloat* nextfloat; /* in list of floats */ }; struct Ispacer { Item; /* (with tag ==Ispacertag) */ int spkind; /* ISPnull, etc. */ }; /* Item state flags and value fields */ enum { IFbrk = 0x80000000, /* forced break before this item */ IFbrksp = 0x40000000, /* add 1 line space to break (IFbrk set too) */ IFnobrk = 0x20000000, /* break not allowed before this item */ IFcleft = 0x10000000, /* clear left floats (IFbrk set too) */ IFcright= 0x08000000, /* clear right floats (IFbrk set too) */ IFwrap = 0x04000000, /* in a wrapping (non-pre) line */ IFhang = 0x02000000, /* in a hanging (into left indent) item */ IFrjust = 0x01000000, /* right justify current line */ IFcjust = 0x00800000, /* center justify current line */ IFsmap = 0x00400000, /* image is server-side map */ IFindentshift = 8, IFindentmask = (255<<IFindentshift), /* current indent, in tab stops */ IFhangmask = 255 /* current hang into left indent, in 1/10th tabstops */ }; /* Bias added to Itext's voff field */ enum { Voffbias = 128 }; /* Spacer kinds */ enum { ISPnull, /* 0 height and width */ ISPvline, /* height and ascent of current font */ ISPhspace, /* width of space in current font */ ISPgeneral /* other purposes (e.g., between markers and list) */ }; /* Generic attributes and events (not many elements will have any of these set) */ struct Genattr { Rune* id; Rune* class; Rune* style; Rune* title; SEvent* events; }; struct SEvent { SEvent* next; /* in list of events */ int type; /* SEonblur, etc. */ Rune* script; }; enum { SEonblur, SEonchange, SEonclick, SEondblclick, SEonfocus, SEonkeypress, SEonkeyup, SEonload, SEonmousedown, SEonmousemove, SEonmouseout, SEonmouseover, SEonmouseup, SEonreset, SEonselect, SEonsubmit, SEonunload, Numscriptev }; /* Form field types */ enum { Ftext, Fpassword, Fcheckbox, Fradio, Fsubmit, Fhidden, Fimage, Freset, Ffile, Fbutton, Fselect, Ftextarea }; /* Information about a field in a form */ struct Formfield { Formfield*next; /* in list of fields for a form */ int ftype; /* Ftext, Fpassword, etc. */ int fieldid; /* serial no. of field within its form */ Form* form; /* containing form */ Rune* name; /* name attr */ Rune* value; /* value attr */ int size; /* size attr */ int maxlength; /* maxlength attr */ int rows; /* rows attr */ int cols; /* cols attr */ uchar flags; /* FFchecked, etc. */ Option* options; /* for Fselect fields */ Item* image; /* image item, for Fimage fields */ int ctlid; /* identifies control for this field in layout */ SEvent* events; /* same as genattr->events of containing item */ void* aux; }; enum { FFchecked = (1<<7), FFmultiple = (1<<6) }; /* Option holds info about an option in a "select" form field */ struct Option { Option* next; /* next in list of options for a field */ int selected; /* true if selected initially */ Rune* value; /* value attr */ Rune* display; /* display string */ }; /* Form holds info about a form */ struct Form { Form* next; /* in list of forms for document */ int formid; /* serial no. of form within its doc */ Rune* name; /* name or id attr (netscape uses name, HTML 4.0 uses id) */ Rune* action; /* action attr */ int target; /* target attr as targetid */ int method; /* HGet or HPost */ int nfields; /* number of fields */ Formfield*fields; /* field's forms, in input order */ }; /* Flags used in various table structures */ enum { TFparsing = (1<<7), TFnowrap = (1<<6), TFisth = (1<<5) }; /* Information about a table */ struct Table { Table* next; /* next in list of document's tables */ int tableid; /* serial no. of table within its doc */ Tablerow*rows; /* array of row specs (list during parsing) */ int nrow; /* total number of rows */ Tablecol*cols; /* array of column specs */ int ncol; /* total number of columns */ Tablecell*cells; /* list of unique cells */ int ncell; /* total number of cells */ Tablecell***grid; /* 2-D array of cells */ Align align; /* alignment spec for whole table */ Dimen width; /* width spec for whole table */ int border; /* border attr */ int cellspacing; /* cellspacing attr */ int cellpadding; /* cellpadding attr */ Background background; /* table background */ Item* caption; /* linked list of Items, giving caption */ uchar caption_place; /* ALtop or ALbottom */ Lay* caption_lay; /* layout of caption */ int totw; /* total width */ int toth; /* total height */ int caph; /* caption height */ int availw; /* used for previous 3 sizes */ Token* tabletok; /* token that started the table */ uchar flags; /* Lchanged, perhaps */ }; struct Tablecol { int width; Align align; Point pos; }; struct Tablerow { Tablerow*next; /* Next in list of rows, during parsing */ Tablecell*cells; /* Cells in row, linked through nextinrow */ int height; int ascent; Align align; Background background; Point pos; uchar flags; /* 0 or TFparsing */ }; /* * A Tablecell is one cell of a table. * It may span multiple rows and multiple columns. * Cells are linked on two lists: the list for all the cells of * a document (the next pointers), and the list of all the * cells that start in a given row (the nextinrow pointers) */ struct Tablecell { Tablecell*next; /* next in list of table's cells */ Tablecell*nextinrow; /* next in list of row's cells */ int cellid; /* serial no. of cell within table */ Item* content; /* contents before layout */ Lay* lay; /* layout of cell */ int rowspan; /* number of rows spanned by this cell */ int colspan; /* number of cols spanned by this cell */ Align align; /* alignment spec */ uchar flags; /* TFparsing, TFnowrap, TFisth */ Dimen wspec; /* suggested width */ int hspec; /* suggested height */ Background background; /* cell background */ int minw; /* minimum possible width */ int maxw; /* maximum width */ int ascent; /* cell's ascent */ int row; /* row of upper left corner */ int col; /* col of upper left corner */ Point pos; /* nw corner of cell contents, in cell */ Rectangle r; }; /* Anchor is for info about hyperlinks that go somewhere */ struct Anchor { Anchor* next; /* next in list of document's anchors */ int index; /* serial no. of anchor within its doc */ Rune* name; /* name attr */ Rune* href; /* href attr */ int target; /* target attr as targetid */ }; /* DestAnchor is for info about hyperlinks that are destinations */ struct DestAnchor { DestAnchor*next; /* next in list of document's destanchors */ int index; /* serial no. of anchor within its doc */ Rune* name; /* name attr */ Item* item; /* the destination */ }; /* Maps (client side) */ struct Map { Map* next; /* next in list of document's maps */ Rune* name; /* map name */ Area* areas; /* list of map areas */ };