fork of anirudh.fi/vite that uses chroma for hl
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Better errors, frontmatter and tables fix

+72 -74
+9 -3
commands/build.go
··· 71 71 } 72 72 73 73 out := markdown.Output{} 74 - out.RenderMarkdown(fb) 74 + if err = out.RenderMarkdown(fb); err != nil { 75 + return err 76 + } 75 77 if err = out.RenderHTML( 76 78 htmlFile, 77 79 TEMPLATES, ··· 126 128 } 127 129 128 130 out := markdown.Output{} 129 - out.RenderMarkdown(fb) 131 + if err := out.RenderMarkdown(fb); err != nil { 132 + return err 133 + } 130 134 if err = out.RenderHTML( 131 135 htmlFile, 132 136 TEMPLATES, ··· 160 164 return err 161 165 } 162 166 out := markdown.Output{} 163 - out.RenderMarkdown(indexMd) 167 + if err := out.RenderMarkdown(indexMd); err != nil { 168 + return err 169 + } 164 170 165 171 out.RenderHTML(indexHTML, TEMPLATES, struct { 166 172 Cfg config.ConfigYaml
+25
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1648219316, 6 + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", 7 + "owner": "NixOS", 8 + "repo": "nixpkgs", 9 + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "id": "nixpkgs", 14 + "type": "indirect" 15 + } 16 + }, 17 + "root": { 18 + "inputs": { 19 + "nixpkgs": "nixpkgs" 20 + } 21 + } 22 + }, 23 + "root": "root", 24 + "version": 7 25 + }
+17
flake.nix
··· 1 + { 2 + description = "vite"; 3 + 4 + outputs = { self, nixpkgs }: { 5 + devShell.x86_64-linux = 6 + let 7 + pkgs = nixpkgs.legacyPackages.x86_64-linux; 8 + in 9 + pkgs.mkShell { 10 + buildInputs = with pkgs; [ 11 + go 12 + gotools 13 + gnumake 14 + ]; 15 + }; 16 + }; 17 + }
+1
go.mod
··· 4 4 5 5 require ( 6 6 github.com/Depado/bfchroma v1.3.0 7 + github.com/adrg/frontmatter v0.2.0 // indirect 7 8 github.com/alecthomas/chroma v0.10.0 8 9 github.com/russross/blackfriday/v2 v2.1.0 9 10 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
+6
go.sum
··· 1 + github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= 2 + github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 1 3 github.com/Depado/bfchroma v1.3.0 h1:zz14vpvySU6S0CL6yGPr1vkFevQecIt8dJdCsMS2JpM= 2 4 github.com/Depado/bfchroma v1.3.0/go.mod h1:c0bFk0tFmT+clD3TIGurjWCfD/QV8/EebfM3JGr+98M= 5 + github.com/adrg/frontmatter v0.2.0 h1:/DgnNe82o03riBd1S+ZDjd43wAmC6W35q67NHeLkPd4= 6 + github.com/adrg/frontmatter v0.2.0/go.mod h1:93rQCj3z3ZlwyxxpQioRKC1wDLto4aXHrbqIsnH9wmE= 3 7 github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= 4 8 github.com/alecthomas/chroma v0.7.3/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= 5 9 github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= ··· 37 41 golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 38 42 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 39 43 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 44 + gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= 45 + gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 40 46 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 41 47 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= 42 48 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+6 -64
markdown/frontmatter.go
··· 1 1 package markdown 2 2 3 3 import ( 4 - "bufio" 5 4 "bytes" 6 - "errors" 7 - "fmt" 8 5 9 - "gopkg.in/yaml.v3" 6 + "github.com/adrg/frontmatter" 10 7 ) 11 8 12 9 type Matter map[string]string ··· 15 12 Frontmatter Matter 16 13 Body []byte 17 14 } 18 - 19 - const ( 20 - yamlDelim = "---" 21 - ) 22 15 23 16 func (md *MarkdownDoc) Extract(source []byte) error { 24 - bufsize := 1024 * 1024 25 - buf := make([]byte, bufsize) 26 - 27 - input := bytes.NewReader(source) 28 - s := bufio.NewScanner(input) 29 - s.Buffer(buf, bufsize) 30 - 31 - matter := []byte{} 32 - body := []byte{} 33 - 34 - s.Split(splitFunc) 35 - n := 0 36 - for s.Scan() { 37 - if n == 0 { 38 - matter = s.Bytes() 39 - } else if n == 1 { 40 - body = s.Bytes() 41 - } 42 - n++ 43 - } 44 - if err := s.Err(); err != nil { 45 - return fmt.Errorf("error: failed to scan text") 46 - } 47 - if err := yaml.Unmarshal(matter, &md.Frontmatter); err != nil { 48 - return fmt.Errorf("error: failed to parse yaml") 49 - } 50 - md.Body = body 51 - return nil 52 - } 53 - 54 - func splitFunc(data []byte, atEOF bool) (advance int, token []byte, err error) { 55 - if atEOF && len(data) == 0 { 56 - return 0, nil, nil 57 - } 58 - delim, err := sniffDelim(data) 17 + r := bytes.NewReader(source) 18 + rest, err := frontmatter.Parse(r, &md.Frontmatter) 59 19 if err != nil { 60 - return 0, nil, err 20 + return err 61 21 } 62 - if delim != yamlDelim { 63 - return 0, nil, fmt.Errorf("error: %s is not a supported delimiter", delim) 64 - } 65 - if x := bytes.Index(data, []byte(delim)); x >= 0 { 66 - if next := bytes.Index(data[x+len(delim):], []byte(delim)); next > 0 { 67 - return next + len(delim), bytes.TrimSpace(data[:next+len(delim)]), nil 68 - } 69 - return len(data), bytes.TrimSpace(data[x+len(delim):]), nil 70 - } 71 - if atEOF { 72 - return len(data), data, nil 73 - } 74 - return 0, nil, nil 75 - } 76 - 77 - func sniffDelim(input []byte) (string, error) { 78 - if len(input) < 4 { 79 - return "", errors.New("error: input is empty") 80 - } 81 - return string(input[:3]), nil 22 + md.Body = rest 23 + return nil 82 24 }
+8 -7
markdown/markdown.go
··· 1 1 package markdown 2 2 3 3 import ( 4 + "fmt" 4 5 "os" 5 6 gotmpl "text/template" 6 7 "time" ··· 14 15 ) 15 16 16 17 var ( 17 - bfFlags = bf.UseXHTML | bf.Smartypants | bf.SmartypantsFractions | 18 - bf.SmartypantsDashes | bf.NofollowLinks 19 - bfExts = bf.NoIntraEmphasis | bf.Tables | bf.FencedCode | bf.Autolink | 20 - bf.Strikethrough | bf.SpaceHeadings | bf.BackslashLineBreak | 21 - bf.HeadingIDs | bf.Footnotes | bf.NoEmptyLineBeforeBlock 18 + bfFlags = bf.CommonHTMLFlags | bf.FootnoteReturnLinks | bf.SmartypantsFractions 19 + bfExts = bf.CommonExtensions | bf.AutoHeadingIDs | bf.Footnotes | bf.NoEmptyLineBeforeBlock 22 20 ) 23 21 24 22 type Output struct { ··· 27 25 } 28 26 29 27 // Renders markdown to html, and fetches metadata. 30 - func (out *Output) RenderMarkdown(source []byte) { 28 + func (out *Output) RenderMarkdown(source []byte) error { 31 29 md := MarkdownDoc{} 32 - md.Extract(source) 30 + if err := md.Extract(source); err != nil { 31 + return fmt.Errorf("markdown: %w", err) 32 + } 33 33 34 34 out.HTML = bf.Run( 35 35 md.Body, ··· 49 49 bf.WithExtensions(bfExts), 50 50 ) 51 51 out.Meta = md.Frontmatter 52 + return nil 52 53 } 53 54 54 55 // Renders out.HTML into dst html file, using the template specified