| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package html // import "github.com/tdewolff/minify/html"
- import "github.com/tdewolff/parse/html"
- type traits uint8
- const (
- rawTag traits = 1 << iota
- nonPhrasingTag
- objectTag
- booleanAttr
- caselessAttr
- urlAttr
- omitPTag // omit p end tag if it is followed by this start tag
- keepPTag // keep p end tag if it is followed by this end tag
- )
- var tagMap = map[html.Hash]traits{
- html.A: keepPTag,
- html.Address: nonPhrasingTag | omitPTag,
- html.Article: nonPhrasingTag | omitPTag,
- html.Aside: nonPhrasingTag | omitPTag,
- html.Audio: objectTag | keepPTag,
- html.Blockquote: nonPhrasingTag | omitPTag,
- html.Body: nonPhrasingTag,
- html.Br: nonPhrasingTag,
- html.Button: objectTag,
- html.Canvas: objectTag,
- html.Caption: nonPhrasingTag,
- html.Col: nonPhrasingTag,
- html.Colgroup: nonPhrasingTag,
- html.Dd: nonPhrasingTag,
- html.Del: keepPTag,
- html.Details: omitPTag,
- html.Div: nonPhrasingTag | omitPTag,
- html.Dl: nonPhrasingTag | omitPTag,
- html.Dt: nonPhrasingTag,
- html.Embed: nonPhrasingTag,
- html.Fieldset: nonPhrasingTag | omitPTag,
- html.Figcaption: nonPhrasingTag | omitPTag,
- html.Figure: nonPhrasingTag | omitPTag,
- html.Footer: nonPhrasingTag | omitPTag,
- html.Form: nonPhrasingTag | omitPTag,
- html.H1: nonPhrasingTag | omitPTag,
- html.H2: nonPhrasingTag | omitPTag,
- html.H3: nonPhrasingTag | omitPTag,
- html.H4: nonPhrasingTag | omitPTag,
- html.H5: nonPhrasingTag | omitPTag,
- html.H6: nonPhrasingTag | omitPTag,
- html.Head: nonPhrasingTag,
- html.Header: nonPhrasingTag | omitPTag,
- html.Hgroup: nonPhrasingTag,
- html.Hr: nonPhrasingTag | omitPTag,
- html.Html: nonPhrasingTag,
- html.Iframe: rawTag | objectTag,
- html.Img: objectTag,
- html.Input: objectTag,
- html.Ins: keepPTag,
- html.Keygen: objectTag,
- html.Li: nonPhrasingTag,
- html.Main: nonPhrasingTag | omitPTag,
- html.Map: keepPTag,
- html.Math: rawTag,
- html.Menu: omitPTag,
- html.Meta: nonPhrasingTag,
- html.Meter: objectTag,
- html.Nav: nonPhrasingTag | omitPTag,
- html.Noscript: nonPhrasingTag | keepPTag,
- html.Object: objectTag,
- html.Ol: nonPhrasingTag | omitPTag,
- html.Output: nonPhrasingTag,
- html.P: nonPhrasingTag | omitPTag,
- html.Picture: objectTag,
- html.Pre: nonPhrasingTag | omitPTag,
- html.Progress: objectTag,
- html.Q: objectTag,
- html.Script: rawTag,
- html.Section: nonPhrasingTag | omitPTag,
- html.Select: objectTag,
- html.Style: rawTag | nonPhrasingTag,
- html.Svg: rawTag | objectTag,
- html.Table: nonPhrasingTag | omitPTag,
- html.Tbody: nonPhrasingTag,
- html.Td: nonPhrasingTag,
- html.Textarea: rawTag | objectTag,
- html.Tfoot: nonPhrasingTag,
- html.Th: nonPhrasingTag,
- html.Thead: nonPhrasingTag,
- html.Title: nonPhrasingTag,
- html.Tr: nonPhrasingTag,
- html.Ul: nonPhrasingTag | omitPTag,
- html.Video: objectTag | keepPTag,
- }
- var attrMap = map[html.Hash]traits{
- html.Accept: caselessAttr,
- html.Accept_Charset: caselessAttr,
- html.Action: urlAttr,
- html.Align: caselessAttr,
- html.Alink: caselessAttr,
- html.Allowfullscreen: booleanAttr,
- html.Async: booleanAttr,
- html.Autofocus: booleanAttr,
- html.Autoplay: booleanAttr,
- html.Axis: caselessAttr,
- html.Background: urlAttr,
- html.Bgcolor: caselessAttr,
- html.Charset: caselessAttr,
- html.Checked: booleanAttr,
- html.Cite: urlAttr,
- html.Classid: urlAttr,
- html.Clear: caselessAttr,
- html.Codebase: urlAttr,
- html.Codetype: caselessAttr,
- html.Color: caselessAttr,
- html.Compact: booleanAttr,
- html.Controls: booleanAttr,
- html.Data: urlAttr,
- html.Declare: booleanAttr,
- html.Default: booleanAttr,
- html.DefaultChecked: booleanAttr,
- html.DefaultMuted: booleanAttr,
- html.DefaultSelected: booleanAttr,
- html.Defer: booleanAttr,
- html.Dir: caselessAttr,
- html.Disabled: booleanAttr,
- html.Enabled: booleanAttr,
- html.Enctype: caselessAttr,
- html.Face: caselessAttr,
- html.Formaction: urlAttr,
- html.Formnovalidate: booleanAttr,
- html.Frame: caselessAttr,
- html.Hidden: booleanAttr,
- html.Href: urlAttr,
- html.Hreflang: caselessAttr,
- html.Http_Equiv: caselessAttr,
- html.Icon: urlAttr,
- html.Inert: booleanAttr,
- html.Ismap: booleanAttr,
- html.Itemscope: booleanAttr,
- html.Lang: caselessAttr,
- html.Language: caselessAttr,
- html.Link: caselessAttr,
- html.Longdesc: urlAttr,
- html.Manifest: urlAttr,
- html.Media: caselessAttr,
- html.Method: caselessAttr,
- html.Multiple: booleanAttr,
- html.Muted: booleanAttr,
- html.Nohref: booleanAttr,
- html.Noresize: booleanAttr,
- html.Noshade: booleanAttr,
- html.Novalidate: booleanAttr,
- html.Nowrap: booleanAttr,
- html.Open: booleanAttr,
- html.Pauseonexit: booleanAttr,
- html.Poster: urlAttr,
- html.Profile: urlAttr,
- html.Readonly: booleanAttr,
- html.Rel: caselessAttr,
- html.Required: booleanAttr,
- html.Rev: caselessAttr,
- html.Reversed: booleanAttr,
- html.Rules: caselessAttr,
- html.Scope: caselessAttr,
- html.Scoped: booleanAttr,
- html.Scrolling: caselessAttr,
- html.Seamless: booleanAttr,
- html.Selected: booleanAttr,
- html.Shape: caselessAttr,
- html.Sortable: booleanAttr,
- html.Src: urlAttr,
- html.Target: caselessAttr,
- html.Text: caselessAttr,
- html.Translate: booleanAttr,
- html.Truespeed: booleanAttr,
- html.Type: caselessAttr,
- html.Typemustmatch: booleanAttr,
- html.Undeterminate: booleanAttr,
- html.Usemap: urlAttr,
- html.Valign: caselessAttr,
- html.Valuetype: caselessAttr,
- html.Vlink: caselessAttr,
- html.Visible: booleanAttr,
- html.Xmlns: urlAttr,
- }
|