Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module provides an API for building Brick widgets to display syntax-highlighted text using the Skylighting library.
To use this module, you'll need to:
- have some
Text
you want to syntax-highlight. - know the language in which the
Text
is expressed. - have a loaded
SyntaxMap
orSyntax
that can be used to format the input text. - have a Skylighting
Style
you'd like to use to determine the colors, either from the Skylighting package or one of your own.
To highlight some text in your user interface, use one of
the (increasingly finer-grained) highlighting functions
highlight
, highlight'
, or renderRawSource
.
To actually see pretty colors, you'll need to update your
application's AttrMap
with name-to-color mappings. Those can be
built from a Skylighting Style
with attrMappingsForStyle
and then
appended to your attrMap
mapping list.
The highlighted code widget produced by this module uses
highlightedCodeBlockAttr
as its base attribute and then uses
a specific attribute for each kind of Skylighting token as per
attrNameForTokenType
.
See the programs/Demo.hs
program in this package for an example of a
complete program that uses this module.
Synopsis
- highlight :: Syntax -> Text -> Widget n
- highlightFromMap :: SyntaxMap -> Text -> Text -> Widget n
- highlight' :: (Text -> Widget n) -> Syntax -> Text -> Widget n
- renderRawSource :: (Text -> Widget n) -> [SourceLine] -> Widget n
- attrMappingsForStyle :: Style -> [(AttrName, Attr)]
- attrNameForTokenType :: TokenType -> AttrName
- highlightedCodeBlockAttr :: AttrName
Highlighting functions
:: Syntax | The syntax to use to parse the input text. |
-> Text | The text to be syntax-highlighted. |
-> Widget n |
Highlight the specified text using the provided syntax definition.
:: (Text -> Widget n) | The token widget constructor. |
-> Syntax | The syntax to use to parse the input text. |
-> Text | The text to be syntax-highlighted. |
-> Widget n |
If you already have a Syntax
handy and want to have control over
how each Text
token in the Skylighting AST gets converted to a
Widget
, this provides more control than highlight
, which just
defaults the text widget constructor to txt
. If the specified
parser fails to parse the input, the text is displayed as-is and tab
characters are converted to eight spaces.
:: (Text -> Widget n) | The token widget constructor. |
-> [SourceLine] | The parsed input. |
-> Widget n |
If you have already parsed your input text into Skylighting tokens, this function is the best one to use.
Attributes
attrMappingsForStyle :: Style -> [(AttrName, Attr)] Source #
Given a Skylighting Style
, build an equivalent list of
Brick-compatible AttrMap
entries. This will usually return
256-color entries.
attrNameForTokenType :: TokenType -> AttrName Source #
The constructor for attribute names for each TokenType
in
Skylighting.
highlightedCodeBlockAttr :: AttrName Source #
The base attribute name for all syntax-highlighted renderings.