repos / pgit

static site generator for git
git clone https://github.com/picosh/pgit.git

commit
d19c0db
parent
7575c0b
author
Eric Bower
date
2023-08-05 18:09:44 +0000 UTC
chore: formatting
9 files changed,  +1420, -42
M go.mod
M go.sum
M Makefile
+1, -0
1@@ -7,6 +7,7 @@ build:
2 .PHONY: build
3 
4 static: build clean
5+	cp -R ./static ./public
6 	./pgit
7 .PHONY:
8 
M go.mod
+52, -4
 1@@ -4,25 +4,73 @@ go 1.18
 2 
 3 require (
 4 	github.com/gogs/git-module v1.6.0
 5+	github.com/picosh/pico v1.1.6
 6 	github.com/spf13/viper v1.12.0
 7 )
 8 
 9 require (
10+	github.com/alecthomas/chroma v0.10.0 // indirect
11+	github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
12+	github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
13+	github.com/aymerick/douceur v0.2.0 // indirect
14+	github.com/disintegration/imaging v1.6.2 // indirect
15+	github.com/dlclark/regexp2 v1.7.0 // indirect
16+	github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85 // indirect
17+	github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85 // indirect
18+	github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413 // indirect
19+	github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect
20+	github.com/dsoprea/go-photoshop-info-format v0.0.0-20200610045659-121dd752914d // indirect
21+	github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d // indirect
22+	github.com/dsoprea/go-utility v0.0.0-20221003172846-a3e1774ef349 // indirect
23+	github.com/dustin/go-humanize v1.0.0 // indirect
24 	github.com/fsnotify/fsnotify v1.5.4 // indirect
25+	github.com/gliderlabs/ssh v0.3.5 // indirect
26+	github.com/go-errors/errors v1.4.2 // indirect
27+	github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
28+	github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect
29+	github.com/google/uuid v1.3.0 // indirect
30+	github.com/gorilla/css v1.0.0 // indirect
31+	github.com/gorilla/feeds v1.1.1 // indirect
32 	github.com/hashicorp/hcl v1.0.0 // indirect
33+	github.com/json-iterator/go v1.1.12 // indirect
34+	github.com/klauspost/compress v1.15.13 // indirect
35+	github.com/klauspost/cpuid/v2 v2.2.2 // indirect
36+	github.com/kolesa-team/go-webp v1.0.2 // indirect
37+	github.com/lib/pq v1.10.7 // indirect
38 	github.com/magiconair/properties v1.8.6 // indirect
39 	github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 // indirect
40+	github.com/microcosm-cc/bluemonday v1.0.21 // indirect
41+	github.com/minio/md5-simd v1.1.2 // indirect
42+	github.com/minio/minio-go/v7 v7.0.45 // indirect
43+	github.com/minio/sha256-simd v1.0.0 // indirect
44 	github.com/mitchellh/mapstructure v1.5.0 // indirect
45+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
46+	github.com/modern-go/reflect2 v1.0.2 // indirect
47+	github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577 // indirect
48+	github.com/neurosnap/go-jpeg-image-structure v0.0.0-20221010133817-70b1c1ff679e // indirect
49+	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
50 	github.com/pelletier/go-toml v1.9.5 // indirect
51 	github.com/pelletier/go-toml/v2 v2.0.1 // indirect
52+	github.com/rs/xid v1.4.0 // indirect
53+	github.com/sirupsen/logrus v1.9.0 // indirect
54 	github.com/spf13/afero v1.8.2 // indirect
55 	github.com/spf13/cast v1.5.0 // indirect
56 	github.com/spf13/jwalterweatherman v1.1.0 // indirect
57 	github.com/spf13/pflag v1.0.5 // indirect
58 	github.com/subosito/gotenv v1.3.0 // indirect
59-	golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
60-	golang.org/x/text v0.3.7 // indirect
61-	gopkg.in/ini.v1 v1.66.4 // indirect
62+	github.com/yuin/goldmark v1.5.3 // indirect
63+	github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 // indirect
64+	github.com/yuin/goldmark-meta v1.1.0 // indirect
65+	go.uber.org/atomic v1.10.0 // indirect
66+	go.uber.org/multierr v1.8.0 // indirect
67+	go.uber.org/zap v1.24.0 // indirect
68+	golang.org/x/crypto v0.4.0 // indirect
69+	golang.org/x/exp v0.0.0-20221211140036-ad323defaf05 // indirect
70+	golang.org/x/image v0.2.0 // indirect
71+	golang.org/x/net v0.4.0 // indirect
72+	golang.org/x/sys v0.3.0 // indirect
73+	golang.org/x/text v0.5.0 // indirect
74+	gopkg.in/ini.v1 v1.67.0 // indirect
75 	gopkg.in/yaml.v2 v2.4.0 // indirect
76-	gopkg.in/yaml.v3 v3.0.0 // indirect
77+	gopkg.in/yaml.v3 v3.0.1 // indirect
78 )
M go.sum
+164, -9
  1@@ -38,6 +38,15 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
  2 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
  3 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
  4 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
  5+github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
  6+github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
  7+github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
  8+github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
  9+github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
 10+github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
 11+github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
 12+github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
 13+github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 14 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 15 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 16 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 17@@ -49,6 +58,37 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht
 18 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 19 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 20 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 21+github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
 22+github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
 23+github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
 24+github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
 25+github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
 26+github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85 h1:+wKSjK8wh5Ybb63Fx1QvTSIfWU/n1nmqEzZy+82pqbQ=
 27+github.com/dsoprea/go-exif v0.0.0-20221012082141-d21ac8e2de85/go.mod h1:lOaOt7+UEppOgyvRy749v3do836U/hw0YVJNjoyPaEs=
 28+github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E=
 29+github.com/dsoprea/go-exif/v2 v2.0.0-20200604193436-ca8584a0e1c4/go.mod h1:9EXlPeHfblFFnwu5UOqmP2eoZfJyAZ2Ri/Vki33ajO0=
 30+github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85 h1:sgMOHQHMiddteUitH9QYgaRTwAcqqr5X9z5j4yNXDuY=
 31+github.com/dsoprea/go-exif/v2 v2.0.0-20221012082141-d21ac8e2de85/go.mod h1:oKrjk2kb3rAR5NbtSTLUMvMSbc+k8ZosI3MaVH47noc=
 32+github.com/dsoprea/go-exif/v3 v3.0.0-20200717053412-08f1b6708903/go.mod h1:0nsO1ce0mh5czxGeLo4+OCZ/C6Eo6ZlMWsz7rH/Gxv8=
 33+github.com/dsoprea/go-exif/v3 v3.0.0-20210512043655-120bcdb2a55e/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk=
 34+github.com/dsoprea/go-iptc v0.0.0-20200609062250-162ae6b44feb/go.mod h1:kYIdx9N9NaOyD7U6D+YtExN7QhRm+5kq7//yOsRXQtM=
 35+github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413 h1:YDRiMEm32T60Kpm35YzOK9ZHgjsS1Qrid+XskNcsdp8=
 36+github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413/go.mod h1:kYIdx9N9NaOyD7U6D+YtExN7QhRm+5kq7//yOsRXQtM=
 37+github.com/dsoprea/go-logging v0.0.0-20190624164917-c4f10aab7696/go.mod h1:Nm/x2ZUNRW6Fe5C3LxdY1PyZY5wmDv/s5dkPJ/VB3iA=
 38+github.com/dsoprea/go-logging v0.0.0-20200517223158-a10564966e9d/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8=
 39+github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg=
 40+github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8=
 41+github.com/dsoprea/go-photoshop-info-format v0.0.0-20200609050348-3db9b63b202c/go.mod h1:pqKB+ijp27cEcrHxhXVgUUMlSDRuGJJp1E+20Lj5H0E=
 42+github.com/dsoprea/go-photoshop-info-format v0.0.0-20200610045659-121dd752914d h1:dg6UMHa50VI01WuPWXPbNJpO8QSyvIF5T5n2IZiqX3A=
 43+github.com/dsoprea/go-photoshop-info-format v0.0.0-20200610045659-121dd752914d/go.mod h1:pqKB+ijp27cEcrHxhXVgUUMlSDRuGJJp1E+20Lj5H0E=
 44+github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d h1:8+qI8ant/vZkNSsbwSjIR6XJfWcDVTg/qx/3pRUUZNA=
 45+github.com/dsoprea/go-png-image-structure v0.0.0-20210512210324-29b889a6093d/go.mod h1:yTR3tKgyk20phAFg6IE9ulMA5NjEDD2wyx+okRFLVtw=
 46+github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf/go.mod h1:95+K3z2L0mqsVYd6yveIv1lmtT3tcQQ3dVakPySffW8=
 47+github.com/dsoprea/go-utility v0.0.0-20221003172846-a3e1774ef349 h1:/py11NlxDaOxkT9OKN+gXgT+QOH5xj1ZRoyusfRIlo4=
 48+github.com/dsoprea/go-utility v0.0.0-20221003172846-a3e1774ef349/go.mod h1:KVK+/Hul09ujXAGq+42UBgCTnXkiJZRnLYdURGjQUwo=
 49+github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e/go.mod h1:uAzdkPTub5Y9yQwXe8W4m2XuP0tK4a9Q/dantD0+uaU=
 50+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
 51+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 52 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 53 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 54 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 55@@ -58,11 +98,25 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
 56 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
 57 github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
 58 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
 59+github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
 60+github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
 61+github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 62+github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
 63+github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
 64+github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
 65+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
 66 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 67 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 68 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 69+github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
 70+github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U=
 71+github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
 72 github.com/gogs/git-module v1.6.0 h1:71GdRM9/pFxGgSUz8t2DKmm3RYuHUnTjsOuFInJXnkM=
 73 github.com/gogs/git-module v1.6.0/go.mod h1:8jFYhDxLUwEOhM2709l2CJXmoIIslobU1xszpT0NcAI=
 74+github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
 75+github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
 76+github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 h1:gtexQ/VGyN+VVFRXSFiguSNcXmS6rkKT+X7FdIrTtfo=
 77+github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI=
 78 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 79 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 80 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 81@@ -100,6 +154,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 82 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 83 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 84 github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
 85+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 86 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 87 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 88 github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 89@@ -115,41 +170,90 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe
 90 github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 91 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 92 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 93+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 94+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 95 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 96 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 97 github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
 98+github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
 99+github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
