diff --git a/glamour.go b/glamour.go index 751033d..376278d 100644 --- a/glamour.go +++ b/glamour.go @@ -3,11 +3,10 @@ package glamour import ( "bytes" "encoding/json" + "fmt" "io/ioutil" - "net/http" "os" - "github.com/rakyll/statik/fs" "github.com/yuin/goldmark" "github.com/yuin/goldmark/extension" "github.com/yuin/goldmark/parser" @@ -15,11 +14,8 @@ import ( "github.com/yuin/goldmark/util" "github.com/charmbracelet/glamour/ansi" - _ "github.com/charmbracelet/glamour/statik" // pre-generated styles ) -var statikFS http.FileSystem - // A TermRendererOption sets an option on a TermRenderer. type TermRendererOption func(*TermRenderer) error @@ -32,14 +28,6 @@ type TermRenderer struct { renderBuf bytes.Buffer } -func init() { - var err error - statikFS, err = fs.New() - if err != nil { - panic(err) - } -} - // Render initializes a new TermRenderer and renders a markdown with a specific // style. func Render(in string, stylePath string) (string, error) { @@ -103,11 +91,12 @@ func WithBaseURL(baseURL string) TermRendererOption { // style. func WithStandardStyle(style string) TermRendererOption { return func(tr *TermRenderer) error { - jsonBytes, err := fs.ReadFile(statikFS, "/"+style+".json") + styles, err := getDefaultStyle(style) if err != nil { return err } - return json.Unmarshal(jsonBytes, &tr.ansiOptions.Styles) + tr.ansiOptions.Styles = *styles + return nil } } @@ -117,13 +106,19 @@ func WithStandardStyle(style string) TermRendererOption { func WithStylePath(stylePath string) TermRendererOption { return func(tr *TermRenderer) error { jsonBytes, err := ioutil.ReadFile(stylePath) - if os.IsNotExist(err) { - jsonBytes, err = fs.ReadFile(statikFS, "/"+stylePath+".json") - } - if err != nil { + switch { + case err == nil: + return json.Unmarshal(jsonBytes, &tr.ansiOptions.Styles) + case os.IsNotExist(err): + styles, err := getDefaultStyle(stylePath) + if err != nil { + return err + } + tr.ansiOptions.Styles = *styles + return nil + default: return err } - return json.Unmarshal(jsonBytes, &tr.ansiOptions.Styles) } } @@ -194,3 +189,11 @@ func (tr *TermRenderer) RenderBytes(in []byte) ([]byte, error) { err := tr.md.Convert(in, &buf) return buf.Bytes(), err } + +func getDefaultStyle(style string) (*ansi.StyleConfig, error) { + styles, ok := DefaultStyles[style] + if !ok { + return nil, fmt.Errorf("%s: style not found", style) + } + return styles, nil +} diff --git a/go.mod b/go.mod index 42b2b46..ff70b01 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,5 @@ require ( github.com/microcosm-cc/bluemonday v1.0.2 github.com/muesli/reflow v0.0.0-20191216070243-e5efeac4e302 github.com/olekukonko/tablewriter v0.0.4 - github.com/rakyll/statik v0.1.6 github.com/yuin/goldmark v1.1.19 ) diff --git a/go.sum b/go.sum index d253dd3..cb64a72 100644 --- a/go.sum +++ b/go.sum @@ -47,8 +47,6 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rakyll/statik v0.1.6 h1:uICcfUXpgqtw2VopbIncslhAmE5hwc4g20TEyEENBNs= -github.com/rakyll/statik v0.1.6/go.mod h1:OEi9wJV/fMUAGx1eNjq75DKDsJVuEv1U0oYdX6GX8Zs= github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/statik/statik.go b/statik/statik.go deleted file mode 100644 index 3db4264..0000000 --- a/statik/statik.go +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by statik. DO NOT EDIT. - -package statik - -import ( - "github.com/rakyll/statik/fs" -) - -func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00&\x1b\x94O\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00dark.jsonUT\x05\x00\x01\x19?\xfc]\xac\x97Mn\xeb6\x10\x80\xf7>\x05!o\xd3\x07\xc5?\xb2\x92\x9d\x13\x8b@\xcf\xd0<\x0845v\x08S\xa4JR\xef\x07\x81\x81\x87.z\x80\xb6\xcb\x02-z\x88\xaez\x9a\x9c\xa0G(h[\x12%\x91~/@- \x009\xf3\xcd\x0c9\xc3\x19\xe4e\x82PTHZ\x97 Lt\x8f\xec\x1a\xa1\x88\x89\xe2\xbc\x9e\xdd\x9c7\xb6\\\xd2C^)\xd8\xb1O\xd1=\x8a\x9eD\xd4\x93\xe8z7\x92P\xc9\xa5\xb2[\xb3\xe5,\x9a t\xb4\xfb\xd13\x90\x82\x89}\xe7\xeb\x1b\x0c\xcc\xefZo\x92\x17\xd1=2\xaa\x86\xce\xe2mg\xac\x8b\x105Hg\xb9\xdd\xda\x12z\xd8+Y\x8b\"o}$\xf3q\xdc\xb3\xf4\xaa\xdf\x99\xcf\xeft\x8a\x9c\xc3\xce\xfd*=\x9dE@\xa7\xa7\xb4\x0c)\xf5\xb4\x92\xa0\xd6\x14\x8dou98\xdd\x8ep\xdd\x1d\xcf\xc0\xa7SE\x9cW\x9ci\xa7>8|\x00\x9ewU\xd2B\xcc@9Lm\x17\xc9\xeb\x97\xbf\x9chA\xd4%(b\x98\x14a\xe4\x9d\x03p&\x0ey\x13\xd6\xd7\x0e\xd3K\x95%;\xa8\x16\x05(\xce\x04\\\xd4F\x17\x13w>YI\xf60p\xba\x93\xaa$v\x1d}o\xa5\xf7\xe8\xe5\xe5\x9d\xd58\x1e\xd1\xeb\xcf\xbf\x8c\xcbh1\x1f\xd8\xfb\xf6Pf\xb7\xce\xd31d\xcb\x1d\x96\x820\xa0r\x0d\x15Q\xc4\x9c\xf5_\x7f\xfb\xc7\xf1_\x97b(\xfe\xa9\x11+\xf9q(\xfb\xe2\xba\xd2\xbd\x0b3\x8c\x1e\xc0^k\xf4\x03z\xdf\x96\x92\xb3\xfb\xfa\xfb\xaf\xef\x9dTi\xa3\xd8\x01\xcc\xb3\x92\xf5\xfe\xd9 YI\xad\xa1\xc8em\x86)\x82\xb2r\x14\x99!\x9c\xd1\xa1\x8e6J\xf6Z\x87\xefU*_\xa2\x9e\xc4w\x97\x9f\xaf?-\x9c\x84\x9f\x0b\xf0\xc7Z\x1a\xf0\xf4\xc3\xdb\x1bw#7\xf2\x00\xe2r\xb1\xce\xe9\x0b\xd81\xc1la\xe7\xcd\xbb\x19 \x0c\xa8\xd2+(@S\xc5\xaa\xeb\xcf\xe2I\xfc\xfb\xc7\x9f\x7f\xbbO\xdf\x94,\x1f\xc6\xb6\xa9,{\xd3r`=Y\xd9/\x88\xd9$VJ\xd2`p8]-\xf1\x18?\xc0\xe7\x8fR\x15!,\x8e\xd7k\x1c\xc6r\x05\x1a\xd4\x07\x08\xf2\x18/\xf1f\x16\xe6\x05)AW\x84\xc25\x03\xa9\xe7\xd8\x8d\x01\xf3\xb9\n\xb2I\x96d\x9bt\xcc\xca\n\x9a\xf6\xe4\xe52\x9c\xc6i<\xe6\xaaZPS\xf7'\xcb\x10M\xb3t\xedqi\xcf\xf9\xd6b\xb3L\xbe\xad\x197,\xe8\x0f\xe34{\xf4\\\xcf\x895d\x1f\xe2\x1e\xe2t\x9e\xad\x03\x1c1F\xb1mm\x82\x11\xaf\xd6\xabu\x96\x04h\xca\x89\xd6ox#]\xb3uv\x87\x03\xcc\xef\xaa\x00*\xaff\x12c\xec\xad\x9e\x13\xbd\xb3\xe9\xbc\x92\xcb8\xde\xac|0g\x06\x14\xe1\xb9\xa8\xcb-\x04]'Y\x86\x1f=E\xd4\xd0v\x94\x89`~\x1e\x93\xbb$\xb9\xfb\x1a\x9d\x83\xa6$\\\xffk\x8c\xf1\xc6s\x80=\x08P\x8c\xe6\x05p0W\xde\xee\xc6\xdf\xa8\x1a\xbc7ZO\x92\xe1x\xf5s\x83q\x8b\xd0h\xe4\xfa9&4\xa8+\xf1\x86\xf2\xd5\xfa\xad\xb7\xc3\xff\x12\x06\x16V\xa7\xdf\xd8B\xd7\xc7\x07Q\xfb\xfa\xfb|e\xbf\xd6\xc8\xa4\xf9{\x9c\x1c'\xff\x05\x00\x00\xff\xffPK\x07\x08|5\xfehb\x03\x00\x00\x18\x0d\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00o\x0f\x96O\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00light.jsonUT\x05\x00\x01\x02\xce\xfe]\xacWM\x8e\xeb6\x0c\xde\xe7\x14\x86\xb3\x9d>8v\x1c'\xb3K2c\xa0g\xe8{0\x14\x99\xc9\x08\x91%W\x92\xdf\x0f\x06\x01\x1e\xba\xe8\x01\xda.\x0b\xb4\xe8!\xba\xeai\xe6\x04=B\xa1\xfcX\xb2,\x05oQ\x0b\x08 \x92\x1f?J\xa4H\xe4u\x12Eq\xcdq\xd7\x00S\xf1c\xa4\xf7Q\x14\x13V_\xf6\xe9\xc3E\xb0\xa3\x1c\x1f\xabV\xc0\x9e|\x8e\x1f\xa3\xf8=\x8b\x07\x1a\xd9\xedG\x1a\xcc)\x17Z\x94f\xf3x\x12E'-\x8f_\x00\xd5\x84\x1d\x0c\xd7\xb78(z6N\xeb\xf81R\xa2\x03\xe3qf\x9c\x99\x08\xa3\x1b\xc4x\xeeE;\x84\x8f\x07\xc1;VW=\xc7\"\x1b\xd3\xa6\xcb\xbb\xbc\xa9\x8fw:\x8d\xac\xc3f~\x93\x81\xcd<`30\xcaCF\x03\xabE\xd0j\x1a9G\xd9#*\xcdY\x14|>\xa7\xff\xb2\xa3DZ\xc5@\xe1#\xd0\xca\x94D\x0f\"\n\x1a7\x8f\x86\xf6\xed\xeb_Vh\xc0\xba\x06\x04R\x84\xb30\xe4\x9d\x05\xa0\x84\x1d\xab[XnbV\xf7\xf2\xa2\x91\x06\xd4\xb1\x1a\x04%\x0c\xaefn\x92\xb3\x85\xe1$\x0d:\x80C\xba\xe7\xa2Az\x1f\x7f\xaf\xb5\x8f\xd1\xeb\xeb;mq:Eo?\xff2\xae\x99y\xe6\xf8\xfb\xf6P\xd2$7X\x85v\xd4\xc2b`\nD%\xa1E\x02\xa9\x8b\xfd\xdbo\xffX\xfc]\xc3\\\xf5O7\xb5\xe0\x9f\\\xddW\x9bJ\x0e.L\x11|\x04}\xad\xf1\x0f\xd1\x87\xben,\xe9\xdb\xef\xbf~\xb0R%\x95 GP/\x82w\x87\x17+d\xc1\xa5\x84\xba\xe2\x9drS\x04Mk\x19\x12\x85(\xc1\xae\x8dT\x82\x0f\xfa\x84\xef \n_\xa2\xde\xb3\xef\xae\x9f\xaf\x97\xccW&\xf2K\x01\xfe\xd8q\x05\x9e\xe67{\xb0\x05\x95\xe2G`\xd7\x8b\xb5N_\xc3\x9e0\xa2\x0b\xbb\xba\xbd\x9b\x91B\x81h\xbc\x8a\x1a$\x16\xa4\xbd\xff,\xde\xb3\x7f\xff\xf8\xf3o\xfb\x9d\xab\x86Vg+\xe3\xf4,\x93-bF\x84y\x0d\xffGkL\xf3\xf9\xf8\x1a\x13\xab\xce5\x91\x89\xe7b\xd9 q \xcc\x1a!V\x06\xd2\xde\xdd\x8b\xe0\x0d\xeaAV#\xba\xeem\xdc4]\xeb\x15_U\xa7\x87\x1b\x06\x84\xe0\"\x04*gz\xc5\x0fF\xe7;\xe2\xb4,\xf3<\xcf\xc7\xbe1o\x06\xa3\xd1\xf1\xbe|\xd2+\x08\xd3Il\x05\xc7\xc1\xe0\xcae\x91\x97c\xf8\x11\xbe|\xe2\xa2\x0e^D\xb1z.\xb7AX%@\x82\xf8\x08A|Y\xe6\xe5S\x1a\xc63\xd4\x80l\x11\x86\xa0\x83\xcdf`\xdf\x87;T\x82\xd7^\xd4\x02>\x81\x88/\x81?]\x0eq\x03r\x9e\x9c\x9bq:\xfe\xf1\x06\x006\x1243\\a\xf8\xc8\x83w@p,\xe3\xf9ga\xe9*.Y\x0e\x17b0\xcc\x94\x96\xcc\xd6\xf4\xbdU\xd7\xe4px\xb0D\xdb\x92\xd3\xd7o\xce\xbc?\xeb\xac\x0c\xdb p. \xa0\x01\x1d\xd7P1\xcd\x8c\xd2\xfd\x7f\xf3\xe3\xdf\xb8O\x89\x12\x8d\xc4\xb9\xfce\x94\xb5\xfa<\xd7\x8e^\xd0\xac.\xdd\xa4\x06\x0dOJH-\xf6\x81<\x93\xd1\xc3\xeb\x9e~~\x7f\xf6b\xa9\x8d\xe6%\x98B\xab&/\xc2Iv]h\xfb\xbb\xce\xbb\x14Y\xdd\xf0\xb8\x0bY\xdcM>G]?\x1f\xcf#l\xe2\xb9\x14z\xe9\n7\xf8\xfa\xfc\xe7?\xc2\xc1\xe7c\xa3\x0c,\xfc\x1a<\xde\xfb\x8d\xd8\xa8\x12\xf0|?^\x88)d\x1c\xb9\xdd\xc5x\\\xf5+\xc1\x80\x96\x8bB\nu\xa2yu{\x937\xf8\xff\xd7\xef\xbf\xfe;4R\xc4=\xe5L\xfb^]1t\xadD\xa5\x10v\xdd\x86\xc2\xdc\xbaA\xd6\xc1\x0d\x1ap\xc9t\xce\xed\x94\x95\xc5\xa26z \x00\x00\xff\xffPK\x07\x08\xdc\xadC\x7f\xab\x01\x00\x00U\x05\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00a\xbe\x92O\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00simple.jsonUT\x05\x00\x01g\xbb\xfa]|\x93\xcd\x8e\xa30\x0c\x80\xef\xbc\xe3\x12\xcd\xb7s\xae\xb1p\x8b\xfeb\xa4\xfa\xb7\xaf&\xc4\x02\xf9\xf3\x1aY0\xc7\x00\xb3\x80\xfe\x86\xa0\x05\xf5/HQ\x0c\xe1J&&E\x8b\xbeL\xc27\xc8T\xe8b\x9e\xea\xf1Q$\x10\xd4zZ\xbe\xc7\x8e\xe8Aw\nl\x86\xc2\xe8p\xc1\x9e\x14H\xa1\xebt}(]\xfb?\xa1\xb2\x0b<\x88YX\x1a\xab2\xf7\xcf?]6f}\xbfw\xc40\xb0\xff\x1fD>\xd5zUn\n\x08\x9f\xeat\xbf\xf1\xf56\x9c\xbc\xd0\x19\xd2)\xef\xad\x98\x9d%i\xd2\xa2\x155`eMw\xa9\xc2\xdd\xc61\xd4n\x1c\xc98U\xf3\xc6\xb1 )6\xde\xd0\xa25\xcfO\x828\xc2\x12b\xa9\xec\xab\xe1'zw\xfb\xe8\xc3\x9a=_\x9dA2\xec\xc7R\x1d\xb64\x90\xa2\xa9\xc1m\n\xa7\xd7V@)\xb4p;\x94\xde\x17\xf4)\x81`\xd5\xcbD\x01mnE\xf3~\x03\x13\x1d\xd3\xa7\x83J\xaeou\x8a\xb5M6I\x86h\x88~\x02\x00\x00\xff\xffPK\x07\x08Vgl\x9cS\x01\x00\x00t\x04\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00&\x1b\x94O|5\xfehb\x03\x00\x00\x18\x0d\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00dark.jsonUT\x05\x00\x01\x19?\xfc]PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00o\x0f\x96Ofr\n\x95m\x03\x00\x00\x0e\x0d\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xa2\x03\x00\x00light.jsonUT\x05\x00\x01\x02\xce\xfe]PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x01\x0f\x96O\xdc\xadC\x7f\xab\x01\x00\x00U\x05\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81P\x07\x00\x00notty.jsonUT\x05\x00\x012\xcd\xfe]PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00a\xbe\x92OVgl\x9cS\x01\x00\x00t\x04\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81< \x00\x00simple.jsonUT\x05\x00\x01g\xbb\xfa]PK\x05\x06\x00\x00\x00\x00\x04\x00\x04\x00\x04\x01\x00\x00\xd1\n\x00\x00\x00\x00" - fs.Register(data) -}