2017-09-25 02:59:02 -04:00
// Copyright 2017-present The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package commands
import (
"os"
"github.com/alecthomas/chroma"
"github.com/alecthomas/chroma/formatters/html"
"github.com/alecthomas/chroma/styles"
"github.com/spf13/cobra"
)
2020-12-02 07:23:25 -05:00
var _ cmder = ( * genChromaStyles ) ( nil )
2018-04-09 14:42:08 -04:00
2017-09-25 02:59:02 -04:00
type genChromaStyles struct {
style string
highlightStyle string
linesStyle string
2018-04-10 03:19:26 -04:00
* baseCmd
2018-04-09 14:42:08 -04:00
}
2017-09-25 02:59:02 -04:00
// TODO(bep) highlight
func createGenChromaStyles ( ) * genChromaStyles {
g := & genChromaStyles {
2018-04-10 03:19:26 -04:00
baseCmd : newBaseCmd ( & cobra . Command {
2017-09-25 02:59:02 -04:00
Use : "chromastyles" ,
Short : "Generate CSS stylesheet for the Chroma code highlighter" ,
2021-08-21 06:46:18 -04:00
Long : ` Generate CSS stylesheet for the Chroma code highlighter for a given style . This stylesheet is needed if markup . highlight . noClasses is disabled in config .
2017-09-25 02:59:02 -04:00
2021-08-21 06:46:18 -04:00
See https : //xyproto.github.io/splash/docs/all.html for a preview of the available styles`,
2018-04-10 03:19:26 -04:00
} ) ,
2017-09-25 02:59:02 -04:00
}
g . cmd . RunE = func ( cmd * cobra . Command , args [ ] string ) error {
return g . generate ( )
}
2021-08-21 06:46:18 -04:00
g . cmd . PersistentFlags ( ) . StringVar ( & g . style , "style" , "friendly" , "highlighter style (see https://xyproto.github.io/splash/docs/)" )
2017-09-25 02:59:02 -04:00
g . cmd . PersistentFlags ( ) . StringVar ( & g . highlightStyle , "highlightStyle" , "bg:#ffffcc" , "style used for highlighting lines (see https://github.com/alecthomas/chroma)" )
g . cmd . PersistentFlags ( ) . StringVar ( & g . linesStyle , "linesStyle" , "" , "style used for line numbers (see https://github.com/alecthomas/chroma)" )
return g
}
func ( g * genChromaStyles ) generate ( ) error {
builder := styles . Get ( g . style ) . Builder ( )
if g . highlightStyle != "" {
builder . Add ( chroma . LineHighlight , g . highlightStyle )
}
if g . linesStyle != "" {
builder . Add ( chroma . LineNumbers , g . linesStyle )
}
style , err := builder . Build ( )
if err != nil {
return err
}
2020-04-13 12:31:33 -04:00
formatter := html . New ( html . WithAllClasses ( true ) )
2017-09-25 02:59:02 -04:00
formatter . WriteCSS ( os . Stdout , style )
return nil
}