100+github.com/gorilla/feeds v1.1.1 h1:HwKXxqzcRNg9to+BbvJog4+f3s/xzvtZXICcQGutYfY=
101+github.com/gorilla/feeds v1.1.1/go.mod h1:Nk0jZrvPFZX1OBe5NPiddPw7CfwF6Q9eqzaBbaightA=
102 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
103 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
104 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
105 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
106 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
107 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
108+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
109+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
110+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
111 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
112 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
113 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
114+github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0=
115+github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
116+github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
117+github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
118+github.com/klauspost/cpuid/v2 v2.2.2 h1:xPMwiykqNK9VK0NYC3+jTMYv9I6Vl3YdjZgPZKG3zO0=
119+github.com/klauspost/cpuid/v2 v2.2.2/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
120+github.com/kolesa-team/go-webp v1.0.2 h1:XCrWqxI7tNOI3dr0YufD9TUb+54vBDogg9KsHH7q5Lc=
121+github.com/kolesa-team/go-webp v1.0.2/go.mod h1:oMvdivD6K+Q5qIIkVC2w4k2ZUnI1H+MyP7inwgWq9aA=
122 github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
123 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
124 github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
125 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
126 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
127 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
128+github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
129+github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
130 github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
131 github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
132+github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
133+github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
134 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75 h1:Pijfgr7ZuvX7QIQiEwLdRVr3RoMG+i0SbBO1Qu+7yVk=
135 github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo=
136+github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
137+github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
138+github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
139+github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
140+github.com/minio/minio-go/v7 v7.0.45 h1:g4IeM9M9pW/Lo8AGGNOjBZYlvmtlE1N5TQEYWXRWzIs=
141+github.com/minio/minio-go/v7 v7.0.45/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw=
142+github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
143+github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
144 github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
145 github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
146+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
147+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
148+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
149+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
150+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
151+github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577 h1:hVmVNttSLNloGsbFKVXAUHonXTd8KKrv30U/8UkloKI=
152+github.com/neurosnap/go-exif-remove v0.0.0-20221010134343-50d1e3c35577/go.mod h1:G3Cu1AW+dmRLDFpOi8eUAfc3cGoRHUjTkGjeRcndgl4=
153+github.com/neurosnap/go-jpeg-image-structure v0.0.0-20221010133817-70b1c1ff679e h1:76Dng5ms0fR+26doKZAvNqhi2UPfnLxGfPIDEr+BBlM=
154+github.com/neurosnap/go-jpeg-image-structure v0.0.0-20221010133817-70b1c1ff679e/go.mod h1:nZBDA7+RD63GDJwjZmxhxac65MJqiCIHUUUvdYOsFkk=
155+github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
156+github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
157 github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
158 github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
159 github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
160 github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
161+github.com/picosh/pico v1.1.6 h1:Kw0gP/WVOwD9DkvEfTFt84pXJSv4yKI4n9ncIJHpOnQ=
162+github.com/picosh/pico v1.1.6/go.mod h1:dbiKZsgsm/4KWzN6g4hCkqPj4itd9KzplPYZqs1JWLg=
163+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
164 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
165 github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
166 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
167 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
168 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
169+github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
170 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
171 github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
172+github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
173+github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
174+github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
175+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
176+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
177 github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
178 github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
179 github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
180@@ -162,30 +266,51 @@ github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
181 github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
182 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
183 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
184+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
185 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
186 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
187 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
188-github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
189 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
190+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
191 github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI=
192 github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs=
193 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
194 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
195 github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
196 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
197+github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
198+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
199+github.com/yuin/goldmark v1.5.3 h1:3HUJmBFbQW9fhQOzMgseU134xfi6hU+mjWywx5Ty+/M=
200+github.com/yuin/goldmark v1.5.3/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
201+github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 h1:yHfZyN55+5dp1wG7wDKv8HQ044moxkyGq12KFFMFDxg=
202+github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594/go.mod h1:U9ihbh+1ZN7fR5Se3daSPoz1CGF9IYtSvWwVQtnzGHU=
203+github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
204+github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
205 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
206 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
207 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
208 go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
209 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
210 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
211+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
212+go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
213+go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
214+go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
215+go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
216+go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
217+go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
218+go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
219 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
220 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
221 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
222 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
223 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
224 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
225+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
226 golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
227+golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
228+golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8=
229+golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
230 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
231 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
232 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
233@@ -196,8 +321,14 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
234 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
235 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
236 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
237+golang.org/x/exp v0.0.0-20221211140036-ad323defaf05 h1:T8EldfGCcveFMewH5xAYxxoX3PSQMrsechlUGVFlQBU=
238+golang.org/x/exp v0.0.0-20221211140036-ad323defaf05/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
239 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
240 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
241+golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
242+golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
243+golang.org/x/image v0.2.0 h1:/DcQ0w3VHKCC5p0/P2B0JpAZ9Z++V2KOo2fyU89CXBQ=
244+golang.org/x/image v0.2.0/go.mod h1:la7oBXb9w3YFjBqaAwtynVioc1ZvOnNteUNrifGNmAI=
245 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
246 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
247 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
248@@ -219,6 +350,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
249 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
250 golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
251 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
252+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
253 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
254 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
255 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
256@@ -237,6 +369,7 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
257 golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
258 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
259 golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
260+golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
261 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
262 golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
263 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
264@@ -250,6 +383,11 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
265 golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
266 golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
267 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
268+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
269+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
270+golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
271+golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU=
272+golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
273 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
274 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
275 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
276@@ -268,8 +406,9 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
277 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
278 golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
279 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
280-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
281 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
282+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
283+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
284 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
285 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
286 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
287@@ -302,20 +441,32 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
288 golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
289 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
290 golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
291+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
292 golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
293 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
294 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
295-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
296 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
297+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
298+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
299+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
300+golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
301+golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
302+golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
303+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
304 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
305+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
306+golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
307+golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=
308 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
309 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
310 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
311 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
312 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
313 golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
314-golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
315+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
316 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
317+golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
318+golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
319 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
320 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
321 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
322@@ -366,6 +517,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
323 golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
324 golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
325 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
326+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
327 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
328 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
329 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
330@@ -459,17 +611,20 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
331 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
332 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
333 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
334-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
335 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
336+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
337 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
338-gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
339-gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
340+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
341+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
342 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
343+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
344+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
345 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
346 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
347 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
348-gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
349-gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
350+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
351+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
352+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
353 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
354 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
355 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
M html/base.layout.tmpl
+1, -0
1@@ -11,6 +11,7 @@
2         <meta name="keywords" content="git code forge repo repository" />
3 
4         <link rel="stylesheet" href="/main.css" />
5+        <link rel="stylesheet" href="/syntax.css" />
6     </head>
7     <body>
8       {{template "content" .}}
M html/commit.page.tmpl
+25, -24
 1@@ -9,7 +9,7 @@
 2       <dd><a href="{{.Data.CommitURL}}">{{.Data.Commit.ID}}</a></dd>
 3 
 4       <dt>parent</dt>
 5-      <dd><a href="{{.Data.ParentURL}}">parent {{.Data.Parent}}</a></dd>
 6+      <dd><a href="{{.Data.ParentURL}}">{{.Data.Parent}}</a></dd>
 7 
 8       <dt>author</dt>
 9       <dd>{{.Data.Commit.Author.Name}}</dd>
