1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-03-19 21:10:15 +02:00

More README.

This commit is contained in:
Alec Thomas 2017-09-18 13:59:11 +10:00
parent ca585f2681
commit 1374cf9ffb
3 changed files with 52 additions and 8 deletions

View File

@ -1,14 +1,32 @@
# Chroma - A general purpose syntax highlighter for Go
Chroma takes source code and other structured text and converts it into syntax
highlighted output, as HTML, ANSI-coloured text, etc.
highlighted HTML, ANSI-coloured text, etc.
Chroma is based heavily on [Pygments](http://pygments.org/), and includes
translaters for Pygments lexers and styles.
## Table of Contents
<!-- MarkdownTOC -->
- [Using the library](#using-the-library)
- [Quick start](#quick-start)
- [Identifying the language](#identifying-the-language)
- [Formatting the output](#formatting-the-output)
- [The HTML formatter](#the-html-formatter)
- [More detail](#more-detail)
- [Lexers](#lexers)
- [Formatters](#formatters)
- [Styles](#styles)
- [Command-line interface](#command-line-interface)
- [What's missing compared to Pygments?](#whats-missing-compared-to-pygments)
<!-- /MarkdownTOC -->
## Using the library
Chroma, like Pygments, has the concept of
Chroma, like Pygments, has the concepts of
[lexers](https://github.com/alecthomas/chroma/tree/master/lexers),
[formatters](https://github.com/alecthomas/chroma/tree/master/formatters) and
[styles](https://github.com/alecthomas/chroma/tree/master/styles).
@ -102,6 +120,27 @@ contents, err := ioutil.ReadAll(r)
err := lexer.Tokenise(nil, string(contents), writer)
```
### The HTML formatter
By default the `html` registered formatter generates standalone HTML with
embedded CSS. More flexibility is available through the `lexers/html` package.
Firstly, the output generated by the formatter can be customised with the
following constructor options:
- `Standalone()` - generate standalone HTML with embedded CSS.
- `WithClasses()` - use classes rather than inlined style attributes.
- `ClassPrefix(prefix)` - prefix each generated CSS class.
If `WithClasses()` is used, the corresponding CSS can be obtained from the formatter with:
```go
formatter := html.New(html.WithClasses())
err := formatter.WriteCSS(w, style)
```
## More detail
### Lexers
See the [Pygments documentation](http://pygments.org/docs/lexerdevelopment/)

View File

@ -77,7 +77,7 @@ command, for Go.
}
if *htmlStylesFlag {
formatter := html.New(html.WithClasses())
formatter.WriteStyles(w, styles.Get(*styleFlag))
formatter.WriteCSS(w, styles.Get(*styleFlag))
return
}
formatters.Register("html", html.New(options...))

View File

@ -102,7 +102,7 @@ func (h *HTMLFormatter) formatWithClasses(w io.Writer, style *chroma.Style) (fun
fmt.Fprint(w, "<html>\n")
}
fmt.Fprint(w, "<style type=\"text/css\">\n")
h.WriteStyles(w, style)
h.WriteCSS(w, style)
if h.standalone {
fmt.Fprintf(w, "body { %s; }\n", classes[chroma.Background])
}
@ -136,10 +136,12 @@ func (h *HTMLFormatter) formatWithClasses(w io.Writer, style *chroma.Style) (fun
}, nil
}
// WriteStyles writes style definitions (without any surrounding HTML).
func (h *HTMLFormatter) WriteStyles(w io.Writer, style *chroma.Style) {
// WriteCSS writes CSS style definitions (without any surrounding HTML).
func (h *HTMLFormatter) WriteCSS(w io.Writer, style *chroma.Style) error {
classes := h.typeStyles(style)
fmt.Fprintf(w, "/* %s */ .chroma { %s }\n", chroma.Background, classes[chroma.Background])
if _, err := fmt.Fprintf(w, "/* %s */ .chroma { %s }\n", chroma.Background, classes[chroma.Background]); err != nil {
return err
}
tts := []int{}
for tt := range classes {
tts = append(tts, int(tt))
@ -151,8 +153,11 @@ func (h *HTMLFormatter) WriteStyles(w io.Writer, style *chroma.Style) {
if tt < 0 {
continue
}
fmt.Fprintf(w, "/* %s */ .chroma .%ss%x { %s }\n", tt, h.prefix, int(tt), styles)
if _, err := fmt.Fprintf(w, "/* %s */ .chroma .%ss%x { %s }\n", tt, h.prefix, int(tt), styles); err != nil {
return err
}
}
return nil
}
func (h *HTMLFormatter) typeStyles(style *chroma.Style) map[chroma.TokenType]string {