diff options
author | Ruben Vermeersch <ruben@rocketeer.be> | 2015-03-29 13:55:46 +0300 |
---|---|---|
committer | bep <bjorn.erik.pedersen@gmail.com> | 2015-03-29 14:01:44 +0300 |
commit | e8ca8602c003862fe3da87306c2b2c27918b29cc (patch) | |
tree | a0f40b8b8ea16f987668a6909c3846060ae1212a /helpers | |
parent | beaf5db3ff7d70d5644f3d3aaab3d38284c5fede (diff) |
Hash all pygments parameters.
Ensures that Hugo rehighlights source code whenever one of the
highlighting options changes.
Diffstat (limited to 'helpers')
-rw-r--r-- | helpers/pygments.go | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/helpers/pygments.go b/helpers/pygments.go index 0f06635fc..ca588870a 100644 --- a/helpers/pygments.go +++ b/helpers/pygments.go @@ -17,6 +17,7 @@ import ( "bytes" "crypto/sha1" "fmt" + "io" "io/ioutil" "os/exec" "strings" @@ -47,9 +48,21 @@ func Highlight(code string, lexer string) string { fs := hugofs.OsFs + style := viper.GetString("PygmentsStyle") + + noclasses := "true" + if viper.GetBool("PygmentsUseClasses") { + noclasses = "false" + } + // Try to read from cache first - hash := sha1.Sum([]byte(code)) - cachefile := fmt.Sprintf("%s/pygments-%s-%x", viper.GetString("CacheDir"), lexer, hash) + hash := sha1.New() + io.WriteString(hash, lexer) + io.WriteString(hash, code) + io.WriteString(hash, style) + io.WriteString(hash, noclasses) + + cachefile := fmt.Sprintf("%s/pygments-%x", viper.GetString("CacheDir"), hash.Sum(nil)) exists, err := Exists(cachefile, fs) if err != nil { jww.ERROR.Print(err.Error()) @@ -74,12 +87,6 @@ func Highlight(code string, lexer string) string { // No cache file, render and cache it var out bytes.Buffer var stderr bytes.Buffer - style := viper.GetString("PygmentsStyle") - - noclasses := "true" - if viper.GetBool("PygmentsUseClasses") { - noclasses = "false" - } cmd := exec.Command(pygmentsBin, "-l"+lexer, "-fhtml", "-O", fmt.Sprintf("style=%s,noclasses=%s,encoding=utf8", style, noclasses)) |