[chore]: Bump github.com/tdewolff/minify/v2 from 2.12.7 to 2.12.8 (#2073)

This commit is contained in:
dependabot[bot] 2023-08-07 08:28:49 +00:00 committed by GitHub
parent 0f812746b7
commit 517829ae6a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 689 additions and 576 deletions

4
go.mod
View file

@ -45,7 +45,7 @@ require (
github.com/superseriousbusiness/activity v1.4.0-gts github.com/superseriousbusiness/activity v1.4.0-gts
github.com/superseriousbusiness/exif-terminator v0.5.0 github.com/superseriousbusiness/exif-terminator v0.5.0
github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8 github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8
github.com/tdewolff/minify/v2 v2.12.7 github.com/tdewolff/minify/v2 v2.12.8
github.com/ulule/limiter/v3 v3.11.2 github.com/ulule/limiter/v3 v3.11.2
github.com/uptrace/bun v1.1.14 github.com/uptrace/bun v1.1.14
github.com/uptrace/bun/dialect/pgdialect v1.1.14 github.com/uptrace/bun/dialect/pgdialect v1.1.14
@ -152,7 +152,7 @@ require (
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.4.2 // indirect github.com/subosito/gotenv v1.4.2 // indirect
github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe // indirect github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe // indirect
github.com/tdewolff/parse/v2 v2.6.6 // indirect github.com/tdewolff/parse/v2 v2.6.7 // indirect
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect github.com/ugorji/go/codec v1.2.11 // indirect

12
go.sum
View file

@ -111,7 +111,6 @@ github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
@ -149,7 +148,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E= github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E=
@ -438,7 +436,6 @@ github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
@ -564,11 +561,10 @@ github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430
github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe/go.mod h1:gH4P6gN1V+wmIw5o97KGaa1RgXB/tVpC2UNzijhg3E4= github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe/go.mod h1:gH4P6gN1V+wmIw5o97KGaa1RgXB/tVpC2UNzijhg3E4=
github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8 h1:nTIhuP157oOFcscuoK1kCme1xTeGIzztSw70lX9NrDQ= github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8 h1:nTIhuP157oOFcscuoK1kCme1xTeGIzztSw70lX9NrDQ=
github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8/go.mod h1:uYC/W92oVRJ49Vh1GcvTqpeFqHi+Ovrl2sMllQWRAEo= github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB.0.20230227143000-f4900831d6c8/go.mod h1:uYC/W92oVRJ49Vh1GcvTqpeFqHi+Ovrl2sMllQWRAEo=
github.com/tdewolff/minify/v2 v2.12.7 h1:pBzz2tAfz5VghOXiQIsSta6srhmTeinQPjRDHWoumCA= github.com/tdewolff/minify/v2 v2.12.8 h1:Q2BqOTmlMjoutkuD/OPCnJUpIqrzT3nRPkw+q+KpXS0=
github.com/tdewolff/minify/v2 v2.12.7/go.mod h1:ZRKTheiOGyLSK8hOZWWv+YoJAECzDivNgAlVYDHp/Ws= github.com/tdewolff/minify/v2 v2.12.8/go.mod h1:YRgk7CC21LZnbuke2fmYnCTq+zhCgpb0yJACOTUNJ1E=
github.com/tdewolff/parse/v2 v2.6.6 h1:Yld+0CrKUJaCV78DL1G2nk3C9lKrxyRTux5aaK/AkDo= github.com/tdewolff/parse/v2 v2.6.7 h1:WrFllrqmzAcrKHzoYgMupqgUBIfBVOb0yscFzDf8bBg=
github.com/tdewolff/parse/v2 v2.6.6/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= github.com/tdewolff/parse/v2 v2.6.7/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM=
github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
github.com/tdewolff/test v1.0.9 h1:SswqJCmeN4B+9gEAi/5uqT0qpi1y2/2O47V/1hhGZT0= github.com/tdewolff/test v1.0.9 h1:SswqJCmeN4B+9gEAi/5uqT0qpi1y2/2O47V/1hhGZT0=
github.com/tdewolff/test v1.0.9/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tdewolff/test v1.0.9/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
github.com/tidwall/btree v0.0.0-20191029221954-400434d76274 h1:G6Z6HvJuPjG6XfNGi/feOATzeJrfgTNJY+rGrHbA04E= github.com/tidwall/btree v0.0.0-20191029221954-400434d76274 h1:G6Z6HvJuPjG6XfNGi/feOATzeJrfgTNJY+rGrHbA04E=

View file

@ -79,7 +79,7 @@ Minifiers or bindings to minifiers exist in almost all programming languages. So
This minifier proves to be that fast and extensive minifier that can handle HTML and any other filetype it may contain (CSS, JS, ...). It is usually orders of magnitude faster than existing minifiers. This minifier proves to be that fast and extensive minifier that can handle HTML and any other filetype it may contain (CSS, JS, ...). It is usually orders of magnitude faster than existing minifiers.
## Installation ## Installation
Make sure you have [Git](https://git-scm.com/) and [Go](https://golang.org/dl/) (1.13 or higher) installed, run Make sure you have [Git](https://git-scm.com/) and [Go](https://golang.org/dl/) (1.18 or higher) installed, run
``` ```
mkdir Project mkdir Project
cd Project cd Project

View file

@ -11,238 +11,254 @@
// Unique hash definitions to be used instead of strings // Unique hash definitions to be used instead of strings
const ( const (
A Hash = 0x1 // a A Hash = 0x1 // a
Abbr Hash = 0x37a04 // abbr Abbr Hash = 0x3b804 // abbr
About Hash = 0x5 // about About Hash = 0x5 // about
Accept Hash = 0x1106 // accept Accept Hash = 0x1106 // accept
Accept_Charset Hash = 0x110e // accept-charset Accept_Charset Hash = 0x110e // accept-charset
Action Hash = 0x23f06 // action Acronym Hash = 0x4a07 // acronym
Address Hash = 0x5a07 // address Action Hash = 0x21d06 // action
Align Hash = 0x32705 // align Address Hash = 0x7807 // address
Alink Hash = 0x7005 // alink Align Hash = 0x35b05 // align
Allowfullscreen Hash = 0x2ad0f // allowfullscreen Alink Hash = 0x3a405 // alink
Amp_Boilerplate Hash = 0x610f // amp-boilerplate Allowfullscreen Hash = 0x2e10f // allowfullscreen
Area Hash = 0x1e304 // area Amp_Boilerplate Hash = 0x7f0f // amp-boilerplate
Applet Hash = 0xd706 // applet
Area Hash = 0x2fd04 // area
Article Hash = 0x2707 // article Article Hash = 0x2707 // article
Aside Hash = 0xb405 // aside Aside Hash = 0x5b05 // aside
Async Hash = 0xac05 // async Async Hash = 0x8e05 // async
Audio Hash = 0xd105 // audio Audio Hash = 0x9605 // audio
Autofocus Hash = 0xe409 // autofocus Autofocus Hash = 0xcc09 // autofocus
Autoplay Hash = 0x10808 // autoplay Autoplay Hash = 0x10c08 // autoplay
Axis Hash = 0x11004 // axis Axis Hash = 0x11404 // axis
B Hash = 0x101 // b B Hash = 0x101 // b
Background Hash = 0x300a // background Background Hash = 0x300a // background
Base Hash = 0x19604 // base Base Hash = 0x17804 // base
Bb Hash = 0x37b02 // bb Basefont Hash = 0x17808 // basefont
Bdi Hash = 0x7503 // bdi Bb Hash = 0x3b902 // bb
Bdo Hash = 0x31f03 // bdo Bdi Hash = 0x18403 // bdi
Bgcolor Hash = 0x12607 // bgcolor Bdo Hash = 0x35303 // bdo
Blockquote Hash = 0x13e0a // blockquote Bgcolor Hash = 0x12a07 // bgcolor
Big Hash = 0x13103 // big
Blockquote Hash = 0x1340a // blockquote
Body Hash = 0xd04 // body Body Hash = 0xd04 // body
Br Hash = 0x37c02 // br Br Hash = 0x36102 // br
Button Hash = 0x14806 // button Button Hash = 0x13e06 // button
Canvas Hash = 0xb006 // canvas Canvas Hash = 0x5706 // canvas
Caption Hash = 0x21f07 // caption Caption Hash = 0x1fe07 // caption
Center Hash = 0xb706 // center
Charset Hash = 0x1807 // charset Charset Hash = 0x1807 // charset
Checked Hash = 0x1b307 // checked Checked Hash = 0x19707 // checked
Cite Hash = 0xfb04 // cite Cite Hash = 0x9204 // cite
Class Hash = 0x15905 // class Class Hash = 0x15105 // class
Classid Hash = 0x15907 // classid Classid Hash = 0x15107 // classid
Clear Hash = 0x2b05 // clear Clear Hash = 0x2b05 // clear
Code Hash = 0x19204 // code Code Hash = 0x17404 // code
Codebase Hash = 0x19208 // codebase Codebase Hash = 0x17408 // codebase
Codetype Hash = 0x1a408 // codetype Codetype Hash = 0x18808 // codetype
Col Hash = 0x12803 // col Col Hash = 0x12c03 // col
Colgroup Hash = 0x1bb08 // colgroup Colgroup Hash = 0x1af08 // colgroup
Color Hash = 0x12805 // color Color Hash = 0x12c05 // color
Cols Hash = 0x1cf04 // cols Cols Hash = 0x1c904 // cols
Colspan Hash = 0x1cf07 // colspan Colspan Hash = 0x1c907 // colspan
Compact Hash = 0x1ec07 // compact Compact Hash = 0x1d707 // compact
Content Hash = 0x28407 // content Content Hash = 0x27b07 // content
Controls Hash = 0x20108 // controls Controls Hash = 0x1e708 // controls
Data Hash = 0x1f04 // data Data Hash = 0x1f04 // data
Datalist Hash = 0x1f08 // datalist Datalist Hash = 0x1f08 // datalist
Datatype Hash = 0x4d08 // datatype Datatype Hash = 0xac08 // datatype
Dd Hash = 0x5b02 // dd Dd Hash = 0x7902 // dd
Declare Hash = 0xb707 // declare Declare Hash = 0x5e07 // declare
Default Hash = 0x7f07 // default Default Hash = 0xeb07 // default
DefaultChecked Hash = 0x1730e // defaultChecked DefaultChecked Hash = 0x2270e // defaultChecked
DefaultMuted Hash = 0x7f0c // defaultMuted DefaultMuted Hash = 0xeb0c // defaultMuted
DefaultSelected Hash = 0x8a0f // defaultSelected DefaultSelected Hash = 0xf60f // defaultSelected
Defer Hash = 0x9805 // defer Defer Hash = 0x10405 // defer
Del Hash = 0x10503 // del Del Hash = 0x37903 // del
Details Hash = 0x15f07 // details Details Hash = 0x15707 // details
Dfn Hash = 0x16c03 // dfn Dfn Hash = 0x16403 // dfn
Dialog Hash = 0xa606 // dialog Dialog Hash = 0xc606 // dialog
Dir Hash = 0x7603 // dir Dir Hash = 0x18503 // dir
Disabled Hash = 0x18008 // disabled Disabled Hash = 0x19d08 // disabled
Div Hash = 0x18703 // div Div Hash = 0x1a403 // div
Dl Hash = 0x1b902 // dl Dl Hash = 0x1e502 // dl
Dt Hash = 0x23102 // dt Dt Hash = 0x21702 // dt
Em Hash = 0x4302 // em Em Hash = 0x4302 // em
Embed Hash = 0x4905 // embed Embed Hash = 0x37505 // embed
Enabled Hash = 0x26c07 // enabled Enabled Hash = 0x26307 // enabled
Enctype Hash = 0x1fa07 // enctype Enctype Hash = 0x2a207 // enctype
Face Hash = 0x5604 // face Face Hash = 0xb504 // face
Fieldset Hash = 0x21408 // fieldset Fieldset Hash = 0x1f308 // fieldset
Figcaption Hash = 0x21c0a // figcaption Figcaption Hash = 0x1fb0a // figcaption
Figure Hash = 0x22606 // figure Figure Hash = 0x20c06 // figure
Footer Hash = 0xdb06 // footer Font Hash = 0x17c04 // font
For Hash = 0x23b03 // for Footer Hash = 0xa006 // footer
Form Hash = 0x23b04 // form For Hash = 0x21903 // for
Formaction Hash = 0x23b0a // formaction Form Hash = 0x21904 // form
Formnovalidate Hash = 0x2450e // formnovalidate Formaction Hash = 0x2190a // formaction
Frame Hash = 0x28c05 // frame Formnovalidate Hash = 0x2350e // formnovalidate
Frameborder Hash = 0x28c0b // frameborder Frame Hash = 0x14505 // frame
H1 Hash = 0x2e002 // h1 Frameborder Hash = 0x2830b // frameborder
H2 Hash = 0x25302 // h2 Frameset Hash = 0x14508 // frameset
H3 Hash = 0x25502 // h3 H1 Hash = 0x2d002 // h1
H4 Hash = 0x25702 // h4 H2 Hash = 0x24302 // h2
H5 Hash = 0x25902 // h5 H3 Hash = 0x24502 // h3
H6 Hash = 0x25b02 // h6 H4 Hash = 0x24702 // h4
Head Hash = 0x2d204 // head H5 Hash = 0x24902 // h5
Header Hash = 0x2d206 // header H6 Hash = 0x24b02 // h6
Hgroup Hash = 0x25d06 // hgroup Head Hash = 0x2c204 // head
Hidden Hash = 0x26806 // hidden Header Hash = 0x2c206 // header
Hr Hash = 0x32d02 // hr Hgroup Hash = 0x24d06 // hgroup
Href Hash = 0x32d04 // href Hidden Hash = 0x25f06 // hidden
Hreflang Hash = 0x32d08 // hreflang Hr Hash = 0x16802 // hr
Html Hash = 0x27304 // html Href Hash = 0x16804 // href
Http_Equiv Hash = 0x2770a // http-equiv Hreflang Hash = 0x16808 // hreflang
Html Hash = 0x26a04 // html
Http_Equiv Hash = 0x26e0a // http-equiv
I Hash = 0x2401 // i I Hash = 0x2401 // i
Icon Hash = 0x28304 // icon Icon Hash = 0x27a04 // icon
Id Hash = 0xb602 // id Id Hash = 0x5d02 // id
Iframe Hash = 0x28b06 // iframe Iframe Hash = 0x28206 // iframe
Img Hash = 0x29703 // img Image Hash = 0x28e05 // image
Inert Hash = 0xf605 // inert Img Hash = 0x29303 // img
Inlist Hash = 0x29a06 // inlist Inert Hash = 0x5205 // inert
Input Hash = 0x2a405 // input Inlist Hash = 0x29606 // inlist
Ins Hash = 0x2a903 // ins Input Hash = 0x2a905 // input
Ismap Hash = 0x11205 // ismap Ins Hash = 0x2ae03 // ins
Itemscope Hash = 0xfc09 // itemscope Ismap Hash = 0x11605 // ismap
Kbd Hash = 0x7403 // kbd Itemscope Hash = 0xe209 // itemscope
Keygen Hash = 0x1f606 // keygen Kbd Hash = 0x18303 // kbd
Label Hash = 0xbe05 // label Keygen Hash = 0x29e06 // keygen
Lang Hash = 0x33104 // lang Label Hash = 0x6505 // label
Language Hash = 0x33108 // language Lang Hash = 0x16c04 // lang
Legend Hash = 0x2c506 // legend Language Hash = 0x16c08 // language
Legend Hash = 0x31706 // legend
Li Hash = 0x2302 // li Li Hash = 0x2302 // li
Link Hash = 0x7104 // link Link Hash = 0x3a504 // link
Longdesc Hash = 0xc208 // longdesc Longdesc Hash = 0x6908 // longdesc
Main Hash = 0xf404 // main Main Hash = 0x5004 // main
Manifest Hash = 0x2bc08 // manifest Manifest Hash = 0x11e08 // manifest
Map Hash = 0xee03 // map Map Hash = 0xd603 // map
Mark Hash = 0x2cb04 // mark Mark Hash = 0x2b404 // mark
Math Hash = 0x2cf04 // math Marquee Hash = 0x2b807 // marquee
Max Hash = 0x2d803 // max Math Hash = 0x2bf04 // math
Maxlength Hash = 0x2d809 // maxlength Max Hash = 0x2c803 // max
Media Hash = 0xa405 // media Maxlength Hash = 0x2c809 // maxlength
Menu Hash = 0x12204 // menu Media Hash = 0xc405 // media
Meta Hash = 0x2e204 // meta Menu Hash = 0xde04 // menu
Meter Hash = 0x2f705 // meter Menuitem Hash = 0xde08 // menuitem
Method Hash = 0x2fc06 // method Meta Hash = 0x2d204 // meta
Multiple Hash = 0x30208 // multiple Meter Hash = 0x30605 // meter
Muted Hash = 0x30a05 // muted Method Hash = 0x30b06 // method
Name Hash = 0xa204 // name Multiple Hash = 0x31108 // multiple
Nav Hash = 0x32403 // nav Muted Hash = 0x31d05 // muted
Nohref Hash = 0x32b06 // nohref Name Hash = 0xc204 // name
Noresize Hash = 0x13608 // noresize Nav Hash = 0x35803 // nav
Noscript Hash = 0x14d08 // noscript Nobr Hash = 0x35f04 // nobr
Noshade Hash = 0x16e07 // noshade Noembed Hash = 0x37307 // noembed
Novalidate Hash = 0x2490a // novalidate Noframes Hash = 0x14308 // noframes
Nowrap Hash = 0x1d506 // nowrap Nohref Hash = 0x16606 // nohref
Object Hash = 0xd506 // object Noresize Hash = 0x1cf08 // noresize
Ol Hash = 0xcb02 // ol Noscript Hash = 0x20408 // noscript
Open Hash = 0x32104 // open Noshade Hash = 0x22207 // noshade
Optgroup Hash = 0x35608 // optgroup Novalidate Hash = 0x2390a // novalidate
Option Hash = 0x30f06 // option Nowrap Hash = 0x2ef06 // nowrap
Object Hash = 0x9a06 // object
Ol Hash = 0x7202 // ol
Open Hash = 0x35504 // open
Optgroup Hash = 0x39908 // optgroup
Option Hash = 0x32206 // option
Output Hash = 0x206 // output Output Hash = 0x206 // output
P Hash = 0x501 // p P Hash = 0x501 // p
Param Hash = 0xf005 // param Param Hash = 0x11a05 // param
Pauseonexit Hash = 0x1160b // pauseonexit Pauseonexit Hash = 0x1b60b // pauseonexit
Picture Hash = 0x1c207 // picture Picture Hash = 0x25207 // picture
Plaintext Hash = 0x1da09 // plaintext Plaintext Hash = 0x2f409 // plaintext
Poster Hash = 0x26206 // poster Portal Hash = 0x3a006 // portal
Pre Hash = 0x35d03 // pre Poster Hash = 0x38c06 // poster
Prefix Hash = 0x35d06 // prefix Pre Hash = 0x38503 // pre
Profile Hash = 0x36407 // profile Prefix Hash = 0x38506 // prefix
Progress Hash = 0x34208 // progress Profile Hash = 0x32807 // profile
Property Hash = 0x31508 // property Progress Hash = 0x32f08 // progress
Q Hash = 0x14301 // q Property Hash = 0x33e08 // property
Q Hash = 0x13901 // q
Rb Hash = 0x2f02 // rb Rb Hash = 0x2f02 // rb
Readonly Hash = 0x1e408 // readonly Readonly Hash = 0x2fe08 // readonly
Rel Hash = 0xbc03 // rel Rel Hash = 0x6303 // rel
Required Hash = 0x22a08 // required Required Hash = 0x21008 // required
Resource Hash = 0x1c708 // resource Resource Hash = 0x25708 // resource
Rev Hash = 0x7803 // rev Rev Hash = 0xa503 // rev
Reversed Hash = 0x7808 // reversed Reversed Hash = 0xa508 // reversed
Rows Hash = 0x9c04 // rows Rows Hash = 0xbc04 // rows
Rowspan Hash = 0x9c07 // rowspan Rowspan Hash = 0xbc07 // rowspan
Rp Hash = 0x6a02 // rp Rp Hash = 0x8802 // rp
Rt Hash = 0x2802 // rt Rt Hash = 0x2802 // rt
Rtc Hash = 0xf903 // rtc Rtc Hash = 0x5503 // rtc
Ruby Hash = 0xe004 // ruby Ruby Hash = 0x10804 // ruby
Rules Hash = 0x12c05 // rules Rules Hash = 0x36205 // rules
S Hash = 0x1c01 // s S Hash = 0x1c01 // s
Samp Hash = 0x6004 // samp Samp Hash = 0x7e04 // samp
Scope Hash = 0x10005 // scope Scope Hash = 0xe605 // scope
Scoped Hash = 0x10006 // scoped Scoped Hash = 0xe606 // scoped
Script Hash = 0x14f06 // script Script Hash = 0x20606 // script
Scrolling Hash = 0xc809 // scrolling Scrolling Hash = 0x6f09 // scrolling
Seamless Hash = 0x19808 // seamless Seamless Hash = 0x36608 // seamless
Section Hash = 0x13007 // section Section Hash = 0x36d07 // section
Select Hash = 0x16506 // select Select Hash = 0x15d06 // select
Selected Hash = 0x16508 // selected Selected Hash = 0x15d08 // selected
Shape Hash = 0x19f05 // shape Shape Hash = 0x1ee05 // shape
Size Hash = 0x13a04 // size Size Hash = 0x1d304 // size
Slot Hash = 0x20804 // slot Slot Hash = 0x2b004 // slot
Small Hash = 0x2ab05 // small Small Hash = 0x2df05 // small
Sortable Hash = 0x2ef08 // sortable Sortable Hash = 0x33608 // sortable
Source Hash = 0x1c906 // source Source Hash = 0x25906 // source
Span Hash = 0x9f04 // span Span Hash = 0xbf04 // span
Src Hash = 0x34903 // src Src Hash = 0x34603 // src
Srcset Hash = 0x34906 // srcset Srcset Hash = 0x34606 // srcset
Start Hash = 0x2505 // start Start Hash = 0x2505 // start
Strong Hash = 0x29e06 // strong Strike Hash = 0x29a06 // strike
Style Hash = 0x2c205 // style Strong Hash = 0x12406 // strong
Sub Hash = 0x31d03 // sub Style Hash = 0x34c05 // style
Summary Hash = 0x33907 // summary Sub Hash = 0x35103 // sub
Sup Hash = 0x34003 // sup Summary Hash = 0x37c07 // summary
Svg Hash = 0x34f03 // svg Sup Hash = 0x38303 // sup
Tabindex Hash = 0x2e408 // tabindex Svg Hash = 0x39203 // svg
Table Hash = 0x2f205 // table Tabindex Hash = 0x2d408 // tabindex
Table Hash = 0x33905 // table
Target Hash = 0x706 // target Target Hash = 0x706 // target
Tbody Hash = 0xc05 // tbody Tbody Hash = 0xc05 // tbody
Td Hash = 0x1e02 // td Td Hash = 0x1e02 // td
Template Hash = 0x4208 // template Template Hash = 0x4208 // template
Text Hash = 0x1df04 // text Text Hash = 0x2f904 // text
Textarea Hash = 0x1df08 // textarea Textarea Hash = 0x2f908 // textarea
Tfoot Hash = 0xda05 // tfoot Tfoot Hash = 0x9f05 // tfoot
Th Hash = 0x2d102 // th Th Hash = 0x2c102 // th
Thead Hash = 0x2d105 // thead Thead Hash = 0x2c105 // thead
Time Hash = 0x12004 // time Time Hash = 0xdc04 // time
Title Hash = 0x15405 // title Title Hash = 0x14c05 // title
Tr Hash = 0x1f202 // tr Tr Hash = 0x12502 // tr
Track Hash = 0x1f205 // track Track Hash = 0x17f05 // track
Translate Hash = 0x20b09 // translate Translate Hash = 0x1c009 // translate
Truespeed Hash = 0x23209 // truespeed Truespeed Hash = 0x1dd09 // truespeed
Type Hash = 0x5104 // type Tt Hash = 0x14002 // tt
Typemustmatch Hash = 0x1a80d // typemustmatch Type Hash = 0xb004 // type
Typeof Hash = 0x5106 // typeof Typemustmatch Hash = 0x18c0d // typemustmatch
Typeof Hash = 0xb006 // typeof
U Hash = 0x301 // u U Hash = 0x301 // u
Ul Hash = 0x8302 // ul Ul Hash = 0xef02 // ul
Undeterminate Hash = 0x370d // undeterminate Undeterminate Hash = 0x370d // undeterminate
Usemap Hash = 0xeb06 // usemap Usemap Hash = 0xd306 // usemap
Valign Hash = 0x32606 // valign Valign Hash = 0x35a06 // valign
Value Hash = 0x18905 // value Value Hash = 0x1a605 // value
Valuetype Hash = 0x18909 // valuetype Valuetype Hash = 0x1a609 // valuetype
Var Hash = 0x28003 // var Var Hash = 0x27703 // var
Video Hash = 0x35205 // video Video Hash = 0x39505 // video
Visible Hash = 0x36b07 // visible Visible Hash = 0x3a907 // visible
Vlink Hash = 0x37205 // vlink Vlink Hash = 0x3b005 // vlink
Vocab Hash = 0x37705 // vocab Vocab Hash = 0x3b505 // vocab
Wbr Hash = 0x37e03 // wbr Wbr Hash = 0x3bc03 // wbr
Xmlns Hash = 0x2eb05 // xmlns Xmlns Hash = 0x2db05 // xmlns
Xmp Hash = 0x36203 // xmp Xmp Hash = 0x38a03 // xmp
) )
// String returns the hash' name. // String returns the hash' name.
@ -288,256 +304,273 @@ func ToHash(s []byte) Hash {
return 0 return 0
} }
const _Hash_hash0 = 0x9acb0442 const _Hash_hash0 = 0x67ac9bb5
const _Hash_maxLen = 15 const _Hash_maxLen = 15
const _Hash_text = "aboutputargetbodyaccept-charsetdatalistarticlearbackgroundet" + const _Hash_text = "aboutputargetbodyaccept-charsetdatalistarticlearbackgroundet" +
"erminatemplatembedatatypeofaceaddressamp-boilerplatealinkbdi" + "erminatemplateacronymainertcanvasideclarelabelongdescrolling" +
"reversedefaultMutedefaultSelectedeferowspanamedialogasyncanv" + "addressamp-boilerplateasynciteaudiobjectfootereversedatatype" +
"asideclarelabelongdescrollingaudiobjectfooterubyautofocusema" + "ofacenterowspanamedialogautofocusemappletimenuitemscopedefau" +
"paramainertcitemscopedelautoplayaxismapauseonexitimenubgcolo" + "ltMutedefaultSelectedeferubyautoplayaxismaparamanifestrongbg" +
"rulesectionoresizeblockquotebuttonoscriptitleclassidetailsel" + "colorbigblockquotebuttonoframesetitleclassidetailselectedfno" +
"ectedfnoshadefaultCheckedisabledivaluetypecodebaseamlesshape" + "hreflanguagecodebasefontrackbdircodetypemustmatcheckedisable" +
"codetypemustmatcheckedlcolgroupicturesourcecolspanowraplaint" + "divaluetypecolgroupauseonexitranslatecolspanoresizecompactru" +
"extareadonlycompactrackeygenctypecontrolslotranslatefieldset" + "espeedlcontrolshapefieldsetfigcaptionoscriptfigurequiredtfor" +
"figcaptionfigurequiredtruespeedformactionformnovalidateh2h3h" + "mactionoshadefaultCheckedformnovalidateh2h3h4h5h6hgroupictur" +
"4h5h6hgrouposterhiddenabledhtmlhttp-equivaricontentiframebor" + "esourcehiddenabledhtmlhttp-equivaricontentiframeborderimagei" +
"derimginlistronginputinsmallowfullscreenmanifestylegendmarkm" + "mginlistrikeygenctypeinputinslotmarkmarqueematheadermaxlengt" +
"atheadermaxlength1metabindexmlnsortablemetermethodmultiplemu" + "h1metabindexmlnsmallowfullscreenowraplaintextareadonlymeterm" +
"tedoptionpropertysubdopenavalignohreflanguagesummarysuprogre" + "ethodmultiplegendmutedoptionprofileprogressortablepropertysr" +
"ssrcsetsvgvideoptgrouprefixmprofilevisiblevlinkvocabbrwbr" "csetstylesubdopenavalignobruleseamlessectionoembedelsummarys" +
"uprefixmpostersvgvideoptgrouportalinkvisiblevlinkvocabbrwbr"
var _Hash_table = [1 << 9]Hash{ var _Hash_table = [1 << 9]Hash{
0x0: 0x1df08, // textarea 0x1: 0x13e06, // button
0x4: 0x32d02, // hr 0x3: 0x2a207, // enctype
0x8: 0x1c207, // picture 0x4: 0x32206, // option
0xb: 0x18905, // value 0x5: 0x1fb0a, // figcaption
0xf: 0x2e408, // tabindex 0x7: 0x2ae03, // ins
0x12: 0x15905, // class 0x9: 0x9605, // audio
0x15: 0x37e03, // wbr 0xb: 0x2830b, // frameborder
0x18: 0x1a80d, // typemustmatch 0xd: 0x2190a, // formaction
0x1a: 0x1b902, // dl 0xe: 0x5, // about
0x1d: 0xf903, // rtc 0xf: 0x34606, // srcset
0x1e: 0x25702, // h4 0x10: 0x1dd09, // truespeed
0x22: 0x2ef08, // sortable 0x11: 0xeb0c, // defaultMuted
0x24: 0x4208, // template 0x13: 0xa006, // footer
0x25: 0x28c0b, // frameborder 0x15: 0x19d08, // disabled
0x28: 0x37a04, // abbr 0x16: 0x26e0a, // http-equiv
0x29: 0x28b06, // iframe 0x19: 0x3a504, // link
0x2a: 0x610f, // amp-boilerplate 0x1a: 0x29606, // inlist
0x2c: 0x1e408, // readonly 0x1d: 0x10804, // ruby
0x30: 0x23f06, // action 0x21: 0x2a905, // input
0x33: 0x28c05, // frame 0x22: 0x35803, // nav
0x35: 0x12c05, // rules 0x25: 0x7902, // dd
0x36: 0x30208, // multiple 0x26: 0x2350e, // formnovalidate
0x38: 0x31f03, // bdo 0x28: 0x16804, // href
0x39: 0x1d506, // nowrap 0x29: 0x24702, // h4
0x3e: 0x21408, // fieldset 0x2b: 0x10405, // defer
0x3f: 0x7503, // bdi 0x2d: 0x1f308, // fieldset
0x46: 0x7f0c, // defaultMuted 0x2e: 0xeb07, // default
0x49: 0x35205, // video 0x34: 0x2fd04, // area
0x4c: 0x19808, // seamless 0x36: 0xb006, // typeof
0x4d: 0x13608, // noresize 0x37: 0x37307, // noembed
0x4f: 0xb602, // id 0x38: 0x5e07, // declare
0x51: 0x25d06, // hgroup 0x3a: 0x4a07, // acronym
0x52: 0x23102, // dt 0x3b: 0xc05, // tbody
0x55: 0x12805, // color 0x3e: 0x15107, // classid
0x56: 0x34003, // sup 0x41: 0x9a06, // object
0x59: 0x370d, // undeterminate 0x43: 0x16403, // dfn
0x5a: 0x35608, // optgroup 0x44: 0xef02, // ul
0x5b: 0x2d206, // header 0x45: 0x16c04, // lang
0x5c: 0xb405, // aside 0x47: 0x16606, // nohref
0x5f: 0x10005, // scope 0x49: 0x2c803, // max
0x60: 0x101, // b 0x4a: 0x6505, // label
0x61: 0xcb02, // ol 0x4c: 0x1d304, // size
0x64: 0x32b06, // nohref 0x4d: 0xe606, // scoped
0x65: 0x1da09, // plaintext 0x4f: 0x15105, // class
0x66: 0x20804, // slot 0x50: 0x11404, // axis
0x67: 0x11004, // axis 0x54: 0xbf04, // span
0x68: 0x12803, // col 0x56: 0x19707, // checked
0x69: 0x32606, // valign 0x59: 0x38506, // prefix
0x6c: 0x2d105, // thead 0x5b: 0x4208, // template
0x70: 0x34906, // srcset 0x5c: 0x370d, // undeterminate
0x71: 0x26806, // hidden 0x5d: 0xc606, // dialog
0x76: 0x1bb08, // colgroup 0x5e: 0x6908, // longdesc
0x78: 0x34f03, // svg 0x60: 0x21903, // for
0x7b: 0x2cb04, // mark 0x61: 0x2c102, // th
0x7e: 0x33104, // lang 0x64: 0x15d08, // selected
0x81: 0x1cf04, // cols 0x65: 0x35103, // sub
0x86: 0x5a07, // address 0x6a: 0xd306, // usemap
0x8b: 0xf404, // main 0x6e: 0x24d06, // hgroup
0x8c: 0x4302, // em 0x6f: 0x38303, // sup
0x8f: 0x32d08, // hreflang 0x70: 0x2b404, // mark
0x93: 0x1b307, // checked 0x71: 0x28206, // iframe
0x94: 0x25902, // h5 0x72: 0x30605, // meter
0x95: 0x301, // u 0x74: 0x21008, // required
0x96: 0x32705, // align 0x75: 0x1f04, // data
0x97: 0x14301, // q 0x78: 0x14308, // noframes
0x99: 0xd506, // object 0x83: 0x7807, // address
0x9b: 0x28407, // content 0x88: 0x10c08, // autoplay
0x9d: 0xc809, // scrolling 0x8a: 0x28e05, // image
0x9f: 0x36407, // profile 0x8b: 0x16c08, // language
0xa0: 0x34903, // src 0x8e: 0x2f904, // text
0xa1: 0xda05, // tfoot 0x8f: 0x16802, // hr
0xa3: 0x2f705, // meter 0x90: 0x5d02, // id
0xa4: 0x37705, // vocab 0x92: 0x31108, // multiple
0xa6: 0xd04, // body 0x94: 0x16808, // hreflang
0xa8: 0x19204, // code 0x95: 0x2db05, // xmlns
0xac: 0x20108, // controls 0x96: 0x24902, // h5
0xb0: 0x2ab05, // small 0x98: 0x25207, // picture
0xb1: 0x18008, // disabled 0x99: 0x1106, // accept
0xb5: 0x5604, // face 0x9a: 0x1a609, // valuetype
0xb6: 0x501, // p 0x9b: 0x3a006, // portal
0xb9: 0x2302, // li 0x9d: 0xac08, // datatype
0xbb: 0xe409, // autofocus 0x9e: 0x18403, // bdi
0xbf: 0x27304, // html 0xa0: 0x27a04, // icon
0xc2: 0x4d08, // datatype 0xa2: 0xa503, // rev
0xc6: 0x35d06, // prefix 0xa5: 0x25708, // resource
0xcb: 0x35d03, // pre 0xa8: 0x35504, // open
0xcc: 0x1106, // accept 0xac: 0x4302, // em
0xd1: 0x23b03, // for 0xae: 0x1340a, // blockquote
0xd5: 0x29e06, // strong 0xb0: 0x2f409, // plaintext
0xd6: 0x9c07, // rowspan 0xb1: 0x2d204, // meta
0xd7: 0x25502, // h3 0xb2: 0x1c01, // s
0xd8: 0x2cf04, // math 0xb4: 0xdc04, // time
0xde: 0x16e07, // noshade 0xb5: 0x1fe07, // caption
0xdf: 0x19f05, // shape 0xb8: 0x33e08, // property
0xe1: 0x10006, // scoped 0xb9: 0x1, // a
0xe3: 0x706, // target 0xbb: 0x2b807, // marquee
0xe6: 0x21c0a, // figcaption 0xbc: 0x3b505, // vocab
0xe9: 0x1df04, // text 0xbd: 0x1e502, // dl
0xea: 0x1c708, // resource 0xbf: 0xbc07, // rowspan
0xec: 0xee03, // map 0xc4: 0x18503, // dir
0xf0: 0x29a06, // inlist 0xc5: 0x39908, // optgroup
0xf1: 0x16506, // select 0xcc: 0x38c06, // poster
0xf2: 0x1f606, // keygen 0xcd: 0x24502, // h3
0xf3: 0x5106, // typeof 0xce: 0x3b804, // abbr
0xf6: 0xb006, // canvas 0xd1: 0x17408, // codebase
0xf7: 0x30f06, // option 0xd2: 0x27b07, // content
0xf8: 0xbe05, // label 0xd4: 0x7e04, // samp
0xf9: 0xbc03, // rel 0xd6: 0xc204, // name
0xfb: 0x1f04, // data 0xd9: 0x14c05, // title
0xfd: 0x6004, // samp 0xda: 0x1a605, // value
0x100: 0x110e, // accept-charset 0xdd: 0xb004, // type
0x101: 0xeb06, // usemap 0xde: 0x35f04, // nobr
0x103: 0x2bc08, // manifest 0xe0: 0x17c04, // font
0x109: 0xa204, // name 0xe1: 0xd603, // map
0x10a: 0x14806, // button 0xe2: 0x2d002, // h1
0x10b: 0x2b05, // clear 0xe3: 0x22207, // noshade
0x10e: 0x33907, // summary 0xe4: 0x6303, // rel
0x10f: 0x2e204, // meta 0xe5: 0x14002, // tt
0x110: 0x33108, // language 0xe7: 0xde04, // menu
0x112: 0x300a, // background 0xeb: 0x2f908, // textarea
0x113: 0x2707, // article 0xee: 0x35b05, // align
0x116: 0x23b0a, // formaction 0xf1: 0x29303, // img
0x119: 0x1, // a 0xf2: 0x35a06, // valign
0x11b: 0x5, // about 0xf3: 0x2c204, // head
0x11c: 0xfc09, // itemscope 0xf4: 0x12a07, // bgcolor
0x11e: 0x14d08, // noscript 0xf5: 0x5004, // main
0x11f: 0x15907, // classid 0xf6: 0x2302, // li
0x120: 0x36203, // xmp 0xf7: 0x5205, // inert
0x121: 0x19604, // base 0xfa: 0x5706, // canvas
0x123: 0x1c01, // s 0xfb: 0xe605, // scope
0x124: 0x36b07, // visible 0xfc: 0x15d06, // select
0x126: 0x37b02, // bb 0x100: 0xa508, // reversed
0x127: 0x9c04, // rows 0x101: 0x20408, // noscript
0x12d: 0x2450e, // formnovalidate 0x102: 0x37c07, // summary
0x131: 0x1f205, // track 0x103: 0x24b02, // h6
0x135: 0x18703, // div 0x106: 0x17404, // code
0x136: 0xac05, // async 0x107: 0x14508, // frameset
0x137: 0x31508, // property 0x10a: 0x12406, // strong
0x13a: 0x16c03, // dfn 0x10d: 0x300a, // background
0x13e: 0xf605, // inert 0x10e: 0x18303, // kbd
0x142: 0x10503, // del 0x114: 0x31706, // legend
0x144: 0x25302, // h2 0x116: 0x32f08, // progress
0x147: 0x2c205, // style 0x118: 0x2d408, // tabindex
0x149: 0x29703, // img 0x119: 0x34603, // src
0x14a: 0xc05, // tbody 0x11c: 0x39505, // video
0x14b: 0x7603, // dir 0x11f: 0x29a06, // strike
0x14c: 0x2eb05, // xmlns 0x121: 0xd706, // applet
0x14e: 0x1f08, // datalist 0x123: 0x2802, // rt
0x14f: 0x32d04, // href 0x125: 0x20606, // script
0x150: 0x1f202, // tr 0x128: 0xbc04, // rows
0x151: 0x13e0a, // blockquote 0x129: 0x2707, // article
0x152: 0x18909, // valuetype 0x12e: 0x9204, // cite
0x155: 0xdb06, // footer 0x131: 0x18c0d, // typemustmatch
0x157: 0x14f06, // script 0x133: 0x17f05, // track
0x158: 0x1cf07, // colspan 0x135: 0x3b902, // bb
0x15d: 0x1730e, // defaultChecked 0x136: 0x1ee05, // shape
0x15f: 0x2490a, // novalidate 0x137: 0x5b05, // aside
0x164: 0x1a408, // codetype 0x138: 0x1b60b, // pauseonexit
0x165: 0x2c506, // legend 0x13c: 0x38503, // pre
0x16b: 0x1160b, // pauseonexit 0x140: 0x301, // u
0x16c: 0x21f07, // caption 0x149: 0x1a403, // div
0x16f: 0x26c07, // enabled 0x14c: 0x3a405, // alink
0x173: 0x26206, // poster 0x14e: 0x27703, // var
0x175: 0x30a05, // muted 0x14f: 0x21d06, // action
0x176: 0x11205, // ismap 0x152: 0x2b05, // clear
0x178: 0x2a903, // ins 0x154: 0x2401, // i
0x17a: 0xe004, // ruby 0x155: 0x21702, // dt
0x17b: 0x37c02, // br 0x156: 0x36608, // seamless
0x17c: 0x8a0f, // defaultSelected 0x157: 0x21904, // form
0x17d: 0x7403, // kbd 0x15b: 0x15707, // details
0x17f: 0x1c906, // source 0x15f: 0x8e05, // async
0x182: 0x9f04, // span 0x160: 0x26a04, // html
0x184: 0x2d803, // max 0x161: 0x33608, // sortable
0x18a: 0x5b02, // dd 0x165: 0x2f02, // rb
0x18b: 0x13a04, // size 0x167: 0x2e10f, // allowfullscreen
0x18c: 0xa405, // media 0x168: 0x17804, // base
0x18d: 0x19208, // codebase 0x169: 0x25f06, // hidden
0x18f: 0x4905, // embed 0x16e: 0x2ef06, // nowrap
0x192: 0x5104, // type 0x16f: 0x2505, // start
0x193: 0xf005, // param 0x170: 0x14505, // frame
0x194: 0x25b02, // h6 0x171: 0x1f08, // datalist
0x197: 0x28304, // icon 0x173: 0x12502, // tr
0x198: 0x12607, // bgcolor 0x174: 0x30b06, // method
0x199: 0x2ad0f, // allowfullscreen 0x175: 0x101, // b
0x19a: 0x12004, // time 0x176: 0x1c904, // cols
0x19b: 0x7803, // rev 0x178: 0x110e, // accept-charset
0x19d: 0x34208, // progress 0x17a: 0x36205, // rules
0x19e: 0x22606, // figure 0x17b: 0x7f0f, // amp-boilerplate
0x1a0: 0x6a02, // rp 0x17f: 0x2270e, // defaultChecked
0x1a2: 0xa606, // dialog 0x180: 0x32807, // profile
0x1a4: 0x2802, // rt 0x181: 0x2b004, // slot
0x1a7: 0x1e304, // area 0x182: 0x11a05, // param
0x1a8: 0x7808, // reversed 0x185: 0x1c907, // colspan
0x1aa: 0x32104, // open 0x186: 0x34c05, // style
0x1ac: 0x2d204, // head 0x187: 0x1e02, // td
0x1ad: 0x7005, // alink 0x188: 0x12c05, // color
0x1af: 0x28003, // var 0x18c: 0x13901, // q
0x1b0: 0x15f07, // details 0x18d: 0x3b005, // vlink
0x1b1: 0x2401, // i 0x18e: 0x39203, // svg
0x1b3: 0x1e02, // td 0x18f: 0x33905, // table
0x1b4: 0xb707, // declare 0x190: 0x29e06, // keygen
0x1b5: 0x8302, // ul 0x192: 0x20c06, // figure
0x1ba: 0x2fc06, // method 0x193: 0x3a907, // visible
0x1bd: 0x13007, // section 0x195: 0x17808, // basefont
0x1be: 0x22a08, // required 0x196: 0x8802, // rp
0x1c2: 0x9805, // defer 0x197: 0xf60f, // defaultSelected
0x1c3: 0x37205, // vlink 0x198: 0x1af08, // colgroup
0x1c4: 0x15405, // title 0x19a: 0x3bc03, // wbr
0x1c5: 0x2770a, // http-equiv 0x19c: 0x36d07, // section
0x1c6: 0x1fa07, // enctype 0x19d: 0x25906, // source
0x1c7: 0x1ec07, // compact 0x19f: 0x2bf04, // math
0x1c8: 0x2d809, // maxlength 0x1a1: 0x2fe08, // readonly
0x1c9: 0x16508, // selected 0x1a7: 0x1e708, // controls
0x1cc: 0xd105, // audio 0x1a9: 0xde08, // menuitem
0x1cd: 0xc208, // longdesc 0x1ad: 0x206, // output
0x1d1: 0xfb04, // cite 0x1b0: 0x2c809, // maxlength
0x1da: 0x2505, // start 0x1b2: 0xe209, // itemscope
0x1de: 0x2d102, // th 0x1b9: 0x501, // p
0x1df: 0x10808, // autoplay 0x1bc: 0x2df05, // small
0x1e2: 0x7104, // link 0x1bd: 0x36102, // br
0x1e3: 0x206, // output 0x1c0: 0x5503, // rtc
0x1e5: 0x12204, // menu 0x1c1: 0x1c009, // translate
0x1e6: 0x2a405, // input 0x1c4: 0x35303, // bdo
0x1eb: 0x32403, // nav 0x1c5: 0xd04, // body
0x1ec: 0x31d03, // sub 0x1c8: 0xb706, // center
0x1ee: 0x1807, // charset 0x1c9: 0x2c105, // thead
0x1ef: 0x7f07, // default 0x1ca: 0xcc09, // autofocus
0x1f3: 0x2f205, // table 0x1cc: 0xb504, // face
0x1f4: 0x23b04, // form 0x1cd: 0x24302, // h2
0x1f5: 0x23209, // truespeed 0x1ce: 0x11e08, // manifest
0x1f6: 0x2f02, // rb 0x1d0: 0x706, // target
0x1fb: 0x20b09, // translate 0x1d1: 0x11605, // ismap
0x1fd: 0x2e002, // h1 0x1d3: 0xc405, // media
0x1d7: 0x13103, // big
0x1da: 0x37903, // del
0x1dc: 0x6f09, // scrolling
0x1de: 0x37505, // embed
0x1e0: 0x31d05, // muted
0x1e4: 0x2390a, // novalidate
0x1e6: 0x7202, // ol
0x1eb: 0x9f05, // tfoot
0x1ec: 0x18808, // codetype
0x1ee: 0x26307, // enabled
0x1f0: 0x2c206, // header
0x1f1: 0x1cf08, // noresize
0x1f6: 0x1d707, // compact
0x1f9: 0x12c03, // col
0x1fa: 0x38a03, // xmp
0x1fb: 0x1807, // charset
} }

View file

@ -129,7 +129,7 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
var params map[string]string var params map[string]string
if rawTagHash == Iframe { if rawTagHash == Iframe {
mimetype = htmlMimeBytes mimetype = htmlMimeBytes
} else if len(rawTagMediatype) > 0 { } else if 0 < len(rawTagMediatype) {
mimetype, params = parse.Mediatype(rawTagMediatype) mimetype, params = parse.Mediatype(rawTagMediatype)
} else if rawTagHash == Script { } else if rawTagHash == Script {
mimetype = jsMimeBytes mimetype = jsMimeBytes
@ -169,20 +169,15 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
t.Data = t.Data[:len(t.Data)-1] t.Data = t.Data[:len(t.Data)-1]
omitSpace = false omitSpace = false
break break
} else if next.TokenType == html.TextToken { } else if next.TokenType == html.TextToken && !parse.IsAllWhitespace(next.Data) {
// this only happens when a comment, doctype or phrasing end tag (only for !o.KeepWhitespace) was in between // stop looking when text encountered
// remove if the text token starts with a whitespace
if len(next.Data) > 0 && parse.IsWhitespace(next.Data[0]) {
t.Data = t.Data[:len(t.Data)-1]
omitSpace = false
}
break break
} else if next.TokenType == html.StartTagToken || next.TokenType == html.EndTagToken { } else if next.TokenType == html.StartTagToken || next.TokenType == html.EndTagToken {
if o.KeepWhitespace { if o.KeepWhitespace {
break break
} }
// remove when followed up by a block tag // remove when followed by a block tag
if next.Traits&nonPhrasingTag != 0 { if next.Traits&blockTag != 0 {
t.Data = t.Data[:len(t.Data)-1] t.Data = t.Data[:len(t.Data)-1]
omitSpace = false omitSpace = false
break break
@ -271,14 +266,14 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
} }
} }
if t.Traits&nonPhrasingTag != 0 {
omitSpace = true // omit spaces after block elements
} else if o.KeepWhitespace || t.Traits&objectTag != 0 {
omitSpace = false
}
if !omitEndTag { if !omitEndTag {
if len(t.Data) > 3+len(t.Text) { if o.KeepWhitespace || t.Traits&objectTag != 0 {
omitSpace = false
} else if t.Traits&blockTag != 0 {
omitSpace = true // omit spaces after block elements
}
if 3+len(t.Text) < len(t.Data) {
t.Data[2+len(t.Text)] = '>' t.Data[2+len(t.Text)] = '>'
t.Data = t.Data[:3+len(t.Text)] t.Data = t.Data[:3+len(t.Text)]
} }
@ -296,7 +291,7 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
if o.KeepWhitespace || t.Traits&objectTag != 0 { if o.KeepWhitespace || t.Traits&objectTag != 0 {
omitSpace = false omitSpace = false
} else if t.Traits&nonPhrasingTag != 0 { } else if t.Traits&blockTag != 0 {
omitSpace = true // omit spaces after block elements omitSpace = true // omit spaces after block elements
} }
@ -327,7 +322,7 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
for i := 0; i < len(content.AttrVal); i++ { for i := 0; i < len(content.AttrVal); i++ {
if content.AttrVal[i] == '=' && i+2 < len(content.AttrVal) { if content.AttrVal[i] == '=' && i+2 < len(content.AttrVal) {
i++ i++
if n := parse.Number(content.AttrVal[i:]); n > 0 { if n := parse.Number(content.AttrVal[i:]); 0 < n {
minNum := minify.Number(content.AttrVal[i:i+n], -1) minNum := minify.Number(content.AttrVal[i:i+n], -1)
if len(minNum) < n { if len(minNum) < n {
copy(content.AttrVal[i:i+len(minNum)], minNum) copy(content.AttrVal[i:i+len(minNum)], minNum)
@ -434,10 +429,10 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
if len(val) == 0 { if len(val) == 0 {
continue continue
} }
} else if len(attr.Text) > 2 && attr.Text[0] == 'o' && attr.Text[1] == 'n' { } else if 2 < len(attr.Text) && attr.Text[0] == 'o' && attr.Text[1] == 'n' {
// JS minifier for attribute inline code // JS minifier for attribute inline code
val = parse.TrimWhitespace(val) val = parse.TrimWhitespace(val)
if len(val) >= 11 && parse.EqualFold(val[:11], jsSchemeBytes) { if 11 <= len(val) && parse.EqualFold(val[:11], jsSchemeBytes) {
val = val[11:] val = val[11:]
} }
attrMinifyBuffer.Reset() attrMinifyBuffer.Reset()
@ -475,7 +470,7 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
w.Write(spaceBytes) w.Write(spaceBytes)
w.Write(attr.Text) w.Write(attr.Text)
if len(val) > 0 && attr.Traits&booleanAttr == 0 { if 0 < len(val) && attr.Traits&booleanAttr == 0 {
w.Write(isBytes) w.Write(isBytes)
// use double quotes for RDFa attributes // use double quotes for RDFa attributes
@ -504,7 +499,7 @@ func (o *Minifier) Minify(m *minify.M, w io.Writer, r io.Reader, _ map[string]st
} }
// keep space after phrasing tags (<i>, <span>, ...) FontAwesome etc. // keep space after phrasing tags (<i>, <span>, ...) FontAwesome etc.
if t.TokenType == html.StartTagToken && t.Traits&nonPhrasingTag == 0 { if t.TokenType == html.StartTagToken && t.Traits == normalTag {
if next := tb.Peek(0); next.Hash == t.Hash && next.TokenType == html.EndTagToken { if next := tb.Peek(0); next.Hash == t.Hash && next.TokenType == html.EndTagToken {
omitSpace = false omitSpace = false
} }

View file

@ -3,12 +3,12 @@
type traits uint16 type traits uint16
const ( const (
normalTag traits = 1 << iota normalTag traits = 1 << iota
rawTag // raw tags need special processing for their content rawTag // raw tags need special processing for their content
nonPhrasingTag // non-phrasing elements are unaffected by whitespace, remove spaces around these tags blockTag // remove spaces around these tags
objectTag // content tags with a few exclusions, keep spaces after these open/close tags objectTag // keep spaces after these open/close tags
omitPTag // omit p end tag if it is followed by this start tag 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 keepPTag // keep p end tag if it is followed by this end tag
) )
const ( const (
@ -21,54 +21,54 @@
var tagMap = map[Hash]traits{ var tagMap = map[Hash]traits{
A: keepPTag, A: keepPTag,
Abbr: normalTag, Abbr: normalTag,
Address: nonPhrasingTag | omitPTag, Address: blockTag | omitPTag,
Area: normalTag, Area: normalTag,
Article: nonPhrasingTag | omitPTag, Article: blockTag | omitPTag,
Aside: nonPhrasingTag | omitPTag, Aside: blockTag | omitPTag,
Audio: keepPTag, Audio: keepPTag,
B: normalTag, B: normalTag,
Base: normalTag, Base: normalTag,
Bb: normalTag, Bb: normalTag,
Bdi: normalTag, Bdi: normalTag,
Bdo: normalTag, Bdo: normalTag,
Blockquote: nonPhrasingTag | omitPTag, Blockquote: blockTag | omitPTag,
Body: nonPhrasingTag, Body: normalTag,
Br: nonPhrasingTag, Br: blockTag,
Button: objectTag, Button: objectTag,
Canvas: objectTag | keepPTag, Canvas: objectTag | keepPTag,
Caption: nonPhrasingTag, Caption: blockTag,
Cite: normalTag, Cite: normalTag,
Code: normalTag, Code: normalTag,
Col: nonPhrasingTag, Col: blockTag,
Colgroup: nonPhrasingTag, Colgroup: blockTag,
Data: normalTag, Data: normalTag,
Datalist: normalTag, Datalist: normalTag, // no text content
Dd: nonPhrasingTag, Dd: blockTag,
Del: keepPTag, Del: keepPTag,
Details: omitPTag, Details: blockTag | omitPTag,
Dfn: normalTag, Dfn: normalTag,
Dialog: normalTag, Dialog: normalTag,
Div: nonPhrasingTag | omitPTag, Div: blockTag | omitPTag,
Dl: nonPhrasingTag | omitPTag, Dl: blockTag | omitPTag,
Dt: nonPhrasingTag, Dt: blockTag,
Em: normalTag, Em: normalTag,
Embed: nonPhrasingTag, Embed: normalTag,
Fieldset: nonPhrasingTag | omitPTag, Fieldset: blockTag | omitPTag,
Figcaption: nonPhrasingTag | omitPTag, Figcaption: blockTag | omitPTag,
Figure: nonPhrasingTag | omitPTag, Figure: blockTag | omitPTag,
Footer: nonPhrasingTag | omitPTag, Footer: blockTag | omitPTag,
Form: nonPhrasingTag | omitPTag, Form: blockTag | omitPTag,
H1: nonPhrasingTag | omitPTag, H1: blockTag | omitPTag,
H2: nonPhrasingTag | omitPTag, H2: blockTag | omitPTag,
H3: nonPhrasingTag | omitPTag, H3: blockTag | omitPTag,
H4: nonPhrasingTag | omitPTag, H4: blockTag | omitPTag,
H5: nonPhrasingTag | omitPTag, H5: blockTag | omitPTag,
H6: nonPhrasingTag | omitPTag, H6: blockTag | omitPTag,
Head: nonPhrasingTag, Head: blockTag,
Header: nonPhrasingTag | omitPTag, Header: blockTag | omitPTag,
Hgroup: nonPhrasingTag, Hgroup: blockTag,
Hr: nonPhrasingTag | omitPTag, Hr: blockTag | omitPTag,
Html: nonPhrasingTag, Html: blockTag,
I: normalTag, I: normalTag,
Iframe: rawTag | objectTag, Iframe: rawTag | objectTag,
Img: objectTag, Img: objectTag,
@ -76,64 +76,90 @@
Ins: keepPTag, Ins: keepPTag,
Kbd: normalTag, Kbd: normalTag,
Label: normalTag, Label: normalTag,
Legend: normalTag, Legend: blockTag,
Li: nonPhrasingTag, Li: blockTag,
Link: normalTag, Link: normalTag,
Main: nonPhrasingTag | omitPTag, Main: blockTag | omitPTag,
Map: keepPTag, Map: keepPTag,
Mark: normalTag, Mark: normalTag,
Math: rawTag, Math: rawTag,
Menu: omitPTag, Menu: blockTag | omitPTag,
Meta: nonPhrasingTag, Meta: normalTag,
Meter: objectTag, Meter: objectTag,
Nav: nonPhrasingTag | omitPTag, Nav: blockTag | omitPTag,
Noscript: nonPhrasingTag | keepPTag, Noscript: blockTag | keepPTag,
Object: objectTag, Object: objectTag,
Ol: nonPhrasingTag | omitPTag, Ol: blockTag | omitPTag,
Optgroup: normalTag, Optgroup: normalTag, // no text content
Option: normalTag, Option: blockTag,
Output: nonPhrasingTag, Output: normalTag,
P: nonPhrasingTag | omitPTag, P: blockTag | omitPTag,
Param: normalTag, Param: normalTag,
Picture: normalTag, Picture: normalTag,
Pre: nonPhrasingTag | omitPTag, Pre: blockTag | omitPTag,
Progress: objectTag, Progress: objectTag,
Q: objectTag, Q: objectTag,
Rp: normalTag, Rp: normalTag,
Rt: normalTag, Rt: objectTag,
Ruby: normalTag, Ruby: normalTag,
S: normalTag, S: normalTag,
Samp: normalTag, Samp: normalTag,
Script: rawTag, Script: rawTag,
Section: nonPhrasingTag | omitPTag, Section: blockTag | omitPTag,
Select: objectTag, Select: objectTag,
Slot: normalTag, Slot: normalTag,
Small: normalTag, Small: normalTag,
Source: normalTag, Source: normalTag,
Span: normalTag, Span: normalTag,
Strong: normalTag, Strong: normalTag,
Style: rawTag | nonPhrasingTag, Style: rawTag | blockTag,
Sub: normalTag, Sub: normalTag,
Summary: normalTag, Summary: blockTag,
Sup: normalTag, Sup: normalTag,
Svg: rawTag | objectTag, Svg: rawTag | objectTag,
Table: nonPhrasingTag | omitPTag, Table: blockTag | omitPTag,
Tbody: nonPhrasingTag, Tbody: blockTag,
Td: nonPhrasingTag, Td: blockTag,
Template: normalTag, Template: normalTag,
Textarea: rawTag | objectTag, Textarea: rawTag | objectTag,
Tfoot: nonPhrasingTag, Tfoot: blockTag,
Th: nonPhrasingTag, Th: blockTag,
Thead: nonPhrasingTag, Thead: blockTag,
Time: normalTag, Time: normalTag,
Title: nonPhrasingTag, Title: normalTag,
Tr: nonPhrasingTag, Tr: blockTag,
Track: normalTag, Track: normalTag,
U: normalTag, U: normalTag,
Ul: nonPhrasingTag | omitPTag, Ul: blockTag | omitPTag,
Var: normalTag, Var: normalTag,
Video: objectTag | keepPTag, Video: objectTag | keepPTag,
Wbr: normalTag, Wbr: objectTag,
// removed tags
Acronym: normalTag,
Applet: normalTag,
Basefont: normalTag,
Big: normalTag,
Center: blockTag,
Dir: blockTag,
Font: normalTag,
Frame: normalTag,
Frameset: normalTag,
Image: objectTag,
Marquee: blockTag,
Menuitem: normalTag,
Nobr: normalTag,
Noembed: blockTag,
Noframes: blockTag,
Plaintext: normalTag,
Rtc: objectTag,
Rb: normalTag,
Strike: normalTag,
Tt: normalTag,
Xmp: blockTag,
// experimental tags
Portal: normalTag,
} }
var attrMap = map[Hash]traits{ var attrMap = map[Hash]traits{
@ -574,7 +600,7 @@
"SupersetEqual": []byte("&supe;"), "SupersetEqual": []byte("&supe;"),
"Supset": []byte("&Sup;"), "Supset": []byte("&Sup;"),
"THORN": []byte("&#222;"), "THORN": []byte("&#222;"),
"Tab": []byte(" "), "Tab": []byte("\t"),
"Tcaron": []byte("&#356;"), "Tcaron": []byte("&#356;"),
"Tcedil": []byte("&#354;"), "Tcedil": []byte("&#354;"),
"Therefore": []byte("&#8756;"), "Therefore": []byte("&#8756;"),

63
vendor/github.com/tdewolff/parse/v2/strconv/decimal.go generated vendored Normal file
View file

@ -0,0 +1,63 @@
package strconv
import (
"math"
)
func ParseDecimal(b []byte) (float64, int) {
i := 0
start := i
dot := -1
trunk := -1
n := uint64(0)
for ; i < len(b); i++ {
c := b[i]
if '0' <= c && c <= '9' {
if trunk == -1 {
if math.MaxUint64/10 < n {
trunk = i
} else {
n *= 10
n += uint64(c - '0')
}
}
} else if dot == -1 && c == '.' {
dot = i
} else {
break
}
}
if i == start || i == start+1 && dot == start {
return 0.0, 0
}
f := float64(n)
mantExp := int64(0)
if dot != -1 {
if trunk == -1 {
trunk = i
}
mantExp = int64(trunk - dot - 1)
} else if trunk != -1 {
mantExp = int64(trunk - i)
}
exp := -mantExp
// copied from strconv/atof.go
if exp == 0 {
return f, i
} else if 0 < exp && exp <= 15+22 { // int * 10^k
// If exponent is big but number of digits is not,
// can move a few zeros into the integer part.
if 22 < exp {
f *= float64pow10[exp-22]
exp = 22
}
if -1e15 <= f && f <= 1e15 {
return f * float64pow10[exp], i
}
} else if exp < 0 && -22 <= exp { // int / 10^k
return f / float64pow10[-exp], i
}
return f * math.Pow10(int(-mantExp)), i
}

View file

@ -25,9 +25,9 @@ func ParseFloat(b []byte) (float64, int) {
n := uint64(0) n := uint64(0)
for ; i < len(b); i++ { for ; i < len(b); i++ {
c := b[i] c := b[i]
if c >= '0' && c <= '9' { if '0' <= c && c <= '9' {
if trunk == -1 { if trunk == -1 {
if n > math.MaxUint64/10 { if math.MaxUint64/10 < n {
trunk = i trunk = i
} else { } else {
n *= 10 n *= 10
@ -62,7 +62,7 @@ func ParseFloat(b []byte) (float64, int) {
if i < len(b) && (b[i] == 'e' || b[i] == 'E') { if i < len(b) && (b[i] == 'e' || b[i] == 'E') {
startExp := i startExp := i
i++ i++
if e, expLen := ParseInt(b[i:]); expLen > 0 { if e, expLen := ParseInt(b[i:]); 0 < expLen {
expExp = e expExp = e
i += expLen i += expLen
} else { } else {
@ -74,17 +74,17 @@ func ParseFloat(b []byte) (float64, int) {
// copied from strconv/atof.go // copied from strconv/atof.go
if exp == 0 { if exp == 0 {
return f, i return f, i
} else if exp > 0 && exp <= 15+22 { // int * 10^k } else if 0 < exp && exp <= 15+22 { // int * 10^k
// If exponent is big but number of digits is not, // If exponent is big but number of digits is not,
// can move a few zeros into the integer part. // can move a few zeros into the integer part.
if exp > 22 { if 22 < exp {
f *= float64pow10[exp-22] f *= float64pow10[exp-22]
exp = 22 exp = 22
} }
if f <= 1e15 && f >= -1e15 { if -1e15 <= f && f <= 1e15 {
return f * float64pow10[exp], i return f * float64pow10[exp], i
} }
} else if exp < 0 && exp >= -22 { // int / 10^k } else if -22 <= exp && exp < 0 { // int / 10^k
return f / float64pow10[-exp], i return f / float64pow10[-exp], i
} }
f *= math.Pow10(int(-mantExp)) f *= math.Pow10(int(-mantExp))
@ -135,7 +135,7 @@ func AppendFloat(b []byte, f float64, prec int) ([]byte, bool) {
// expLen is zero for positive exponents, because positive exponents are determined later on in the big conversion loop // expLen is zero for positive exponents, because positive exponents are determined later on in the big conversion loop
exp := 0 exp := 0
expLen := 0 expLen := 0
if mantExp > 0 { if 0 < mantExp {
// positive exponent is determined in the loop below // positive exponent is determined in the loop below
// but if we initially decreased the exponent to fit in an integer, we can't set the new exponent in the loop alone, // but if we initially decreased the exponent to fit in an integer, we can't set the new exponent in the loop alone,
// since the number of zeros at the end determines the positive exponent in the loop, and we just artificially lost zeros // since the number of zeros at the end determines the positive exponent in the loop, and we just artificially lost zeros
@ -156,7 +156,7 @@ func AppendFloat(b []byte, f float64, prec int) ([]byte, bool) {
if neg { if neg {
maxLen++ maxLen++
} }
if i+maxLen > cap(b) { if cap(b) < i+maxLen {
b = append(b, make([]byte, maxLen)...) b = append(b, make([]byte, maxLen)...)
} else { } else {
b = b[:i+maxLen] b = b[:i+maxLen]
@ -175,17 +175,17 @@ func AppendFloat(b []byte, f float64, prec int) ([]byte, bool) {
last := i + mantLen // right-most position of digit that is non-zero + dot last := i + mantLen // right-most position of digit that is non-zero + dot
dot := last - prec - exp // position of dot dot := last - prec - exp // position of dot
j := last j := last
for mant > 0 { for 0 < mant {
if j == dot { if j == dot {
b[j] = '.' b[j] = '.'
j-- j--
} }
newMant := mant / 10 newMant := mant / 10
digit := mant - 10*newMant digit := mant - 10*newMant
if zero && digit > 0 { if zero && 0 < digit {
// first non-zero digit, if we are still behind the dot we can trim the end to this position // first non-zero digit, if we are still behind the dot we can trim the end to this position
// otherwise trim to the dot (including the dot) // otherwise trim to the dot (including the dot)
if j > dot { if dot < j {
i = j + 1 i = j + 1
// decrease negative exponent further to get rid of dot // decrease negative exponent further to get rid of dot
if exp < 0 { if exp < 0 {
@ -209,9 +209,9 @@ func AppendFloat(b []byte, f float64, prec int) ([]byte, bool) {
mant = newMant mant = newMant
} }
if j > dot { if dot < j {
// extra zeros behind the dot // extra zeros behind the dot
for j > dot { for dot < j {
b[j] = '0' b[j] = '0'
j-- j--
} }
@ -244,7 +244,7 @@ func AppendFloat(b []byte, f float64, prec int) ([]byte, bool) {
} }
i += LenInt(int64(exp)) i += LenInt(int64(exp))
j := i j := i
for exp > 0 { for 0 < exp {
newExp := exp / 10 newExp := exp / 10
digit := exp - 10*newExp digit := exp - 10*newExp
j-- j--

View file

@ -20,14 +20,14 @@ func AppendPrice(b []byte, price int64, dec bool, milSeparator byte, decSeparato
// rounding // rounding
if !dec { if !dec {
firstDec := (price / 10) % 10 firstDec := (price / 10) % 10
if firstDec >= 5 { if 5 <= firstDec {
price += 100 price += 100
} }
} }
// calculate size // calculate size
n := LenInt(price) - 2 n := LenInt(price) - 2
if n > 0 { if 0 < n {
n += (n - 1) / 3 // mil separator n += (n - 1) / 3 // mil separator
} else { } else {
n = 1 n = 1
@ -38,7 +38,7 @@ func AppendPrice(b []byte, price int64, dec bool, milSeparator byte, decSeparato
// resize byte slice // resize byte slice
i := len(b) i := len(b)
if i+n > cap(b) { if cap(b) < i+n {
b = append(b, make([]byte, n)...) b = append(b, make([]byte, n)...)
} else { } else {
b = b[:i+n] b = b[:i+n]
@ -66,7 +66,7 @@ func AppendPrice(b []byte, price int64, dec bool, milSeparator byte, decSeparato
// print integer-part // print integer-part
j := 0 j := 0
for price > 0 { for 0 < price {
if j == 3 { if j == 3 {
b[i] = milSeparator b[i] = milSeparator
i-- i--

6
vendor/modules.txt vendored
View file

@ -659,11 +659,11 @@ github.com/superseriousbusiness/oauth2/v4/generates
github.com/superseriousbusiness/oauth2/v4/manage github.com/superseriousbusiness/oauth2/v4/manage
github.com/superseriousbusiness/oauth2/v4/models github.com/superseriousbusiness/oauth2/v4/models
github.com/superseriousbusiness/oauth2/v4/server github.com/superseriousbusiness/oauth2/v4/server
# github.com/tdewolff/minify/v2 v2.12.7 # github.com/tdewolff/minify/v2 v2.12.8
## explicit; go 1.13 ## explicit; go 1.18
github.com/tdewolff/minify/v2 github.com/tdewolff/minify/v2
github.com/tdewolff/minify/v2/html github.com/tdewolff/minify/v2/html
# github.com/tdewolff/parse/v2 v2.6.6 # github.com/tdewolff/parse/v2 v2.6.7
## explicit; go 1.13 ## explicit; go 1.13
github.com/tdewolff/parse/v2 github.com/tdewolff/parse/v2
github.com/tdewolff/parse/v2/buffer github.com/tdewolff/parse/v2/buffer