10@@ -18,33 +18,34 @@
11       <dd>{{.Data.Commit.Author.When}}</dd>
12   </dl>
13 
14-  <p>
15-    {{.Data.Commit.Message}}
16-  </p>
17+  <pre>{{.Data.Commit.Message}}</pre>
18 
19-  <p>
20-      <strong>{{.Data.Diff.NumFiles}}</strong> files changed,
21+  <div class="box mono">
22+    <div>
23+      <strong>{{.Data.Diff.NumFiles}}</strong> files changed,&nbps;
24       <span class="color-green">+{{.Data.Diff.TotalAdditions}}</span>,
25       <span class="color-red">-{{.Data.Diff.TotalDeletions}}</span>
26-  </p>
27-
28-  {{range .Data.Diff.Files}}
29-
30-  <p>
31-      {{.OldMode}} {{.OldName}} => {{.Mode}} {{.Name}}
32-  </p>
33-
34-  <div>
35-      <span class="color-green">+{{.NumAdditions}}</span>,
36-      <span class="color-red">-{{.NumDeletions}}</span>
37+    </div>
38+
39+    <div>
40+    {{range .Data.Diff.Files}}
41+      <div>
42+        <span>{{.FileType}}</span>
43+        <span>{{.Name}}</span>
44+      </div>
45+    {{end}}
46+    </div>
47   </div>
48 
49-  <pre>
50-  {{range .Sections}}
51-    {{range .Lines}}
52-      {{.Content}}
53-    {{end}}
54-  {{end}}
55-  </pre>
56+  {{range .Data.Diff.Files}}
57+    <div class="flex justify-between mono">
58+      <span>{{.FileType}} {{.OldName}} => {{.Name}}</span>
59+      <div>
60+        <span class="color-green">+{{.NumAdditions}}</span>,
61+        <span class="color-red">-{{.NumDeletions}}</span>
62+      </div>
63+    </div>
64+
65+    {{.Content}}
66   {{end}}
67 {{end}}
M html/file.page.tmpl
+1, -1
1@@ -6,5 +6,5 @@
2 
3   <h1>{{.Name}}</h1>
4 
5-  <pre>{{.Data.Contents}}</pre>
6+  {{.Data.Contents}}
7 {{end }}
M main.go
+74, -4
  1@@ -2,12 +2,14 @@ package main
  2 
  3 import (
  4 	"fmt"
  5+	"html/template"
  6 	html "html/template"
  7 	"os"
  8 	"path/filepath"
  9 	"strings"
 10 
 11 	git "github.com/gogs/git-module"
 12+	"github.com/picosh/pico/pastes"
 13 	"github.com/spf13/viper"
 14 )
 15 
 16@@ -55,8 +57,9 @@ type PageData struct {
 17 }
 18 
 19 type CommitPageData struct {
 20+	CommitMsg template.HTML
 21 	Commit    *CommitData
 22-	Diff      *git.Diff
 23+	Diff      *DiffRender
 24 	Repo      *RepoData
 25 	Parent    string
 26 	ParentURL string
 27@@ -72,6 +75,38 @@ type WriteData struct {
 28 	Repo     *RepoData
 29 }
 30 
 31+type DiffRender struct {
 32+	NumFiles       int
 33+	TotalAdditions int
 34+	TotalDeletions int
 35+	Files          []*DiffRenderFile
 36+}
 37+
 38+type DiffRenderFile struct {
 39+	FileType     string
 40+	OldMode      git.EntryMode
 41+	OldName      string
 42+	Mode         git.EntryMode
 43+	Name         string
 44+	Content      template.HTML
 45+	NumAdditions int
 46+	NumDeletions int
 47+}
 48+
 49+func diffFileType(_type git.DiffFileType) string {
 50+	if _type == git.DiffFileAdd {
 51+		return "A"
 52+	} else if _type == git.DiffFileChange {
 53+		return "M"
 54+	} else if _type == git.DiffFileDelete {
 55+		return "D"
 56+	} else if _type == git.DiffFileRename {
 57+		return "R"
 58+	}
 59+
 60+	return ""
 61+}
 62+
 63 func bail(err error) {
 64 	if err != nil {
 65 		panic(err)
 66@@ -225,7 +260,7 @@ func writeRefs(data *PageData) {
 67 }
 68 
 69 type FileData struct {
 70-	Contents string
 71+	Contents template.HTML
 72 }
 73 
 74 func writeHTMLTreeFiles(data *PageData) {
 75@@ -235,10 +270,14 @@ func writeHTMLTreeFiles(data *PageData) {
 76 		file.NumLines = len(strings.Split(string(b), "\n"))
 77 
 78 		d := filepath.Dir(file.Path)
 79+		contents, err := pastes.ParseText(file.Entry.Name(), string(b))
 80+		if err != nil {
 81+			panic(err)
 82+		}
 83 		writeHtml(&WriteData{
 84 			Name:     fmt.Sprintf("%s.html", file.Entry.Name()),
 85 			Template: "./html/file.page.tmpl",
 86-			Data:     &FileData{Contents: string(b)},
 87+			Data:     &FileData{Contents: template.HTML(contents)},
 88 			RepoName: data.Repo.Name,
 89 			Subdir:   filepath.Join("tree", data.RevName, "item", d),
 90 			Repo:     data.Repo,
 91@@ -278,9 +317,40 @@ func writeLogDiffs(project string, repo *git.Repository, data *PageData, cache m
 92 			git.DiffOptions{Base: commitID},
 93 		)
 94 
 95+		rnd := &DiffRender{
 96+			NumFiles:       diff.NumFiles(),
 97+			TotalAdditions: diff.TotalAdditions(),
 98+			TotalDeletions: diff.TotalDeletions(),
 99+		}
100+		fls := []*DiffRenderFile{}
101+		for _, file := range diff.Files {
102+			fl := &DiffRenderFile{
103+				FileType:     diffFileType(file.Type),
104+				OldMode:      file.OldMode(),
105+				OldName:      file.OldName(),
106+				Mode:         file.Mode(),
107+				Name:         file.Name,
108+				NumAdditions: file.NumAdditions(),
109+				NumDeletions: file.NumDeletions(),
110+			}
111+			content := ""
112+			for _, section := range file.Sections {
113+				for _, line := range section.Lines {
114+					content += fmt.Sprintf("%s\n", line.Content)
115+				}
116+			}
117+			finContent, err := pastes.ParseText("commit.diff", content)
118+			if err != nil {
119+				panic(err)
120+			}
121+			fl.Content = template.HTML(finContent)
122+			fls = append(fls, fl)
123+		}
124+		rnd.Files = fls
125+
126 		commitData := &CommitPageData{
127 			Commit:    commit,
128-			Diff:      diff,
129+			Diff:      rnd,
130 			Repo:      data.Repo,
131 			Parent:    parentID,
132 			CommitURL: CommitURL(project, commitID),
A static/main.css
+402, -0
  1@@ -0,0 +1,402 @@
  2+*,
  3+::before,
  4+::after {
  5+  box-sizing: border-box;
  6+}
  7+
  8+::-moz-focus-inner {
  9+  border-style: none;
 10+  padding: 0;
 11+}
 12+:-moz-focusring {
 13+  outline: 1px dotted ButtonText;
 14+}
 15+:-moz-ui-invalid {
 16+  box-shadow: none;
 17+}
 18+
 19+@media (prefers-color-scheme: light) {
 20+  :root {
 21+    --white: #6a737d;
 22+    --code: #fff8d3;
 23+    --code-border: #f0d547;
 24+    --pre: #f6f8fa;
 25+    --bg-color: #fff;
 26+    --text-color: #24292f;
 27+    --link-color: #005cc5;
 28+    --visited: #6f42c1;
 29+    --blockquote: #005cc5;
 30+    --blockquote-bg: #fff;
 31+    --hover: #d73a49;
 32+    --grey: #ccc;
 33+    --success: #50fa7b;
 34+    --error: #ff5555;
 35+  }
 36+}
 37+
 38+@media (prefers-color-scheme: dark) {
 39+  :root {
 40+    --white: #f2f2f2;
 41+    --code: #414558;
 42+    --code-border: #252525;
 43+    --pre: #252525;
 44+    --bg-color: #282a36;
 45+    --text-color: #f2f2f2;
 46+    --link-color: #8be9fd;
 47+    --visited: #bd93f9;
 48+    --blockquote: #bd93f9;
 49+    --blockquote-bg: #414558;
 50+    --hover: #ff80bf;
 51+    --grey: #414558;
 52+    --success: #50fa7b;
 53+    --error: #ff5555;
 54+  }
 55+}
 56+
 57+html {
 58+  background-color: var(--bg-color);
 59+  color: var(--text-color);
 60+  line-height: 1.5;
 61+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
 62+    Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial,
 63+    sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
 64+  -webkit-text-size-adjust: 100%;
 65+  -moz-tab-size: 4;
 66+  tab-size: 4;
 67+}
 68+
 69+body {
 70+  margin: 0 auto;
 71+  max-width: 720px;
 72+}
 73+
 74+img {
 75+  max-width: 100%;
 76+  height: auto;
 77+}
 78+
 79+b,
 80+strong {
 81+  font-weight: bold;
 82+}
 83+
 84+code,
 85+kbd,
 86+samp,
 87+pre {
 88+  font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo,
 89+    monospace;
 90+  font-size: 0.8rem;
 91+}
 92+
 93+code,
 94+kbd,
 95+samp {
 96+  background-color: var(--code);
 97+  border: 1px solid var(--code-border);
 98+}
 99+
100+pre > code {
101+  background-color: inherit;
102+  padding: 0;
103+  border: none;
104+}
105+
106+code {
107+  border-radius: 0.3rem;
108+  padding: 0.15rem 0.2rem 0.05rem;
109+}
110+
111+pre {
112+  border-radius: 5px;
113+  padding: 1rem;
114+  margin: 1rem 0;
115+  overflow-x: auto;
116+  background-color: var(--pre) !important;
117+}
118+
119+.mono {
120+  font-family: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo,
121+    monospace;
122+}
123+
124+.box {
125+  font-size: 0.8rem;
126+  border-radius: 5px;
127+  padding: 1rem;
128+  margin: 1rem 0;
129+  overflow-x: auto;
130+  background-color: var(--pre) !important;
131+}
132+
133+small {
134+  font-size: 0.8rem;
135+}
136+
137+summary {
138+  display: list-item;
139+}
140+
141+h1,
142+h2,
143+h3 {
144+  margin: 0;
145+  padding: 0.6rem 0 0 0;
146+  border: 0;
147+  font-style: normal;
148+  font-weight: inherit;
149+  font-size: inherit;
150+}
151+
152+hr {
153+  color: inherit;
154+  border: 0;
155+  margin: 0;
156+  height: 1px;
157+  background: var(--grey);
158+  margin: 2rem auto;
159+  text-align: center;
160+}
161+
162+a {
163+  text-decoration: underline;
164+  color: var(--link-color);
165+}
166+
167+a:hover,
168+a:visited:hover {
169+  color: var(--hover);
170+}
171+
172+a:visited {
173+  color: var(--visited);
174+}
175+
176+a.link-grey {
177+  text-decoration: underline;
178+  color: var(--white);
179+}
180+
181+a.link-grey:visited {
182+  color: var(--white);
183+}
184+
185+section {
186+  margin-bottom: 1.4rem;
187+}
188+
189+section:last-child {
190+  margin-bottom: 0;
191+}
192+
193+header {
194+  margin: 1rem auto;
195+}
196+
197+p {
198+  margin: 0.8rem 0;
199+}
200+
201+article {
202+  overflow-wrap: break-word;
203+}
204+
205+blockquote {
206+  border-left: 5px solid var(--blockquote);
207+  background-color: var(--blockquote-bg);
208+  padding: 0.8rem;
209+  margin: 1rem 0;
210+}
211+
212+blockquote > p {
213+  margin: 0;
214+}
215+
216+ul,
217+ol {
218+  padding: 0 0 0 2rem;
219+  list-style-position: outside;
220+}
221+
222+ul[style*="list-style-type: none;"] {
223+  padding: 0;
224+}
225+
226+li {
227+  margin: 0.5rem 0;
228+}
229+
230+li > pre {
231+  padding: 0;
232+}
233+
234+footer {
235+  text-align: center;
236+  margin-bottom: 4rem;
237+}
238+
239+dt {
240+  font-weight: bold;
241+}
242+
243+dd {
244+  margin-left: 0;
245+}
246+
247+dd:not(:last-child) {
248+  margin-bottom: 0.5rem;
249+}
250+
251+figure {
252+  margin: 0;
253+}
254+
255+.color-green {
256+  color: var(--success);
257+}
258+
259+.color-red {
260+  color: var(--error);
261+}
262+
263+.post-date {
264+  width: 130px;
265+}
266+
267+.text-grey {
268+  color: var(--grey);
269+}
270+
271+.text-2xl {
272+  font-size: 1.85rem;
273+  line-height: 1.15;
274+}
275+
276+.text-xl {
277+  font-size: 1.55rem;
278+  line-height: 1.15;
279+}
280+
281+.text-lg {
282+  font-size: 1.35rem;
283+  line-height: 1.15;
284+}
285+
286+.text-md {
287+  font-size: 1.15rem;
288+  line-height: 1.15;
289+}
290+
291+.text-sm {
292+  font-size: 0.875rem;
293+}
294+
295+.text-center {
296+  text-align: center;
297+}
298+
299+.font-bold {
300+  font-weight: bold;
301+}
302+
303+.font-italic {
304+  font-style: italic;
305+}
306+
307+.inline {
308+  display: inline;
309+}
310+
311+.flex {
312+  display: flex;
313+}
314+
315+.items-center {
316+  align-items: center;
317+}
318+
319+.m-0 {
320+  margin: 0;
321+}
322+
323+.mt {
324+  margin-top: 0.5rem;
325+}
326+
327+.mb {
328+  margin-bottom: 0.5rem;
329+}
330+
331+.mr {
332+  margin-right: 0.5rem;
333+}
334+
335+.ml {
336+  margin-left: 0.5rem;
337+}
338+
339+.my {
340+  margin-top: 0.5rem;
341+  margin-bottom: 0.5rem;
342+}
343+
344+.my-2 {
345+  margin-top: 1rem;
346+  margin-bottom: 1rem;
347+}
348+
349+.mx {
350+  margin-left: 0.5rem;
351+  margin-right: 0.5rem;
352+}
353+
354+.mx-2 {
355+  margin-left: 1rem;
356+  margin-right: 1rem;
357+}
358+
359+.justify-between {
360+  justify-content: space-between;
361+}
362+
363+.flex-1 {
364+  flex: 1;
365+}
366+
367+.layout-aside {
368+  max-width: 50rem;
369+}
370+
371+.layout-aside aside {
372+  width: 200px;
373+}
374+
375+.layout-aside img {
376+  border-radius: 5px;
377+}
378+
379+#readme {
380+  display: none;
381+}
382+
383+@media only screen and (max-width: 600px) {
384+  body {
385+    padding: 1rem;
386+  }
387+
388+  header {
389+    margin: 0;
390+  }
391+
392+  .layout-aside main {
393+    flex-direction: column;
394+  }
395+
396+  aside {
397+    display: none;
398+  }
399+
400+  #readme {
401+    display: block;
402+  }
403+}
A static/syntax.css
+700, -0
  1@@ -0,0 +1,700 @@
  2+@media (prefers-color-scheme: light) {
  3+  /* Background */
  4+  .bg {
  5+    background-color: #ffffff;
  6+  }
  7+  /* PreWrapper */
  8+  .chroma {
  9+    background-color: #ffffff;
 10+  }
 11+  /* Other */
 12+  .chroma .x {
 13+  }
 14+  /* Error */
 15+  .chroma .err {
 16+    background-color: #a848a8;
 17+  }
 18+  /* CodeLine */
 19+  .chroma .cl {
 20+  }
 21+  /* LineTableTD */
 22+  .chroma .lntd {
 23+    vertical-align: top;
 24+    padding: 0;
 25+    margin: 0;
 26+    border: 0;
 27+  }
 28+  /* LineTable */
 29+  .chroma .lntable {
 30+    border-spacing: 0;
 31+    padding: 0;
 32+    margin: 0;
 33+    border: 0;
 34+  }
 35+  /* LineHighlight */
 36+  .chroma .hl {
 37+    background-color: #ffffcc;
 38+  }
 39+  /* LineNumbersTable */
 40+  .chroma .lnt {
 41+    white-space: pre;
 42+    user-select: none;
 43+    margin-right: 0.4em;
 44+    padding: 0 0.4em 0 0.4em;
 45+    color: #7f7f7f;
 46+  }
 47+  /* LineNumbers */
 48+  .chroma .ln {
 49+    white-space: pre;
 50+    user-select: none;
 51+    margin-right: 0.4em;
 52+    padding: 0 0.4em 0 0.4em;
 53+    color: #7f7f7f;
 54+  }
 55+  /* Line */
 56+  .chroma .line {
 57+    display: flex;
 58+  }
 59+  /* Keyword */
 60+  .chroma .k {
 61+    color: #2838b0;
 62+  }
 63+  /* KeywordConstant */
 64+  .chroma .kc {
 65+    color: #444444;
 66+    font-style: italic;
 67+  }
 68+  /* KeywordDeclaration */
 69+  .chroma .kd {
 70+    color: #2838b0;
 71+    font-style: italic;
 72+  }
 73+  /* KeywordNamespace */
 74+  .chroma .kn {
 75+    color: #2838b0;
 76+  }
 77+  /* KeywordPseudo */
 78+  .chroma .kp {
 79+    color: #2838b0;
 80+  }
 81+  /* KeywordReserved */
 82+  .chroma .kr {
 83+    color: #2838b0;
 84+  }
 85+  /* KeywordType */
 86+  .chroma .kt {
 87+    color: #2838b0;
 88+    font-style: italic;
 89+  }
 90+  /* Name */
 91+  .chroma .n {
 92+  }
 93+  /* NameAttribute */
 94+  .chroma .na {
 95+    color: #388038;
 96+  }
 97+  /* NameBuiltin */
 98+  .chroma .nb {
 99+    color: #388038;
100+  }
101+  /* NameBuiltinPseudo */
102+  .chroma .bp {
103+    font-style: italic;
104+  }
105+  /* NameClass */
106+  .chroma .nc {
107+    color: #287088;
108+  }
109+  /* NameConstant */
110+  .chroma .no {
111+    color: #b85820;
112+  }
113+  /* NameDecorator */
114+  .chroma .nd {
115+    color: #287088;
116+  }
117+  /* NameEntity */
118+  .chroma .ni {
119+    color: #709030;
120+  }
121+  /* NameException */
122+  .chroma .ne {
123+    color: #908828;
124+  }
125+  /* NameFunction */
126+  .chroma .nf {
127+    color: #785840;
128+  }
129+  /* NameFunctionMagic */
130+  .chroma .fm {
131+    color: #b85820;
132+  }
133+  /* NameLabel */
134+  .chroma .nl {
135+    color: #289870;
136+  }
137+  /* NameNamespace */
138+  .chroma .nn {
139+    color: #289870;
140+  }
141+  /* NameOther */
142+  .chroma .nx {
143+  }
144+  /* NameProperty */
145+  .chroma .py {
146+  }
147+  /* NameTag */
148+  .chroma .nt {
149+    color: #2838b0;
150+  }
151+  /* NameVariable */
152+  .chroma .nv {
153+    color: #b04040;
154+  }
155+  /* NameVariableClass */
156+  .chroma .vc {
157+  }
158+  /* NameVariableGlobal */
159+  .chroma .vg {
160+    color: #908828;
161+  }
162+  /* NameVariableInstance */
163+  .chroma .vi {
164+  }
165+  /* NameVariableMagic */
166+  .chroma .vm {
167+    color: #b85820;
168+  }
169+  /* Literal */
170+  .chroma .l {
171+  }
172+  /* LiteralDate */
173+  .chroma .ld {
174+  }
175+  /* LiteralString */
176+  .chroma .s {
177+    color: #b83838;
178+  }
179+  /* LiteralStringAffix */
180+  .chroma .sa {
181+    color: #444444;
182+  }
183+  /* LiteralStringBacktick */
184+  .chroma .sb {
185+    color: #b83838;
186+  }
187+  /* LiteralStringChar */
188+  .chroma .sc {
189+    color: #a848a8;
190+  }
191+  /* LiteralStringDelimiter */
192+  .chroma .dl {
193+    color: #b85820;
194+  }
195+  /* LiteralStringDoc */
196+  .chroma .sd {
197+    color: #b85820;
198+    font-style: italic;
199+  }
200+  /* LiteralStringDouble */
201+  .chroma .s2 {
202+    color: #b83838;
203+  }
204+  /* LiteralStringEscape */
205+  .chroma .se {
206+    color: #709030;
207+  }
208+  /* LiteralStringHeredoc */
209+  .chroma .sh {
210+    color: #b83838;
211+  }
212+  /* LiteralStringInterpol */
213+  .chroma .si {
214+    color: #b83838;
215+    text-decoration: underline;
216+  }
217+  /* LiteralStringOther */
218+  .chroma .sx {
219+    color: #a848a8;
220+  }
221+  /* LiteralStringRegex */
222+  .chroma .sr {
223+    color: #a848a8;
224+  }
225+  /* LiteralStringSingle */
226+  .chroma .s1 {
227+    color: #b83838;
228+  }
229+  /* LiteralStringSymbol */
230+  .chroma .ss {
231+    color: #b83838;
232+  }
233+  /* LiteralNumber */
234+  .chroma .m {
235+    color: #444444;
236+  }
237+  /* LiteralNumberBin */
238+  .chroma .mb {
239+    color: #444444;
240+  }
241+  /* LiteralNumberFloat */
242+  .chroma .mf {
243+    color: #444444;
244+  }
245+  /* LiteralNumberHex */
246+  .chroma .mh {
247+    color: #444444;
248+  }
249+  /* LiteralNumberInteger */
250+  .chroma .mi {
251+    color: #444444;
252+  }
253+  /* LiteralNumberIntegerLong */
254+  .chroma .il {
255+    color: #444444;
256+  }
257+  /* LiteralNumberOct */
258+  .chroma .mo {
259+    color: #444444;
260+  }
261+  /* Operator */
262+  .chroma .o {
263+    color: #666666;
264+  }
265+  /* OperatorWord */
266+  .chroma .ow {
267+    color: #a848a8;
268+  }
269+  /* Punctuation */
270+  .chroma .p {
271+    color: #888888;
272+  }
273+  /* Comment */
274+  .chroma .c {
275+    color: #888888;
276+    font-style: italic;
277+  }
278+  /* CommentHashbang */
279+  .chroma .ch {
280+    color: #287088;
281+    font-style: italic;
282+  }
283+  /* CommentMultiline */
284+  .chroma .cm {
285+    color: #888888;
286+    font-style: italic;
287+  }
288+  /* CommentSingle */
289+  .chroma .c1 {
290+    color: #888888;
291+    font-style: italic;
292+  }
293+  /* CommentSpecial */
294+  .chroma .cs {
295+    color: #888888;
296+    font-style: italic;
297+  }
298+  /* CommentPreproc */
299+  .chroma .cp {
300+    color: #289870;
301+  }
302+  /* CommentPreprocFile */
303+  .chroma .cpf {
304+    color: #289870;
305+  }
306+  /* Generic */
307+  .chroma .g {
308+  }
309+  /* GenericDeleted */
310+  .chroma .gd {
311+    color: #c02828;
312+  }
313+  /* GenericEmph */
314+  .chroma .ge {
315+    font-style: italic;
316+  }
317+  /* GenericError */
318+  .chroma .gr {
319+    color: #c02828;
320+  }
321+  /* GenericHeading */
322+  .chroma .gh {
323+    color: #666666;
324+  }
325+  /* GenericInserted */
326+  .chroma .gi {
327+    color: #388038;
328+  }
329+  /* GenericOutput */
330+  .chroma .go {
331+    color: #666666;
332+  }
333+  /* GenericPrompt */
334+  .chroma .gp {
335+    color: #444444;
336+  }
337+  /* GenericStrong */
338+  .chroma .gs {
339+    font-weight: bold;
340+  }
341+  /* GenericSubheading */
342+  .chroma .gu {
343+    color: #444444;
344+  }
345+  /* GenericTraceback */
346+  .chroma .gt {
347+    color: #2838b0;
348+  }
349+  /* GenericUnderline */
350+  .chroma .gl {
351+    text-decoration: underline;
352+  }
353+  /* TextWhitespace */
354+  .chroma .w {
355+    color: #a89028;
356+  }
357+}
358+
359+@media (prefers-color-scheme: dark) {
360+  /* Background */
361+  .bg {
362+    color: #f8f8f2;
363+    background-color: #282a36;
364+  }
365+  /* PreWrapper */
366+  .chroma {
367+    color: #f8f8f2;
368+    background-color: #282a36;
369+  }
370+  /* Other */
371+  .chroma .x {
372+  }
373+  /* Error */
374+  .chroma .err {
375+  }
376+  /* CodeLine */
377+  .chroma .cl {
378+  }
379+  /* LineTableTD */
380+  .chroma .lntd {
381+    vertical-align: top;
382+    padding: 0;
383+    margin: 0;
384+    border: 0;
385+  }
386+  /* LineTable */
387+  .chroma .lntable {
388+    border-spacing: 0;
389+    padding: 0;
390+    margin: 0;
391+    border: 0;
392+  }
393+  /* LineHighlight */
394+  .chroma .hl {
395+    background-color: #ffffcc;
396+  }
397+  /* LineNumbersTable */
398+  .chroma .lnt {
399+    white-space: pre;
400+    user-select: none;
401+    margin-right: 0.4em;
402+    padding: 0 0.4em 0 0.4em;
403+    color: #7f7f7f;
404+  }
405+  /* LineNumbers */
406+  .chroma .ln {
407+    white-space: pre;
408+    user-select: none;
409+    margin-right: 0.4em;
410+    padding: 0 0.4em 0 0.4em;
411+    color: #7f7f7f;
412+  }
413+  /* Line */
414+  .chroma .line {
415+    display: flex;
416+  }
417+  /* Keyword */
418+  .chroma .k {
419+    color: #ff79c6;
420+  }
421+  /* KeywordConstant */
422+  .chroma .kc {
423+    color: #ff79c6;
424+  }
425+  /* KeywordDeclaration */
426+  .chroma .kd {
427+    color: #8be9fd;
428+    font-style: italic;
429+  }
430+  /* KeywordNamespace */
431+  .chroma .kn {
432+    color: #ff79c6;
433+  }
434+  /* KeywordPseudo */
435+  .chroma .kp {
436+    color: #ff79c6;
437+  }
438+  /* KeywordReserved */
439+  .chroma .kr {
440+    color: #ff79c6;
441+  }
442+  /* KeywordType */
443+  .chroma .kt {
444+    color: #8be9fd;
445+  }
446+  /* Name */
447+  .chroma .n {
448+  }
449+  /* NameAttribute */
450+  .chroma .na {
451+    color: #50fa7b;
452+  }
453+  /* NameBuiltin */
454+  .chroma .nb {
455+    color: #8be9fd;
456+    font-style: italic;
457+  }
458+  /* NameBuiltinPseudo */
459+  .chroma .bp {
460+  }
461+  /* NameClass */
462+  .chroma .nc {
463+    color: #50fa7b;
464+  }
465+  /* NameConstant */
466+  .chroma .no {
467+  }
468+  /* NameDecorator */
469+  .chroma .nd {
470+  }
471+  /* NameEntity */
472+  .chroma .ni {
473+  }
474+  /* NameException */
475+  .chroma .ne {
476+  }
477+  /* NameFunction */
478+  .chroma .nf {
479+    color: #50fa7b;
480+  }
481+  /* NameFunctionMagic */
482+  .chroma .fm {
483+  }
484+  /* NameLabel */
485+  .chroma .nl {
486+    color: #8be9fd;
487+    font-style: italic;
488+  }
489+  /* NameNamespace */
490+  .chroma .nn {
491+  }
492+  /* NameOther */
493+  .chroma .nx {
494+  }
495+  /* NameProperty */
496+  .chroma .py {
497+  }
498+  /* NameTag */
499+  .chroma .nt {
500+    color: #ff79c6;
501+  }
502+  /* NameVariable */
503+  .chroma .nv {
504+    color: #8be9fd;
505+    font-style: italic;
506+  }
507+  /* NameVariableClass */
508+  .chroma .vc {
509+    color: #8be9fd;
510+    font-style: italic;
511+  }
512+  /* NameVariableGlobal */
513+  .chroma .vg {
514+    color: #8be9fd;
515+    font-style: italic;
516+  }
517+  /* NameVariableInstance */
518+  .chroma .vi {
519+    color: #8be9fd;
520+    font-style: italic;
521+  }
522+  /* NameVariableMagic */
523+  .chroma .vm {
524+  }
525+  /* Literal */
526+  .chroma .l {
527+  }
528+  /* LiteralDate */
529+  .chroma .ld {
530+  }
531+  /* LiteralString */
532+  .chroma .s {
533+    color: #f1fa8c;
534+  }
535+  /* LiteralStringAffix */
536+  .chroma .sa {
537+    color: #f1fa8c;
538+  }
539+  /* LiteralStringBacktick */
540+  .chroma .sb {
541+    color: #f1fa8c;
542+  }
543+  /* LiteralStringChar */
544+  .chroma .sc {
545+    color: #f1fa8c;
546+  }
547+  /* LiteralStringDelimiter */
548+  .chroma .dl {
549+    color: #f1fa8c;
550+  }
551+  /* LiteralStringDoc */
552+  .chroma .sd {
553+    color: #f1fa8c;
554+  }
555+  /* LiteralStringDouble */
556+  .chroma .s2 {
557+    color: #f1fa8c;
558+  }
559+  /* LiteralStringEscape */
560+  .chroma .se {
561+    color: #f1fa8c;
562+  }
563+  /* LiteralStringHeredoc */
564+  .chroma .sh {
565+    color: #f1fa8c;
566+  }
567+  /* LiteralStringInterpol */
568+  .chroma .si {
569+    color: #f1fa8c;
570+  }
571+  /* LiteralStringOther */
572+  .chroma .sx {
573+    color: #f1fa8c;
574+  }
575+  /* LiteralStringRegex */
576+  .chroma .sr {
577+    color: #f1fa8c;
578+  }
579+  /* LiteralStringSingle */
580+  .chroma .s1 {
581+    color: #f1fa8c;
582+  }
583+  /* LiteralStringSymbol */
584+  .chroma .ss {
585+    color: #f1fa8c;
586+  }
587+  /* LiteralNumber */
588+  .chroma .m {
589+    color: #bd93f9;
590+  }
591+  /* LiteralNumberBin */
592+  .chroma .mb {
593+    color: #bd93f9;
594+  }
595+  /* LiteralNumberFloat */
596+  .chroma .mf {
597+    color: #bd93f9;
598+  }
599+  /* LiteralNumberHex */
600+  .chroma .mh {
601+    color: #bd93f9;
602+  }
603+  /* LiteralNumberInteger */
604+  .chroma .mi {
605+    color: #bd93f9;
606+  }
607+  /* LiteralNumberIntegerLong */
608+  .chroma .il {
609+    color: #bd93f9;
610+  }
611+  /* LiteralNumberOct */
612+  .chroma .mo {
613+    color: #bd93f9;
614+  }
615+  /* Operator */
616+  .chroma .o {
617+    color: #ff79c6;
618+  }
619+  /* OperatorWord */
620+  .chroma .ow {
621+    color: #ff79c6;
622+  }
623+  /* Punctuation */
624+  .chroma .p {
625+  }
626+  /* Comment */
627+  .chroma .c {
628+    color: #6272a4;
629+  }
630+  /* CommentHashbang */
631+  .chroma .ch {
632+    color: #6272a4;
633+  }
634+  /* CommentMultiline */
635+  .chroma .cm {
636+    color: #6272a4;
637+  }
638+  /* CommentSingle */
639+  .chroma .c1 {
640+    color: #6272a4;
641+  }
642+  /* CommentSpecial */
643+  .chroma .cs {
644+    color: #6272a4;
645+  }
646+  /* CommentPreproc */
647+  .chroma .cp {
648+    color: #ff79c6;
649+  }
650+  /* CommentPreprocFile */
651+  .chroma .cpf {
652+    color: #ff79c6;
653+  }
654+  /* Generic */
655+  .chroma .g {
656+  }
657+  /* GenericDeleted */
658+  .chroma .gd {
659+    color: #ff5555;
660+  }
661+  /* GenericEmph */
662+  .chroma .ge {
663+    text-decoration: underline;
664+  }
665+  /* GenericError */
666+  .chroma .gr {
667+  }
668+  /* GenericHeading */
669+  .chroma .gh {
670+    font-weight: bold;
671+  }
672+  /* GenericInserted */
673+  .chroma .gi {
674+    color: #50fa7b;
675+    font-weight: bold;
676+  }
677+  /* GenericOutput */
678+  .chroma .go {
679+    color: #44475a;
680+  }
681+  /* GenericPrompt */
682+  .chroma .gp {
683+  }
684+  /* GenericStrong */
685+  .chroma .gs {
686+  }
687+  /* GenericSubheading */
688+  .chroma .gu {
689+    font-weight: bold;
690+  }
691+  /* GenericTraceback */
692+  .chroma .gt {
693+  }
694+  /* GenericUnderline */
695+  .chroma .gl {
696+    text-decoration: underline;
697+  }
698+  /* TextWhitespace */
699+  .chroma .w {
700+  }
701+}