diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index aaa9c71f..baaca931 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: 1.19 + go-version: 1.22 - name: Build run: go build -v ./... - name: Tests with coverage diff --git a/README.md b/README.md index 8c6f8ec0..a1105ce8 100644 --- a/README.md +++ b/README.md @@ -22,27 +22,25 @@ Whether this library is ready for production environments is up to your own judg Execution performance is actually really good, especially the rasterizer is highly optimized with ASM. See for example a comparison of an extreme case in https://github.com/tdewolff/canvas/issues/280#issuecomment-1995990038, where this library is at least twice as fast as existing solutions, and can handle bigger images than the likes of Inkscape and Cairo. -Please issue bug reports or feature requests to help this library mature! All help is appreciated. Also see [Wiki - Planning](https://github.com/tdewolff/canvas/wiki/Planning) for an inexhaustive list of ideas and TODOs. - -## Recent changes +The path intersection code and path boolean operation code is quite complete and fast, and more importantly has a time complexity of O(n log n). It may suffer from numerical precision which can be avoided using `Path.Gridsnap` beforehand. -- `Context` view and coordinate view have been altered. `View` now doesn't affect the coordinate view/system. To achieve the same as before, replace `ctx.SetView(m)` by `ctx.SetView(m); ctx.SetCoordView(m)`. The change makes coordinate systems more intuitive when using in combination with views, the given coordinate reflects the coordinate where it is drawn irrespective of the view. This has been reverted, the coordinate view is first performed to the coordinate, and then the view applies as a affine transformation matrix for all objects (including their coordinates). This less error prone (as evidenced by recents bugs in ParseSVG). If you previously used `ctx.SetCoordView(m); ctx.SetView(m)`, now only the latter is needed. Otherwise, you may need to update your coordinates when using `ctx.SetView(m)`. +Please issue bug reports or feature requests to help this library mature! All help is appreciated. Also see [Wiki - Planning](https://github.com/tdewolff/canvas/wiki/Planning) for an inexhaustive list of ideas and TODOs. ## Features -- Path segment types: MoveTo, LineTo, QuadTo, CubeTo, ArcTo, Close +- Path segment types: MoveTo, LineTo, QuadTo, CubeTo, ArcTo, Close (https://github.com/tdewolff/canvas/wiki/Paths) - Precise path flattening, stroking, and dashing for all segment type uing papers (see below) - Smooth spline generation through points for open and closed paths -- Path boolean operations: AND, OR, XOR, NOT, Divide +- Path boolean operations: AND, OR, XOR, NOT, Divide (https://github.com/tdewolff/canvas/wiki/Boolean-operations) - LaTeX to path conversion (native Go and CGO implementations available) -- Font formats support +- Font formats support (https://github.com/tdewolff/canvas/wiki/Fonts-&-Text) - - SFNT (such as TTF, OTF, WOFF, WOFF2, EOT) supporting TrueType, CFF, and CFF2 tables - HarfBuzz for text shaping (native Go and CGO implementations available) - FriBidi for text bidirectionality (native Go and CGO implementations available) - Donald Knuth's line breaking algorithm for text layout - sRGB compliance (use `SRGBColorSpace`, only available for rasterizer) - Font rendering with gamma correction of 1.43 -- Rendering targets +- Rendering targets (https://github.com/tdewolff/canvas/wiki/Renderers) - - Raster images (PNG, GIF, JPEG, TIFF, BMP, WEBP) - - PDF - - SVG and SVGZ @@ -130,6 +128,7 @@ This is a non-exhaustive list of library users I've come across. PRs are welcome - [S.H. Kim and Y.J. Ahn, An approximation of circular arcs by quartic Bezier curves, Computer-Aided Design 39 (2007, p. 490--493)](https://doi.org/10.1016/j.cad.2007.01.004) - D.E. Knuth and M.F. Plass, Breaking Paragraphs into Lines, Software: Practive and Experience 11 (1981), p. 1119--1184 - L. Subramaniam, Partition of a non-simple polygon into simple pologons, 2003 +- [A simple algorithm for Boolean operations on polygons](https://doi.org/10.1016/j.advengsoft.2013.04.004) ## License diff --git a/examples/gio/main.go b/examples/gio/main.go deleted file mode 100644 index 097c7c70..00000000 --- a/examples/gio/main.go +++ /dev/null @@ -1,47 +0,0 @@ -package main - -import ( - "log" - "os" - - "gioui.org/app" - "gioui.org/io/system" - "gioui.org/layout" - "gioui.org/op" - "github.com/tdewolff/canvas" - "github.com/tdewolff/canvas/renderers/gio" -) - -func main() { - go func() { - w := app.NewWindow() - if err := loop(w); err != nil { - log.Fatal(err) - } - os.Exit(0) - }() - app.Main() -} - -func loop(w *app.Window) error { - var ops op.Ops - for { - e := <-w.Events() - switch e := e.(type) { - case system.DestroyEvent: - return e.Err - case system.FrameEvent: - gtx := layout.NewContext(&ops, e) - - layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { - c := gio.NewContain(gtx, 200.0, 100.0) - ctx := canvas.NewContext(c) - if err := canvas.DrawPreview(ctx); err != nil { - panic(err) - } - return c.Dimensions() - }) - e.Frame(gtx.Ops) - } - } -} diff --git a/go.mod b/go.mod index a86d1a3d..08efe925 100644 --- a/go.mod +++ b/go.mod @@ -5,74 +5,70 @@ go 1.22.0 toolchain go1.23.2 require ( - fyne.io/fyne/v2 v2.4.1 - gioui.org v0.7.1 + fyne.io/fyne/v2 v2.5.2 github.com/ByteArena/poly2tri-go v0.0.0-20170716161910-d102ad91854f github.com/Kagami/go-avif v0.1.0 github.com/benoitkugler/textprocessing v0.0.3 - github.com/go-fonts/latin-modern v0.3.1 + github.com/go-fonts/latin-modern v0.3.3 github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231223183121-56fa3ac82ce7 - github.com/go-text/typesetting v0.1.2 + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a + github.com/go-text/typesetting v0.2.0 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/kolesa-team/go-webp v1.0.4 - github.com/paulmach/orb v0.10.0 - github.com/paulmach/osm v0.7.1 - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 - github.com/tdewolff/argp v0.0.0-20240622014751-a1d21f2fce51 + github.com/paulmach/orb v0.11.1 + github.com/paulmach/osm v0.8.0 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c + github.com/tdewolff/argp v0.0.0-20240625173203-87b04d5d3e52 github.com/tdewolff/font v0.0.0-20240728193914-9dc6e3441d03 - github.com/tdewolff/minify/v2 v2.20.5 - github.com/tdewolff/parse/v2 v2.7.15 + github.com/tdewolff/minify/v2 v2.21.1 + github.com/tdewolff/parse/v2 v2.7.19 github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 - github.com/wcharczuk/go-chart/v2 v2.1.1 - golang.org/x/image v0.18.0 - golang.org/x/text v0.16.0 - gonum.org/v1/plot v0.14.0 + github.com/wcharczuk/go-chart/v2 v2.1.2 + golang.org/x/image v0.21.0 + golang.org/x/text v0.19.0 + gonum.org/v1/plot v0.15.0 ) require ( filippo.io/edwards25519 v1.1.0 // indirect - fyne.io/systray v1.10.1-0.20230722100817-88df1e0ffa9a // indirect - gioui.org/shader v1.0.8 // indirect - git.sr.ht/~sbinet/gg v0.5.0 // indirect + fyne.io/systray v1.11.0 // indirect + git.sr.ht/~sbinet/gg v0.6.0 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect - github.com/andybalholm/brotli v1.1.0 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect github.com/benoitkugler/textlayout v0.3.0 // indirect - github.com/blend/go-sdk v1.20220411.3 // indirect github.com/campoy/embedmd v1.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fredbi/uri v1.1.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/fyne-io/glfw-js v0.0.0-20220517201726-bebc2019cd33 // indirect - github.com/fyne-io/image v0.0.0-20230811065323-ed435dc8bca6 // indirect - github.com/go-fonts/liberation v0.3.1 // indirect - github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect + github.com/fyne-io/glfw-js v0.0.0-20240101223322-6e1efdc71b7a // indirect + github.com/fyne-io/image v0.0.0-20240417123036-dc0ee9e7c964 // indirect + github.com/go-fonts/liberation v0.3.3 // indirect + github.com/go-latex/latex v0.0.0-20240709081214-31cef3c7570e // indirect github.com/go-pdf/fpdf v0.9.0 // indirect github.com/go-sql-driver/mysql v1.8.1 // indirect - github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8 // indirect + github.com/go-text/render v0.2.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/jeandeaual/go-locale v0.0.0-20240223122105-ce5225dcaa49 // indirect github.com/jmoiron/sqlx v1.4.0 // indirect github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect + github.com/nicksnyder/go-i18n/v2 v2.4.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/tevino/abool v1.2.0 // indirect - go.mongodb.org/mongo-driver v1.12.1 // indirect + github.com/rymdport/portal v0.2.6 // indirect + go.mongodb.org/mongo-driver v1.17.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - honnef.co/go/js/dom v0.0.0-20231030024858-cb489e859d05 // indirect ) require ( - gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 // indirect github.com/fyne-io/gl-js v0.0.0-20230506162202-1fdaa286a934 // indirect github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect - github.com/stretchr/testify v1.8.4 // indirect - github.com/yuin/goldmark v1.6.0 // indirect - golang.org/x/exp v0.0.0-20240707233637-46b078467d37 // indirect - golang.org/x/exp/shiny v0.0.0-20240707233637-46b078467d37 // indirect - golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a // indirect - golang.org/x/net v0.24.0 - golang.org/x/sys v0.22.0 // indirect - star-tex.org/x/tex v0.4.0 + github.com/stretchr/testify v1.9.0 // indirect + github.com/yuin/goldmark v1.7.8 // indirect + golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c // indirect + golang.org/x/net v0.30.0 + golang.org/x/sys v0.26.0 // indirect + star-tex.org/x/tex v0.5.0 ) diff --git a/go.sum b/go.sum index 51218f51..0032bf65 100644 --- a/go.sum +++ b/go.sum @@ -37,28 +37,19 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -eliasnaur.com/font v0.0.0-20230308162249-dd43949cb42d h1:ARo7NCVvN2NdhLlJE9xAbKweuI9L6UgfTbYb0YwPacY= -eliasnaur.com/font v0.0.0-20230308162249-dd43949cb42d/go.mod h1:OYVuxibdk9OSLX8vAqydtRPP87PyTFcT9uH3MlEGBQA= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -fyne.io/fyne/v2 v2.4.1 h1:Es100N6HIhJGg8H2ZAS2j5H/YibfxecXHs2V4A4hbq8= -fyne.io/fyne/v2 v2.4.1/go.mod h1:AWM1iPM2YfliduZ4u/kQzP9E6ARIWm0gg+57GpYzWro= -fyne.io/systray v1.10.1-0.20230722100817-88df1e0ffa9a h1:6Xf9fP3/mt72NrqlQhJWhQGcNf6GoG9X96NTaXr+K6A= -fyne.io/systray v1.10.1-0.20230722100817-88df1e0ffa9a/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= -gioui.org v0.3.1 h1:hslYkrkIWvx28Mxe3A87opl+8s9mnWsnWmPDh11+zco= -gioui.org v0.3.1/go.mod h1:2atiYR4upH71/6ehnh6XsUELa7JZOrOHHNMDxGBZF0Q= -gioui.org v0.7.1 h1:l7OVj47n1z8acaszQ6Wlu+Rxme+HqF3q8b+Fs68+x3w= -gioui.org v0.7.1/go.mod h1:5Kw/q7R1BWc5MKStuTNvhCgSrRqbfHc9Dzfjs4IGgZo= -gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/shader v1.0.8 h1:6ks0o/A+b0ne7RzEqRZK5f4Gboz2CfG+mVliciy6+qA= -gioui.org/shader v1.0.8/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= +fyne.io/fyne/v2 v2.5.2 h1:eSyGTmSkv10yAdAeHpDet6u2KkKxOGFc14kQu81We7Q= +fyne.io/fyne/v2 v2.5.2/go.mod h1:26gqPDvtaxHeyct+C0BBjuGd2zwAJlPkUGSBrb+d7Ug= +fyne.io/systray v1.11.0 h1:D9HISlxSkx+jHSniMBR6fCFOUjk1x/OOOJLa9lJYAKg= +fyne.io/systray v1.11.0/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs= git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= -git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= -git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= +git.sr.ht/~sbinet/gg v0.6.0 h1:RIzgkizAk+9r7uPzf/VfbJHBMKUr0F5hRFxTUGMnt38= +git.sr.ht/~sbinet/gg v0.6.0/go.mod h1:uucygbfC9wVPQIfrmwM2et0imr8L7KQWywX0xpFMm94= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ByteArena/poly2tri-go v0.0.0-20170716161910-d102ad91854f h1:l7moT9o/v/9acCWA64Yz/HDLqjcRTvc0noQACi4MsJw= github.com/ByteArena/poly2tri-go v0.0.0-20170716161910-d102ad91854f/go.mod h1:vIOkSdX3NDCPwgu8FIuTat2zDF0FPXXQ0RYFRy+oQic= @@ -68,8 +59,8 @@ github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -82,8 +73,6 @@ github.com/benoitkugler/textprocessing v0.0.3 h1:Q2X+Z6vxuW5Bxn1R9RaNt0qcprBfpc2 github.com/benoitkugler/textprocessing v0.0.3/go.mod h1:/4bLyCf1QYywunMK3Gf89Nhb50YI/9POewqrLxWhxd4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blend/go-sdk v1.20220411.3 h1:GFV4/FQX5UzXLPwWV03gP811pj7B8J2sbuq+GJQofXc= -github.com/blend/go-sdk v1.20220411.3/go.mod h1:7lnH8fTi6U4i1fArEXRyOIY2E1X4MALg09qsQqY1+ak= github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -114,51 +103,43 @@ github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNu github.com/fredbi/uri v1.1.0 h1:OqLpTXtyRg9ABReqvDGdJPqZUxs8cyBDOMXBbskCaB8= github.com/fredbi/uri v1.1.0/go.mod h1:aYTUoAXBOq7BLfVJ8GnKmfcuURosB1xyHDIfWeC/iW4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fyne-io/gl-js v0.0.0-20230506162202-1fdaa286a934 h1:dZC5aKobSN07hf71oMivxUmAofFja5GrfPK2rBlttX4= github.com/fyne-io/gl-js v0.0.0-20230506162202-1fdaa286a934/go.mod h1:d4clgH0/GrRwWjRzJJQXxT/h1TyuNSfF/X64zb/3Ggg= -github.com/fyne-io/glfw-js v0.0.0-20220517201726-bebc2019cd33 h1:0Ayg0/do/sqX2R7NonoLZvWxGrd9utTVf3A0QvCbC88= -github.com/fyne-io/glfw-js v0.0.0-20220517201726-bebc2019cd33/go.mod h1:gLRWYfYnMA9TONeppRSikMdXlHQ97xVsPojddUv3b/E= -github.com/fyne-io/image v0.0.0-20230811065323-ed435dc8bca6 h1:kZNUHSV3ZTddRiWy5JHK6RgB3zdH/875SYXmt3EoNvQ= -github.com/fyne-io/image v0.0.0-20230811065323-ed435dc8bca6/go.mod h1:aX1w6epS9BQn2bePY+3rkQejetaffeFhXl0s8QjXJJk= +github.com/fyne-io/glfw-js v0.0.0-20240101223322-6e1efdc71b7a h1:ybgRdYvAHTn93HW79bLiBiJwVL4jVeyGQRZMgImoeWs= +github.com/fyne-io/glfw-js v0.0.0-20240101223322-6e1efdc71b7a/go.mod h1:gsGA2dotD4v0SR6PmPCYvS9JuOeMwAtmfvDE7mbYXMY= +github.com/fyne-io/image v0.0.0-20240417123036-dc0ee9e7c964 h1:0pTELtjlVAVGSazfwRNcqTVzqmkWb1GsNozCmmZfdZA= +github.com/fyne-io/image v0.0.0-20240417123036-dc0ee9e7c964/go.mod h1:J9Uunu842kOcTjzQj4Eq8XIDmF55szvT1PTS1cUb1UE= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.3.1 h1:/cT8A7uavYKvglYXvrdDw4oS5ZLkcOU22fa2HJ1/JVM= -github.com/go-fonts/latin-modern v0.3.1/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= -github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM= -github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= +github.com/go-fonts/dejavu v0.3.4 h1:Qqyx9IOs5CQFxyWTdvddeWzrX0VNwUAvbmAzL0fpjbc= +github.com/go-fonts/dejavu v0.3.4/go.mod h1:D1z0DglIz+lmpeNYMYlxW4r22IhcdOYnt+R3PShU/Kg= +github.com/go-fonts/latin-modern v0.3.3 h1:g2xNgI8yzdNzIVm+qvbMryB6yGPe0pSMss8QT3QwlJ0= +github.com/go-fonts/latin-modern v0.3.3/go.mod h1:tHaiWDGze4EPB0Go4cLT5M3QzRY3peya09Z/8KSCrpY= +github.com/go-fonts/liberation v0.3.3 h1:tM/T2vEOhjia6v5krQu8SDDegfH1SfXVRUNNKpq0Usk= +github.com/go-fonts/liberation v0.3.3/go.mod h1:eUAzNRuJnpSnd1sm2EyloQfSOT79pdw7X7++Ri+3MCU= github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 h1:5BVwOaUSBTlVZowGO6VZGw2H/zl9nrd3eCZfYV+NfQA= github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211213063430-748e38ca8aec/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231031225837-d1c54e5847d0 h1:AVjIOqWCI1OpnJleOy4s3F4ULnrizAqhadD+NI3PZyc= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231031225837-d1c54e5847d0/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231223183121-56fa3ac82ce7 h1:7tf/0aw5DxRQjr7WaNqgtjidub6v21L2cogKIbMcTYw= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231223183121-56fa3ac82ce7/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+xzxf1jTJKMKZw3H0swfWk9RpWbBbDK5+0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-latex/latex v0.0.0-20240709081214-31cef3c7570e h1:xcdj0LWnMSIU1j8+jIeJyfvk6SjgJedFQssSqFthJ2E= +github.com/go-latex/latex v0.0.0-20240709081214-31cef3c7570e/go.mod h1:J4SAGzkcl+28QWi7yz72tyC/4aGnppOvya+AEv4TaAQ= github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8 h1:VkKnvzbvHqgEfm351rfr8Uclu5fnwq8HP2ximUzJsBM= -github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8/go.mod h1:h29xCucjNsDcYb7+0rJokxVwYAq+9kQ19WiFuBKkYtc= -github.com/go-text/typesetting v0.0.0-20231013144250-6cc35dbfae7d h1:HrdwTlHVMdi9nOW7ZnYiLmIT1hJHvipIwM0aX3rKn8I= -github.com/go-text/typesetting v0.0.0-20231013144250-6cc35dbfae7d/go.mod h1:evDBbvNR/KaVFZ2ZlDSOWWXIUKq0wCOEtzLxRM8SG3k= -github.com/go-text/typesetting v0.1.1/go.mod h1:d22AnmeKq/on0HNv73UFriMKc4Ez6EqZAofLhAzpSzI= -github.com/go-text/typesetting v0.1.2 h1:KmZOfoxrrYgghohzXgNY7aQPgQ4W+QeKPeRI8yqpDDE= -github.com/go-text/typesetting v0.1.2/go.mod h1:2+owI/sxa73XA581LAzVuEBZ3WEEV2pXeDswCH/3i1I= +github.com/go-text/render v0.2.0 h1:LBYoTmp5jYiJ4NPqDc2pz17MLmA3wHw1dZSVGcOdeAc= +github.com/go-text/render v0.2.0/go.mod h1:CkiqfukRGKJA5vZZISkjSYrcdtgKQWRa2HIzvwNN5SU= github.com/go-text/typesetting v0.2.0 h1:fbzsgbmk04KiWtE+c3ZD4W2nmCRzBqrqQOvYlwAOdho= github.com/go-text/typesetting v0.2.0/go.mod h1:2+owI/sxa73XA581LAzVuEBZ3WEEV2pXeDswCH/3i1I= -github.com/go-text/typesetting-utils v0.0.0-20230616150549-2a7df14b6a22 h1:LBQTFxP2MfsyEDqSKmUBZaDuDHN1vpqDyOZjcqS7MYI= -github.com/go-text/typesetting-utils v0.0.0-20230616150549-2a7df14b6a22/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= +github.com/go-text/typesetting-utils v0.0.0-20240317173224-1986cbe96c66 h1:GUrm65PQPlhFSKjLPGOZNPNxLCybjzjYBzjfoBGaDUY= +github.com/go-text/typesetting-utils v0.0.0-20240317173224-1986cbe96c66/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -209,8 +190,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -237,7 +218,6 @@ github.com/gopherjs/gopherjs v0.0.0-20211219123610-ec9572f70e60/go.mod h1:cz9oNY github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/goxjs/gl v0.0.0-20210104184919-e3fafc6f8f2a/go.mod h1:dy/f2gjY09hwVfIyATps4G2ai7/hLwLkc5TrPqONuXY= -github.com/goxjs/glfw v0.0.0-20191126052801-d2efb5f20838/go.mod h1:oS8P8gVOT4ywTcjV6wZlOU4GuVFQ8F5328KY3MJ79CY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -262,6 +242,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jeandeaual/go-locale v0.0.0-20240223122105-ce5225dcaa49 h1:Po+wkNdMmN+Zj1tDsJQy7mJlPlwGNQd9JZoPjObagf8= +github.com/jeandeaual/go-locale v0.0.0-20240223122105-ce5225dcaa49/go.mod h1:YiutDnxPRLk5DLUFj6Rw4pRBBURZY07GFr54NdV9mQg= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= @@ -277,7 +259,6 @@ github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e github.com/kolesa-team/go-webp v1.0.4 h1:wQvU4PLG/X7RS0vAeyhiivhLRoxfLVRlDq4I3frdxIQ= github.com/kolesa-team/go-webp v1.0.4/go.mod h1:oMvdivD6K+Q5qIIkVC2w4k2ZUnI1H+MyP7inwgWq9aA= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -306,18 +287,22 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nicksnyder/go-i18n/v2 v2.4.1 h1:zwzjtX4uYyiaU02K5Ia3zSkpJZrByARkRB4V3YPrr0g= +github.com/nicksnyder/go-i18n/v2 v2.4.1/go.mod h1:++Pl70FR6Cki7hdzZRnEEqdc2dJt+SAGotyFg/SvZMk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/paulmach/orb v0.1.3/go.mod h1:VFlX/8C+IQ1p6FTRRKzKoOPJnvEtA5G0Veuqwbu//Vk= -github.com/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s= -github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= -github.com/paulmach/osm v0.7.1 h1:dc84gLa4S/zCCqpBxb6jXTkN5dCI7VK7edt/tZTFG50= -github.com/paulmach/osm v0.7.1/go.mod h1:v0vZa0rKnCsO8ovx0Z+hR9BWVD+vO4ogLOXcV18/0yk= +github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU= +github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= +github.com/paulmach/osm v0.8.0 h1:vHxgnljlCUTr8TnPYdL1nmJNeDs9DsFi3s/F5URJ4vg= +github.com/paulmach/osm v0.8.0/go.mod h1:p3mtw8ytr+f/YmaZQrJCSz/eQMJmQkDTx+sUaRFE+8U= github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= @@ -331,6 +316,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/rymdport/portal v0.2.6 h1:HWmU3gORu7vWcpr7VSwUS2Xx1HtJXVcUuTqEZcMEsIg= +github.com/rymdport/portal v0.2.6/go.mod h1:kFF4jslnJ8pD5uCi17brj/ODlfIidOxlgUDTO5ncnC4= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= @@ -355,32 +342,29 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tdewolff/argp v0.0.0-20240622014751-a1d21f2fce51 h1:EShaY4atYX+KmxoQOsaZMNKpWFuaykfhEqXz+zWiSWk= -github.com/tdewolff/argp v0.0.0-20240622014751-a1d21f2fce51/go.mod h1:e1dkYfBKpwfFhwXWrQpEU2ClFgxYOT4SrHd6fKD7nIE= +github.com/tdewolff/argp v0.0.0-20240625173203-87b04d5d3e52 h1:bHOA+qzNf3CwchHAIA1k68QgERWiOgZMIh3qoOB3DzA= +github.com/tdewolff/argp v0.0.0-20240625173203-87b04d5d3e52/go.mod h1:e1dkYfBKpwfFhwXWrQpEU2ClFgxYOT4SrHd6fKD7nIE= github.com/tdewolff/font v0.0.0-20240728193914-9dc6e3441d03 h1:8gZpGeUF+0bYYNDJCWXG64YH4WdSFZDFoWp1RKil1Qg= github.com/tdewolff/font v0.0.0-20240728193914-9dc6e3441d03/go.mod h1:wiFLtNiPVz+WWkn1CekBWgSEEV5PTR7qae3wKbU0xd0= -github.com/tdewolff/minify/v2 v2.20.5 h1:IbJpmpAFESnuJPdsvFBJWsDcXE5qHsmaVQrRqhOI9sI= -github.com/tdewolff/minify/v2 v2.20.5/go.mod h1:N78HtaitkDYAWXFbqhWX/LzgwylwudK0JvybGDVQ+Mw= -github.com/tdewolff/parse/v2 v2.7.15 h1:hysDXtdGZIRF5UZXwpfn3ZWRbm+ru4l53/ajBRGpCTw= -github.com/tdewolff/parse/v2 v2.7.15/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= +github.com/tdewolff/minify/v2 v2.21.1 h1:AAf5iltw6+KlUvjRNPAPrANIXl3XEJNBBzuZom5iCAM= +github.com/tdewolff/minify/v2 v2.21.1/go.mod h1:PoqFH8ugcuTUvKqVM9vOqXw4msxvuhL/DTmV5ZXhSCI= +github.com/tdewolff/parse/v2 v2.7.19 h1:7Ljh26yj+gdLFEq/7q9LT4SYyKtwQX4ocNrj45UCePg= +github.com/tdewolff/parse/v2 v2.7.19/go.mod h1:3FbJWZp3XT9OWVN3Hmfp0p/a08v4h8J9W1aghka0soA= github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tdewolff/test v1.0.11-0.20231101010635-f1265d231d52/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 h1:IkjBCtQOOjIn03u/dMQK9g+Iw9ewps4mCl1nB8Sscbo= github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= -github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= -github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/wcharczuk/go-chart/v2 v2.1.1 h1:2u7na789qiD5WzccZsFz4MJWOJP72G+2kUuJoSNqWnE= -github.com/wcharczuk/go-chart/v2 v2.1.1/go.mod h1:CyCAUt2oqvfhCl6Q5ZvAZwItgpQKZOkCJGb+VGv6l14= +github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E= +github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -389,14 +373,14 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68= -github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= +github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= -go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE= -go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= +go.mongodb.org/mongo-driver v1.17.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM= +go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -417,6 +401,9 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -428,21 +415,15 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/exp v0.0.0-20240707233637-46b078467d37 h1:uLDX+AfeFCct3a2C7uIWBKMJIR3CJMhcgfrUAqjRK6w= -golang.org/x/exp v0.0.0-20240707233637-46b078467d37/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/exp/shiny v0.0.0-20231006140011-7918f672742d h1:grE48C8cjIY0aiHVmFyYgYxxSARQWBABLXKZfQPrBhY= -golang.org/x/exp/shiny v0.0.0-20231006140011-7918f672742d/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= -golang.org/x/exp/shiny v0.0.0-20240707233637-46b078467d37 h1:SOSg7+sueresE4IbmmGM60GmlIys+zNX63d6/J4CMtU= -golang.org/x/exp/shiny v0.0.0-20240707233637-46b078467d37/go.mod h1:3F+MieQB7dRYLTmnncoFbb1crS5lfQoTfDgQy6K4N0o= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= -golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= +golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= +golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -458,10 +439,8 @@ golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee/go.mod h1:pe2sM7Uk+2Su1y7u/6Z8KJ24D7lepUjFZbhFOrmDfuQ= -golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe h1:lrXv4yHeD9FA8PSJATWowP1QvexpyAPWmPia+Kbzql8= -golang.org/x/mobile v0.0.0-20231006135142-2b44d11868fe/go.mod h1:BrnXpEObnFxpaT75Jo9hsCazwOWcp7nVIa8NNuH5cuA= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a h1:sYbmY3FwUWCBTodZL1S3JUuOvaW6kM2o+clDzzDNBWg= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a/go.mod h1:Ede7gF0KGoHlj822RtphAHK1jLdrcuRBZg0sF1Q+SPc= +golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c h1:zuNS/LWsEpPTLfrmBkis6Xofw3nieAqB4hYLn8+uswk= +golang.org/x/mobile v0.0.0-20241016134751-7ff83004ec2c/go.mod h1:snk1Mn2ZpdKCt90JPEsDh4sL3ReK520U2t0d7RHBnSU= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= @@ -473,6 +452,9 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -514,8 +496,12 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -541,6 +527,9 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -584,19 +573,26 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -606,11 +602,14 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -671,14 +670,16 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= -gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= -gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= -gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= +gonum.org/v1/plot v0.15.0 h1:SIFtFNdZNWLRDRVjD6CYxdawcpJDWySZehJGpv1ukkw= +gonum.org/v1/plot v0.15.0/go.mod h1:3Nx4m77J4T/ayr/b8dQ8uGRmZF6H3eTqliUExDrQHnM= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -783,8 +784,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -795,9 +797,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= -honnef.co/go/js/dom v0.0.0-20231030024858-cb489e859d05 h1:RfirDq7o2ELiU+mAxRB4AO3u7czT1QEg6SZgSBXeSus= -honnef.co/go/js/dom v0.0.0-20231030024858-cb489e859d05/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -811,5 +810,5 @@ rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -star-tex.org/x/tex v0.4.0 h1:AXUwgpnHLCxZUWW3qrmjv6ezNhH3PjUVBuLLejz2cgU= -star-tex.org/x/tex v0.4.0/go.mod h1:w91ycsU/DkkCr7GWr60GPWqp3gn2U+6VX71T0o8k8qE= +star-tex.org/x/tex v0.5.0 h1:KXxY58YioX9kLvjEzIl61JH4IvWob3FSQQ5DiU3RQ3M= +star-tex.org/x/tex v0.5.0/go.mod h1:k7py0yK2wZM4aJSgN1RonpvnxgEgIqC0i/x7kKR9GZI= diff --git a/renderers/gio/gio.go b/renderers/gio/gio.go deleted file mode 100644 index 1ecc99b8..00000000 --- a/renderers/gio/gio.go +++ /dev/null @@ -1,169 +0,0 @@ -package gio - -import ( - "image" - "image/color" - - "gioui.org/f32" - "gioui.org/layout" - "gioui.org/op" - "gioui.org/op/clip" - "gioui.org/op/paint" - "github.com/tdewolff/canvas" -) - -type Gio struct { - ops *op.Ops - width, height float64 - xScale, yScale float64 - dimensions layout.Dimensions -} - -// New returns a Gio renderer of fixed size. -func New(gtx layout.Context, width, height float64) *Gio { - dimensions := layout.Dimensions{Size: image.Point{int(width + 0.5), int(height + 0.5)}} - return &Gio{ - ops: gtx.Ops, - width: width, - height: height, - xScale: 1.0, - yScale: 1.0, - dimensions: dimensions, - } -} - -// NewContain returns a Gio renderer that fills the constraints either horizontally or vertically, whichever is met first. -func NewContain(gtx layout.Context, width, height float64) *Gio { - xScale := float64(gtx.Constraints.Max.X-gtx.Constraints.Min.X) / width - yScale := float64(gtx.Constraints.Max.Y-gtx.Constraints.Min.Y) / height - if yScale < xScale { - xScale = yScale - } else { - yScale = xScale - } - - dimensions := layout.Dimensions{Size: image.Point{int(width*xScale + 0.5), int(height*yScale + 0.5)}} - return &Gio{ - ops: gtx.Ops, - width: width, - height: height, - xScale: xScale, - yScale: yScale, - dimensions: dimensions, - } -} - -// NewStretch returns a Gio renderer that stretches the view to fit the constraints. -func NewStretch(gtx layout.Context, width, height float64) *Gio { - xScale := float64(gtx.Constraints.Max.X-gtx.Constraints.Min.X) / width - yScale := float64(gtx.Constraints.Max.Y-gtx.Constraints.Min.Y) / height - - dimensions := layout.Dimensions{Size: image.Point{int(width*xScale + 0.5), int(height*yScale + 0.5)}} - return &Gio{ - ops: gtx.Ops, - width: width, - height: height, - xScale: xScale, - yScale: yScale, - dimensions: dimensions, - } -} - -// Dimensions returns the dimensions for Gio. -func (r *Gio) Dimensions() layout.Dimensions { - return r.dimensions -} - -// Size returns the size of the canvas in millimeters. -func (r *Gio) Size() (float64, float64) { - return r.width, r.height -} - -func (r *Gio) point(p canvas.Point) f32.Point { - return f32.Point{float32(r.xScale * p.X), float32(r.yScale * (r.height - p.Y))} -} - -func (r *Gio) renderPath(path *canvas.Path, fill canvas.Paint) { - path = path.ReplaceArcs() - - p := clip.Path{} - p.Begin(r.ops) - for scanner := path.Scanner(); scanner.Scan(); { - switch scanner.Cmd() { - case canvas.MoveToCmd: - p.MoveTo(r.point(scanner.End())) - case canvas.LineToCmd: - p.LineTo(r.point(scanner.End())) - case canvas.QuadToCmd: - p.QuadTo(r.point(scanner.CP1()), r.point(scanner.End())) - case canvas.CubeToCmd: - p.CubeTo(r.point(scanner.CP1()), r.point(scanner.CP2()), r.point(scanner.End())) - case canvas.ArcToCmd: - // TODO: ArcTo - p.LineTo(r.point(scanner.End())) - case canvas.CloseCmd: - p.Close() - } - } - - shape := clip.Outline{p.End()} - defer shape.Op().Push(r.ops).Pop() - - if fill.IsColor() { - paint.Fill(r.ops, toNRGBA(fill.Color)) - } else if fill.IsGradient() { - if g, ok := fill.Gradient.(*canvas.LinearGradient); ok && len(g.Stops) == 2 { - linearGradient := paint.LinearGradientOp{} - linearGradient.Stop1 = r.point(g.Start) - linearGradient.Stop2 = r.point(g.End) - linearGradient.Color1 = toNRGBA(g.Stops[0].Color) - linearGradient.Color2 = toNRGBA(g.Stops[1].Color) - linearGradient.Add(r.ops) - paint.PaintOp{}.Add(r.ops) - } - } -} - -// RenderPath renders a path to the canvas using a style and a transformation matrix. -func (r *Gio) RenderPath(path *canvas.Path, style canvas.Style, m canvas.Matrix) { - if style.HasFill() { - r.renderPath(path.Transform(m), style.Fill) - } - - if style.HasStroke() { - if style.IsDashed() { - path = path.Dash(style.DashOffset, style.Dashes...) - } - path = path.Stroke(style.StrokeWidth, style.StrokeCapper, style.StrokeJoiner, canvas.Tolerance) - r.renderPath(path.Transform(m), style.Stroke) - } -} - -// RenderText renders a text object to the canvas using a transformation matrix. -func (r *Gio) RenderText(text *canvas.Text, m canvas.Matrix) { - text.RenderAsPath(r, m, 0.0) -} - -// RenderImage renders an image to the canvas using a transformation matrix. -func (r *Gio) RenderImage(img image.Image, m canvas.Matrix) { - paint.NewImageOp(img).Add(r.ops) - m = canvas.Identity.Scale(r.xScale, r.yScale).Mul(m) - m = m.Translate(0.0, float64(img.Bounds().Max.Y)) - trans := op.Affine(f32.NewAffine2D( - float32(m[0][0]), -float32(m[0][1]), float32(m[0][2]), - -float32(m[1][0]), float32(m[1][1]), float32(r.yScale*r.height-m[1][2]), - )).Push(r.ops) - paint.PaintOp{}.Add(r.ops) - trans.Pop() -} - -func toNRGBA(col color.Color) color.NRGBA { - r, g, b, a := col.RGBA() - if a == 0 { - return color.NRGBA{} - } - r = (r * 0xffff) / a - g = (g * 0xffff) / a - b = (b * 0xffff) / a - return color.NRGBA{R: uint8(r >> 8), G: uint8(g >> 8), B: uint8(b >> 8), A: uint8(a >> 8)} -} diff --git a/text/harfbuzz.go b/text/harfbuzz.go index 386343f5..af7644c8 100644 --- a/text/harfbuzz.go +++ b/text/harfbuzz.go @@ -8,10 +8,10 @@ import ( "os" "strings" + typesettingFont "github.com/go-text/typesetting/font" + "github.com/go-text/typesetting/font/opentype" "github.com/go-text/typesetting/harfbuzz" "github.com/go-text/typesetting/language" - fontapi "github.com/go-text/typesetting/opentype/api/font" - "github.com/go-text/typesetting/opentype/loader" "github.com/tdewolff/font" ) @@ -22,16 +22,16 @@ type Shaper struct { // NewShaper returns a new text shaper. func NewShaper(b []byte, _ int) (Shaper, error) { - loader, err := loader.NewLoader(bytes.NewReader(b)) + loader, err := opentype.NewLoader(bytes.NewReader(b)) if err != nil { return Shaper{}, err } - font, err := fontapi.NewFont(loader) + font, err := typesettingFont.NewFont(loader) if err != nil { return Shaper{}, err } return Shaper{ - font: harfbuzz.NewFont(&fontapi.Face{Font: font}), + font: harfbuzz.NewFont(&typesettingFont.Face{Font: font}), }, nil } diff --git a/text/script_string.go b/text/script_string.go index d35f51c9..1dc3bdbf 100644 --- a/text/script_string.go +++ b/text/script_string.go @@ -1,4 +1,4 @@ -// +build !harfbuzz +//go:build !harfbuzz // Code generated by "stringer -type Script"; DO NOT EDIT. @@ -11,314 +11,314 @@ func _() { // Re-run the stringer command to generate them again. var x [1]struct{} _ = x[ScriptInvalid-0] - _ = x[ScriptCommon-2054781305] - _ = x[ScriptInherited-2053729896] - _ = x[ScriptUnknown-2054847098] - _ = x[Arabic-1634885986] - _ = x[Armenian-1634889070] - _ = x[Bengali-1650814567] - _ = x[Cyrillic-1668903532] - _ = x[Devanagari-1684371041] - _ = x[Georgian-1734700914] - _ = x[Greek-1735550315] - _ = x[Gujarati-1735748210] - _ = x[Gurmukhi-1735750261] - _ = x[Hangul-1751215719] - _ = x[Han-1751215721] - _ = x[Hebrew-1751474802] - _ = x[Hiragana-1751741025] - _ = x[Kannada-1802396769] - _ = x[Katakana-1801547361] - _ = x[Lao-1818324847] - _ = x[Latin-1818326126] - _ = x[Malayalam-1835825517] - _ = x[Oriya-1869773153] - _ = x[Tamil-1952542060] - _ = x[Telugu-1952803957] - _ = x[Thai-1952997737] - _ = x[Tibetan-1953063540] - _ = x[Bopomofo-1651470447] - _ = x[Braille-1651663209] - _ = x[CanadianSyllabics-1667329651] - _ = x[Cherokee-1667786098] - _ = x[Ethiopic-1702127721] - _ = x[Khmer-1802005874] - _ = x[Mongolian-1836019303] - _ = x[Myanmar-1836674418] - _ = x[Ogham-1869046125] - _ = x[Runic-1920298610] - _ = x[Sinhala-1936289384] - _ = x[Syriac-1937338979] - _ = x[Thaana-1952997729] - _ = x[Yi-2036951401] - _ = x[Deseret-1685287540] - _ = x[Gothic-1735357544] - _ = x[OldItalic-1769234796] - _ = x[Buhid-1651861604] - _ = x[Hanunoo-1751215727] - _ = x[Tagalog-1952935015] - _ = x[Tagbanwa-1952540514] - _ = x[Cypriot-1668313716] - _ = x[Limbu-1818848610] - _ = x[LinearB-1818848866] - _ = x[Osmanya-1869835617] - _ = x[Shavian-1936220535] - _ = x[TaiLe-1952541797] - _ = x[Ugaritic-1969709426] - _ = x[Buginese-1651861353] - _ = x[Coptic-1668247668] - _ = x[Glagolitic-1735156071] - _ = x[Kharoshthi-1802002802] - _ = x[NewTaiLue-1952541813] - _ = x[OldPersian-2020631919] - _ = x[SylotiNagri-1937337455] - _ = x[Tifinagh-1952869991] - _ = x[Balinese-1650551913] - _ = x[Cuneiform-2020832632] - _ = x[Nko-1852534639] - _ = x[PhagsPa-1885888871] - _ = x[Phoenician-1885892216] - _ = x[Carian-1667330665] - _ = x[Cham-1667785069] - _ = x[KayahLi-1801546857] - _ = x[Lepcha-1818587235] - _ = x[Lycian-1819894633] - _ = x[Lydian-1819894889] - _ = x[OlChiki-1869374315] - _ = x[Rejang-1919577703] - _ = x[Saurashtra-1935766898] - _ = x[Sundanese-1937075812] - _ = x[Vai-1986095465] - _ = x[Avestan-1635152756] - _ = x[Bamum-1650552181] - _ = x[EgyptianHieroglyphs-1701280112] - _ = x[ImperialAramaic-1634889065] - _ = x[InscriptionalPahlavi-1885891689] - _ = x[InscriptionalParthian-1886549097] - _ = x[Javanese-1784772193] - _ = x[Kaithi-1802791017] - _ = x[Lisu-1818850165] - _ = x[MeeteiMayek-1836344681] - _ = x[OldSouthArabian-1935766114] - _ = x[OldTurkic-1869769576] - _ = x[Samaritan-1935764850] - _ = x[TaiTham-1818324577] - _ = x[TaiViet-1952544372] - _ = x[Batak-1650553963] - _ = x[Brahmi-1651663208] - _ = x[Mandaic-1835101796] - _ = x[Chakma-1667328877] - _ = x[MeroiticCursive-1835364963] - _ = x[MeroiticHieroglyphs-1835364975] - _ = x[Miao-1886155364] - _ = x[Sharada-1936224868] - _ = x[SoraSompeng-1936683617] - _ = x[Takri-1952541554] - _ = x[BassaVah-1650553715] - _ = x[CaucasianAlbanian-1634166882] - _ = x[Duployan-1685418092] - _ = x[Elbasan-1701601889] - _ = x[Grantha-1735549294] - _ = x[Khojki-1802006378] - _ = x[Khudawadi-1936289380] - _ = x[LinearA-1818848865] - _ = x[Mahajani-1835100266] - _ = x[Manichaean-1835101801] - _ = x[MendeKikakui-1835363940] - _ = x[Modi-1836016745] - _ = x[Mro-1836216175] - _ = x[Nabataean-1851941236] - _ = x[OldNorthArabian-1851880034] - _ = x[OldPermic-1885696621] - _ = x[PahawhHmong-1752002151] - _ = x[Palmyrene-1885432941] - _ = x[PauCinHau-1885435235] - _ = x[PsalterPahlavi-1885891696] - _ = x[Siddham-1936286820] - _ = x[Tirhuta-1953067624] - _ = x[WarangCiti-2002874977] - _ = x[Adlam-1633971309] - _ = x[Bhaiksuki-1651010419] - _ = x[Marchen-1835102819] - _ = x[Osage-1869834085] - _ = x[Tangut-1952542311] - _ = x[Newa-1852143457] - _ = x[MasaramGondi-1735356013] - _ = x[Nushu-1853057141] - _ = x[Soyombo-1936685423] - _ = x[ZanabazarSquare-2053205602] - _ = x[Dogra-1685022578] - _ = x[GunjalaGondi-1735356007] - _ = x[HanifiRohingya-1919903847] - _ = x[Makasar-1835101025] - _ = x[Medefaidrin-1835361382] - _ = x[OldSogdian-1936680815] - _ = x[Sogdian-1936680804] - _ = x[Elymaic-1701607789] - _ = x[Nandinagari-1851879012] - _ = x[NyiakengPuachueHmong-1752002160] - _ = x[Wancho-2003003503] - _ = x[Chorasmian-1667789427] - _ = x[DivesAkuru-1684627819] - _ = x[KhitanSmallScript-1802073203] - _ = x[Yezidi-2036693609] + _ = x[ScriptCommon-1517910393] + _ = x[ScriptInherited-1516858984] + _ = x[ScriptUnknown-1517976186] + _ = x[Arabic-1098015074] + _ = x[Armenian-1098018158] + _ = x[Bengali-1113943655] + _ = x[Cyrillic-1132032620] + _ = x[Devanagari-1147500129] + _ = x[Georgian-1197830002] + _ = x[Greek-1198679403] + _ = x[Gujarati-1198877298] + _ = x[Gurmukhi-1198879349] + _ = x[Hangul-1214344807] + _ = x[Han-1214344809] + _ = x[Hebrew-1214603890] + _ = x[Hiragana-1214870113] + _ = x[Kannada-1265525857] + _ = x[Katakana-1264676449] + _ = x[Lao-1281453935] + _ = x[Latin-1281455214] + _ = x[Malayalam-1298954605] + _ = x[Oriya-1332902241] + _ = x[Tamil-1415671148] + _ = x[Telugu-1415933045] + _ = x[Thai-1416126825] + _ = x[Tibetan-1416192628] + _ = x[Bopomofo-1114599535] + _ = x[Braille-1114792297] + _ = x[CanadianSyllabics-1130458739] + _ = x[Cherokee-1130915186] + _ = x[Ethiopic-1165256809] + _ = x[Khmer-1265134962] + _ = x[Mongolian-1299148391] + _ = x[Myanmar-1299803506] + _ = x[Ogham-1332175213] + _ = x[Runic-1383427698] + _ = x[Sinhala-1399418472] + _ = x[Syriac-1400468067] + _ = x[Thaana-1416126817] + _ = x[Yi-1500080489] + _ = x[Deseret-1148416628] + _ = x[Gothic-1198486632] + _ = x[OldItalic-1232363884] + _ = x[Buhid-1114990692] + _ = x[Hanunoo-1214344815] + _ = x[Tagalog-1416064103] + _ = x[Tagbanwa-1415669602] + _ = x[Cypriot-1131442804] + _ = x[Limbu-1281977698] + _ = x[LinearB-1281977954] + _ = x[Osmanya-1332964705] + _ = x[Shavian-1399349623] + _ = x[TaiLe-1415670885] + _ = x[Ugaritic-1432838514] + _ = x[Buginese-1114990441] + _ = x[Coptic-1131376756] + _ = x[Glagolitic-1198285159] + _ = x[Kharoshthi-1265131890] + _ = x[NewTaiLue-1415670901] + _ = x[OldPersian-1483761007] + _ = x[SylotiNagri-1400466543] + _ = x[Tifinagh-1415999079] + _ = x[Balinese-1113681001] + _ = x[Cuneiform-1483961720] + _ = x[Nko-1315663727] + _ = x[PhagsPa-1349017959] + _ = x[Phoenician-1349021304] + _ = x[Carian-1130459753] + _ = x[Cham-1130914157] + _ = x[KayahLi-1264675945] + _ = x[Lepcha-1281716323] + _ = x[Lycian-1283023721] + _ = x[Lydian-1283023977] + _ = x[OlChiki-1332503403] + _ = x[Rejang-1382706791] + _ = x[Saurashtra-1398895986] + _ = x[Sundanese-1400204900] + _ = x[Vai-1449224553] + _ = x[Avestan-1098281844] + _ = x[Bamum-1113681269] + _ = x[EgyptianHieroglyphs-1164409200] + _ = x[ImperialAramaic-1098018153] + _ = x[InscriptionalPahlavi-1349020777] + _ = x[InscriptionalParthian-1349678185] + _ = x[Javanese-1247901281] + _ = x[Kaithi-1265920105] + _ = x[Lisu-1281979253] + _ = x[MeeteiMayek-1299473769] + _ = x[OldSouthArabian-1398895202] + _ = x[OldTurkic-1332898664] + _ = x[Samaritan-1398893938] + _ = x[TaiTham-1281453665] + _ = x[TaiViet-1415673460] + _ = x[Batak-1113683051] + _ = x[Brahmi-1114792296] + _ = x[Mandaic-1298230884] + _ = x[Chakma-1130457965] + _ = x[MeroiticCursive-1298494051] + _ = x[MeroiticHieroglyphs-1298494063] + _ = x[Miao-1349284452] + _ = x[Sharada-1399353956] + _ = x[SoraSompeng-1399812705] + _ = x[Takri-1415670642] + _ = x[BassaVah-1113682803] + _ = x[CaucasianAlbanian-1097295970] + _ = x[Duployan-1148547180] + _ = x[Elbasan-1164730977] + _ = x[Grantha-1198678382] + _ = x[Khojki-1265135466] + _ = x[Khudawadi-1399418468] + _ = x[LinearA-1281977953] + _ = x[Mahajani-1298229354] + _ = x[Manichaean-1298230889] + _ = x[MendeKikakui-1298493028] + _ = x[Modi-1299145833] + _ = x[Mro-1299345263] + _ = x[Nabataean-1315070324] + _ = x[OldNorthArabian-1315009122] + _ = x[OldPermic-1348825709] + _ = x[PahawhHmong-1215131239] + _ = x[Palmyrene-1348562029] + _ = x[PauCinHau-1348564323] + _ = x[PsalterPahlavi-1349020784] + _ = x[Siddham-1399415908] + _ = x[Tirhuta-1416196712] + _ = x[WarangCiti-1466004065] + _ = x[Adlam-1097100397] + _ = x[Bhaiksuki-1114139507] + _ = x[Marchen-1298231907] + _ = x[Osage-1332963173] + _ = x[Tangut-1415671399] + _ = x[Newa-1315272545] + _ = x[MasaramGondi-1198485101] + _ = x[Nushu-1316186229] + _ = x[Soyombo-1399814511] + _ = x[ZanabazarSquare-1516334690] + _ = x[Dogra-1148151666] + _ = x[GunjalaGondi-1198485095] + _ = x[HanifiRohingya-1383032935] + _ = x[Makasar-1298230113] + _ = x[Medefaidrin-1298490470] + _ = x[OldSogdian-1399809903] + _ = x[Sogdian-1399809892] + _ = x[Elymaic-1164736877] + _ = x[Nandinagari-1315008100] + _ = x[NyiakengPuachueHmong-1215131248] + _ = x[Wancho-1466132591] + _ = x[Chorasmian-1130918515] + _ = x[DivesAkuru-1147756907] + _ = x[KhitanSmallScript-1265202291] + _ = x[Yezidi-1499822697] } const _Script_name = "ScriptInvalidAdlamCaucasianAlbanianArabicImperialAramaicArmenianAvestanBalineseBamumBassaVahBatakBengaliBhaiksukiBopomofoBrahmiBrailleBugineseBuhidChakmaCanadianSyllabicsCarianChamCherokeeChorasmianCopticCypriotCyrillicDevanagariDivesAkuruDograDeseretDuployanEgyptianHieroglyphsElbasanElymaicEthiopicGeorgianGlagoliticGunjalaGondiMasaramGondiGothicGranthaGreekGujaratiGurmukhiHangulHanHanunooHebrewHiraganaPahawhHmongNyiakengPuachueHmongOldItalicJavaneseKayahLiKatakanaKharoshthiKhmerKhojkiKhitanSmallScriptKannadaKaithiTaiThamLaoLatinLepchaLimbuLinearALinearBLisuLycianLydianMahajaniMakasarMandaicManichaeanMarchenMedefaidrinMendeKikakuiMeroiticCursiveMeroiticHieroglyphsMalayalamModiMongolianMroMeeteiMayekMyanmarNandinagariOldNorthArabianNabataeanNewaNkoNushuOghamOlChikiOldTurkicOriyaOsageOsmanyaPalmyrenePauCinHauOldPermicPhagsPaInscriptionalPahlaviPsalterPahlaviPhoenicianMiaoInscriptionalParthianRejangHanifiRohingyaRunicSamaritanOldSouthArabianSaurashtraShavianSharadaSiddhamKhudawadiSinhalaSogdianOldSogdianSoraSompengSoyomboSundaneseSylotiNagriSyriacTagbanwaTakriTaiLeNewTaiLueTamilTangutTaiVietTeluguTifinaghTagalogThaanaThaiTibetanTirhutaUgariticVaiWarangCitiWanchoOldPersianCuneiformYezidiYiZanabazarSquareScriptInheritedScriptCommonScriptUnknown" var _Script_map = map[Script]string{ 0: _Script_name[0:13], - 1633971309: _Script_name[13:18], - 1634166882: _Script_name[18:35], - 1634885986: _Script_name[35:41], - 1634889065: _Script_name[41:56], - 1634889070: _Script_name[56:64], - 1635152756: _Script_name[64:71], - 1650551913: _Script_name[71:79], - 1650552181: _Script_name[79:84], - 1650553715: _Script_name[84:92], - 1650553963: _Script_name[92:97], - 1650814567: _Script_name[97:104], - 1651010419: _Script_name[104:113], - 1651470447: _Script_name[113:121], - 1651663208: _Script_name[121:127], - 1651663209: _Script_name[127:134], - 1651861353: _Script_name[134:142], - 1651861604: _Script_name[142:147], - 1667328877: _Script_name[147:153], - 1667329651: _Script_name[153:170], - 1667330665: _Script_name[170:176], - 1667785069: _Script_name[176:180], - 1667786098: _Script_name[180:188], - 1667789427: _Script_name[188:198], - 1668247668: _Script_name[198:204], - 1668313716: _Script_name[204:211], - 1668903532: _Script_name[211:219], - 1684371041: _Script_name[219:229], - 1684627819: _Script_name[229:239], - 1685022578: _Script_name[239:244], - 1685287540: _Script_name[244:251], - 1685418092: _Script_name[251:259], - 1701280112: _Script_name[259:278], - 1701601889: _Script_name[278:285], - 1701607789: _Script_name[285:292], - 1702127721: _Script_name[292:300], - 1734700914: _Script_name[300:308], - 1735156071: _Script_name[308:318], - 1735356007: _Script_name[318:330], - 1735356013: _Script_name[330:342], - 1735357544: _Script_name[342:348], - 1735549294: _Script_name[348:355], - 1735550315: _Script_name[355:360], - 1735748210: _Script_name[360:368], - 1735750261: _Script_name[368:376], - 1751215719: _Script_name[376:382], - 1751215721: _Script_name[382:385], - 1751215727: _Script_name[385:392], - 1751474802: _Script_name[392:398], - 1751741025: _Script_name[398:406], - 1752002151: _Script_name[406:417], - 1752002160: _Script_name[417:437], - 1769234796: _Script_name[437:446], - 1784772193: _Script_name[446:454], - 1801546857: _Script_name[454:461], - 1801547361: _Script_name[461:469], - 1802002802: _Script_name[469:479], - 1802005874: _Script_name[479:484], - 1802006378: _Script_name[484:490], - 1802073203: _Script_name[490:507], - 1802396769: _Script_name[507:514], - 1802791017: _Script_name[514:520], - 1818324577: _Script_name[520:527], - 1818324847: _Script_name[527:530], - 1818326126: _Script_name[530:535], - 1818587235: _Script_name[535:541], - 1818848610: _Script_name[541:546], - 1818848865: _Script_name[546:553], - 1818848866: _Script_name[553:560], - 1818850165: _Script_name[560:564], - 1819894633: _Script_name[564:570], - 1819894889: _Script_name[570:576], - 1835100266: _Script_name[576:584], - 1835101025: _Script_name[584:591], - 1835101796: _Script_name[591:598], - 1835101801: _Script_name[598:608], - 1835102819: _Script_name[608:615], - 1835361382: _Script_name[615:626], - 1835363940: _Script_name[626:638], - 1835364963: _Script_name[638:653], - 1835364975: _Script_name[653:672], - 1835825517: _Script_name[672:681], - 1836016745: _Script_name[681:685], - 1836019303: _Script_name[685:694], - 1836216175: _Script_name[694:697], - 1836344681: _Script_name[697:708], - 1836674418: _Script_name[708:715], - 1851879012: _Script_name[715:726], - 1851880034: _Script_name[726:741], - 1851941236: _Script_name[741:750], - 1852143457: _Script_name[750:754], - 1852534639: _Script_name[754:757], - 1853057141: _Script_name[757:762], - 1869046125: _Script_name[762:767], - 1869374315: _Script_name[767:774], - 1869769576: _Script_name[774:783], - 1869773153: _Script_name[783:788], - 1869834085: _Script_name[788:793], - 1869835617: _Script_name[793:800], - 1885432941: _Script_name[800:809], - 1885435235: _Script_name[809:818], - 1885696621: _Script_name[818:827], - 1885888871: _Script_name[827:834], - 1885891689: _Script_name[834:854], - 1885891696: _Script_name[854:868], - 1885892216: _Script_name[868:878], - 1886155364: _Script_name[878:882], - 1886549097: _Script_name[882:903], - 1919577703: _Script_name[903:909], - 1919903847: _Script_name[909:923], - 1920298610: _Script_name[923:928], - 1935764850: _Script_name[928:937], - 1935766114: _Script_name[937:952], - 1935766898: _Script_name[952:962], - 1936220535: _Script_name[962:969], - 1936224868: _Script_name[969:976], - 1936286820: _Script_name[976:983], - 1936289380: _Script_name[983:992], - 1936289384: _Script_name[992:999], - 1936680804: _Script_name[999:1006], - 1936680815: _Script_name[1006:1016], - 1936683617: _Script_name[1016:1027], - 1936685423: _Script_name[1027:1034], - 1937075812: _Script_name[1034:1043], - 1937337455: _Script_name[1043:1054], - 1937338979: _Script_name[1054:1060], - 1952540514: _Script_name[1060:1068], - 1952541554: _Script_name[1068:1073], - 1952541797: _Script_name[1073:1078], - 1952541813: _Script_name[1078:1087], - 1952542060: _Script_name[1087:1092], - 1952542311: _Script_name[1092:1098], - 1952544372: _Script_name[1098:1105], - 1952803957: _Script_name[1105:1111], - 1952869991: _Script_name[1111:1119], - 1952935015: _Script_name[1119:1126], - 1952997729: _Script_name[1126:1132], - 1952997737: _Script_name[1132:1136], - 1953063540: _Script_name[1136:1143], - 1953067624: _Script_name[1143:1150], - 1969709426: _Script_name[1150:1158], - 1986095465: _Script_name[1158:1161], - 2002874977: _Script_name[1161:1171], - 2003003503: _Script_name[1171:1177], - 2020631919: _Script_name[1177:1187], - 2020832632: _Script_name[1187:1196], - 2036693609: _Script_name[1196:1202], - 2036951401: _Script_name[1202:1204], - 2053205602: _Script_name[1204:1219], - 2053729896: _Script_name[1219:1234], - 2054781305: _Script_name[1234:1246], - 2054847098: _Script_name[1246:1259], + 1097100397: _Script_name[13:18], + 1097295970: _Script_name[18:35], + 1098015074: _Script_name[35:41], + 1098018153: _Script_name[41:56], + 1098018158: _Script_name[56:64], + 1098281844: _Script_name[64:71], + 1113681001: _Script_name[71:79], + 1113681269: _Script_name[79:84], + 1113682803: _Script_name[84:92], + 1113683051: _Script_name[92:97], + 1113943655: _Script_name[97:104], + 1114139507: _Script_name[104:113], + 1114599535: _Script_name[113:121], + 1114792296: _Script_name[121:127], + 1114792297: _Script_name[127:134], + 1114990441: _Script_name[134:142], + 1114990692: _Script_name[142:147], + 1130457965: _Script_name[147:153], + 1130458739: _Script_name[153:170], + 1130459753: _Script_name[170:176], + 1130914157: _Script_name[176:180], + 1130915186: _Script_name[180:188], + 1130918515: _Script_name[188:198], + 1131376756: _Script_name[198:204], + 1131442804: _Script_name[204:211], + 1132032620: _Script_name[211:219], + 1147500129: _Script_name[219:229], + 1147756907: _Script_name[229:239], + 1148151666: _Script_name[239:244], + 1148416628: _Script_name[244:251], + 1148547180: _Script_name[251:259], + 1164409200: _Script_name[259:278], + 1164730977: _Script_name[278:285], + 1164736877: _Script_name[285:292], + 1165256809: _Script_name[292:300], + 1197830002: _Script_name[300:308], + 1198285159: _Script_name[308:318], + 1198485095: _Script_name[318:330], + 1198485101: _Script_name[330:342], + 1198486632: _Script_name[342:348], + 1198678382: _Script_name[348:355], + 1198679403: _Script_name[355:360], + 1198877298: _Script_name[360:368], + 1198879349: _Script_name[368:376], + 1214344807: _Script_name[376:382], + 1214344809: _Script_name[382:385], + 1214344815: _Script_name[385:392], + 1214603890: _Script_name[392:398], + 1214870113: _Script_name[398:406], + 1215131239: _Script_name[406:417], + 1215131248: _Script_name[417:437], + 1232363884: _Script_name[437:446], + 1247901281: _Script_name[446:454], + 1264675945: _Script_name[454:461], + 1264676449: _Script_name[461:469], + 1265131890: _Script_name[469:479], + 1265134962: _Script_name[479:484], + 1265135466: _Script_name[484:490], + 1265202291: _Script_name[490:507], + 1265525857: _Script_name[507:514], + 1265920105: _Script_name[514:520], + 1281453665: _Script_name[520:527], + 1281453935: _Script_name[527:530], + 1281455214: _Script_name[530:535], + 1281716323: _Script_name[535:541], + 1281977698: _Script_name[541:546], + 1281977953: _Script_name[546:553], + 1281977954: _Script_name[553:560], + 1281979253: _Script_name[560:564], + 1283023721: _Script_name[564:570], + 1283023977: _Script_name[570:576], + 1298229354: _Script_name[576:584], + 1298230113: _Script_name[584:591], + 1298230884: _Script_name[591:598], + 1298230889: _Script_name[598:608], + 1298231907: _Script_name[608:615], + 1298490470: _Script_name[615:626], + 1298493028: _Script_name[626:638], + 1298494051: _Script_name[638:653], + 1298494063: _Script_name[653:672], + 1298954605: _Script_name[672:681], + 1299145833: _Script_name[681:685], + 1299148391: _Script_name[685:694], + 1299345263: _Script_name[694:697], + 1299473769: _Script_name[697:708], + 1299803506: _Script_name[708:715], + 1315008100: _Script_name[715:726], + 1315009122: _Script_name[726:741], + 1315070324: _Script_name[741:750], + 1315272545: _Script_name[750:754], + 1315663727: _Script_name[754:757], + 1316186229: _Script_name[757:762], + 1332175213: _Script_name[762:767], + 1332503403: _Script_name[767:774], + 1332898664: _Script_name[774:783], + 1332902241: _Script_name[783:788], + 1332963173: _Script_name[788:793], + 1332964705: _Script_name[793:800], + 1348562029: _Script_name[800:809], + 1348564323: _Script_name[809:818], + 1348825709: _Script_name[818:827], + 1349017959: _Script_name[827:834], + 1349020777: _Script_name[834:854], + 1349020784: _Script_name[854:868], + 1349021304: _Script_name[868:878], + 1349284452: _Script_name[878:882], + 1349678185: _Script_name[882:903], + 1382706791: _Script_name[903:909], + 1383032935: _Script_name[909:923], + 1383427698: _Script_name[923:928], + 1398893938: _Script_name[928:937], + 1398895202: _Script_name[937:952], + 1398895986: _Script_name[952:962], + 1399349623: _Script_name[962:969], + 1399353956: _Script_name[969:976], + 1399415908: _Script_name[976:983], + 1399418468: _Script_name[983:992], + 1399418472: _Script_name[992:999], + 1399809892: _Script_name[999:1006], + 1399809903: _Script_name[1006:1016], + 1399812705: _Script_name[1016:1027], + 1399814511: _Script_name[1027:1034], + 1400204900: _Script_name[1034:1043], + 1400466543: _Script_name[1043:1054], + 1400468067: _Script_name[1054:1060], + 1415669602: _Script_name[1060:1068], + 1415670642: _Script_name[1068:1073], + 1415670885: _Script_name[1073:1078], + 1415670901: _Script_name[1078:1087], + 1415671148: _Script_name[1087:1092], + 1415671399: _Script_name[1092:1098], + 1415673460: _Script_name[1098:1105], + 1415933045: _Script_name[1105:1111], + 1415999079: _Script_name[1111:1119], + 1416064103: _Script_name[1119:1126], + 1416126817: _Script_name[1126:1132], + 1416126825: _Script_name[1132:1136], + 1416192628: _Script_name[1136:1143], + 1416196712: _Script_name[1143:1150], + 1432838514: _Script_name[1150:1158], + 1449224553: _Script_name[1158:1161], + 1466004065: _Script_name[1161:1171], + 1466132591: _Script_name[1171:1177], + 1483761007: _Script_name[1177:1187], + 1483961720: _Script_name[1187:1196], + 1499822697: _Script_name[1196:1202], + 1500080489: _Script_name[1202:1204], + 1516334690: _Script_name[1204:1219], + 1516858984: _Script_name[1219:1234], + 1517910393: _Script_name[1234:1246], + 1517976186: _Script_name[1246:1259], } func (i Script) String() string {