module Skylighting.Styles ( parseTheme , kate , breezeDark , pygments , espresso , tango , haddock , monochrome , zenburn) where import Data.Aeson (eitherDecode) import Data.ByteString.Lazy (ByteString) import qualified Data.Map as Map import Skylighting.Types -- | Parse a KDE theme JSON document into a skylighting Style. parseTheme :: ByteString -> Either String Style parseTheme = eitherDecode color :: Int -> Maybe Color color = toColor -- | Style based on kate's default colors. kate :: Style kate = Style{ tokenStyles = Map.fromList [ ( KeywordTok, defStyle { tokenColor = Just (RGB 31 28 27), tokenBold = True }) , ( DataTypeTok, defStyle { tokenColor = Just (RGB 0 87 174) }) , ( DecValTok, defStyle { tokenColor = Just (RGB 176 128 0) }) , ( BaseNTok, defStyle { tokenColor = Just (RGB 176 128 0) }) , ( FloatTok, defStyle { tokenColor = Just (RGB 176 128 0) }) , ( ConstantTok, defStyle { tokenColor = Just (RGB 170 85 0) }) , ( CharTok, defStyle { tokenColor = Just (RGB 146 76 157) }) , ( SpecialCharTok, defStyle { tokenColor = Just (RGB 61 174 233) }) , ( StringTok, defStyle { tokenColor = Just (RGB 191 3 3) }) , ( VerbatimStringTok, defStyle { tokenColor = Just (RGB 191 3 3) }) , ( SpecialStringTok, defStyle { tokenColor = Just (RGB 255 85 0) }) , ( ImportTok, defStyle { tokenColor = Just (RGB 255 85 0) }) , ( CommentTok, defStyle { tokenColor = Just (RGB 137 136 135) }) , ( DocumentationTok, defStyle { tokenColor = Just (RGB 96 120 128) }) , ( AnnotationTok, defStyle { tokenColor = Just (RGB 202 96 202) }) , ( CommentVarTok, defStyle { tokenColor = Just (RGB 0 149 255) }) , ( OtherTok, defStyle { tokenColor = Just (RGB 0 110 40) }) , ( FunctionTok, defStyle { tokenColor = Just (RGB 100 74 155) }) , ( VariableTok, defStyle { tokenColor = Just (RGB 0 87 174) }) , ( ControlFlowTok, defStyle { tokenColor = Just (RGB 31 28 27), tokenBold = True }) , ( OperatorTok, defStyle { tokenColor = Just (RGB 31 28 27) }) , ( BuiltInTok, defStyle { tokenColor = Just (RGB 100 74 155), tokenBold = True }) , ( ExtensionTok, defStyle { tokenColor = Just (RGB 0 149 255), tokenBold = True }) , ( PreprocessorTok, defStyle { tokenColor = Just (RGB 0 110 40) }) , ( AttributeTok, defStyle { tokenColor = Just (RGB 0 87 174) }) , ( RegionMarkerTok, defStyle { tokenColor = Just (RGB 0 87 174), tokenBackground = Just (RGB 224 233 248)} ) , ( InformationTok, defStyle { tokenColor = Just (RGB 176 128 0) }) , ( WarningTok, defStyle { tokenColor = Just (RGB 191 3 3) }) , ( AlertTok, defStyle { tokenColor = Just (RGB 191 3 3), tokenBackground = Just (RGB 247 230 230), tokenBold = True }) , ( ErrorTok, defStyle { tokenColor = Just (RGB 191 3 3), tokenUnderline = True }) , ( NormalTok, defStyle { tokenColor = Just (RGB 31 28 27) }) ] , defaultColor = Just (RGB 31 28 27) , backgroundColor = Just (RGB 255 255 255) , lineNumberColor = Just (RGB 160 160 160) , lineNumberBackgroundColor = Just (RGB 255 255 255) } -- | Style from the breeze-dark KDE syntax highlighting theme. breezeDark :: Style breezeDark = Style { tokenStyles = Map.fromList [ ( KeywordTok, defStyle { tokenColor = Just (RGB 207 207 194), tokenBold = True }) , ( DataTypeTok, defStyle { tokenColor = Just (RGB 41 128 185) }) , ( DecValTok, defStyle { tokenColor = Just (RGB 246 116 0) }) , ( BaseNTok, defStyle { tokenColor = Just (RGB 246 116 0) }) , ( FloatTok, defStyle { tokenColor = Just (RGB 246 116 0) }) , ( ConstantTok, defStyle { tokenColor = Just (RGB 39 174 174), tokenBold = True }) , ( CharTok, defStyle { tokenColor = Just (RGB 61 174 233) }) , ( SpecialCharTok, defStyle { tokenColor = Just (RGB 61 174 233) }) , ( StringTok, defStyle { tokenColor = Just (RGB 244 79 79) }) , ( VerbatimStringTok, defStyle { tokenColor = Just (RGB 218 68 83) }) , ( SpecialStringTok, defStyle { tokenColor = Just (RGB 218 68 83) }) , ( ImportTok, defStyle { tokenColor = Just (RGB 39 174 96) }) , ( CommentTok, defStyle { tokenColor = Just (RGB 122 124 125) }) , ( DocumentationTok, defStyle { tokenColor = Just (RGB 164 51 64) }) , ( AnnotationTok, defStyle { tokenColor = Just (RGB 63 128 88) }) , ( CommentVarTok, defStyle { tokenColor = Just (RGB 127 140 141) }) , ( OtherTok, defStyle { tokenColor = Just (RGB 39 174 96) }) , ( FunctionTok, defStyle { tokenColor = Just (RGB 142 68 173) }) , ( VariableTok, defStyle { tokenColor = Just (RGB 39 174 174) }) , ( ControlFlowTok, defStyle { tokenColor = Just (RGB 253 188 75), tokenBold = True }) , ( OperatorTok, defStyle { tokenColor = Just (RGB 207 207 194) }) , ( BuiltInTok, defStyle { tokenColor = Just (RGB 127 140 141) }) , ( ExtensionTok, defStyle { tokenColor = Just (RGB 0 153 255), tokenBold = True }) , ( PreprocessorTok, defStyle { tokenColor = Just (RGB 39 174 96) }) , ( AttributeTok, defStyle { tokenColor = Just (RGB 41 128 185) }) , ( RegionMarkerTok, defStyle { tokenColor = Just (RGB 41 128 185), tokenBackground = Just (RGB 21 48 66) }) , ( InformationTok, defStyle { tokenColor = Just (RGB 196 91 0) }) , ( WarningTok, defStyle { tokenColor = Just (RGB 218 68 83) }) , ( AlertTok, defStyle { tokenColor = Just (RGB 149 218 76), tokenBackground = Just (RGB 77 31 36), tokenBold = True }) , ( ErrorTok, defStyle { tokenColor = Just (RGB 218 68 83), tokenUnderline = True }) , ( NormalTok, defStyle { tokenColor = Just (RGB 207 207 194) }) ] , defaultColor = Just (RGB 207 207 194) , backgroundColor = Just (RGB 35 38 41) , lineNumberColor = Just (RGB 122 124 125) , lineNumberBackgroundColor = Just (RGB 35 38 41) } -- | Style based on pygments's default colors. pygments :: Style pygments = Style{ backgroundColor = Nothing , defaultColor = Nothing , lineNumberColor = color 0xaaaaaa , lineNumberBackgroundColor = Nothing , tokenStyles = Map.fromList [ (KeywordTok, defStyle{ tokenColor = color 0x007020, tokenBold = True }) , (DataTypeTok, defStyle{ tokenColor = color 0x902000 }) , (DecValTok, defStyle{ tokenColor = color 0x40a070 }) , (BaseNTok, defStyle{ tokenColor = color 0x40a070 }) , (FloatTok, defStyle{ tokenColor = color 0x40a070 }) , (CharTok, defStyle{ tokenColor = color 0x4070a0 }) , (StringTok, defStyle{ tokenColor = color 0x4070a0 }) , (CommentTok, defStyle{ tokenColor = color 0x60a0b0, tokenItalic = True }) , (OtherTok, defStyle{ tokenColor = color 0x007020 }) , (AlertTok, defStyle{ tokenColor = color 0xff0000, tokenBold = True }) , (FunctionTok, defStyle{ tokenColor = color 0x06287e }) , (ErrorTok, defStyle{ tokenColor = color 0xff0000, tokenBold = True }) , (WarningTok, defStyle{ tokenColor = color 0x60a0b0, tokenItalic = True, tokenBold = True }) , (ConstantTok, defStyle{ tokenColor = color 0x880000 }) , (SpecialCharTok, defStyle{ tokenColor = color 0x4070a0 }) , (VerbatimStringTok, defStyle{ tokenColor = color 0x4070a0 }) , (SpecialStringTok, defStyle{ tokenColor = color 0xBB6688 }) , (ImportTok, defStyle{ tokenColor = color 0x008000, tokenBold = True}) , (VariableTok, defStyle{ tokenColor = color 0x19177C }) , (ControlFlowTok, defStyle{ tokenColor = color 0x007020, tokenBold = True }) , (OperatorTok, defStyle{ tokenColor = color 0x666666 }) , (BuiltInTok, defStyle{ tokenColor = color 0x008000}) , (ExtensionTok, defStyle) , (PreprocessorTok, defStyle{ tokenColor = color 0xBC7A00 }) , (AttributeTok, defStyle{ tokenColor = color 0x7D9029 }) , (DocumentationTok, defStyle{ tokenColor = color 0xBA2121, tokenItalic = True }) , (AnnotationTok, defStyle{ tokenColor = color 0x60a0b0, tokenItalic = True, tokenBold = True }) , (CommentVarTok, defStyle{ tokenColor = color 0x60a0b0, tokenItalic = True, tokenBold = True }) , (InformationTok, defStyle{ tokenColor = color 0x60a0b0, tokenItalic = True, tokenBold = True }) ] } -- | Style based on pygments's tango colors. tango :: Style tango = Style { tokenStyles = Map.fromList [ ( KeywordTok , TokenStyle { tokenColor = Just (RGB 32 74 135) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) , ( DataTypeTok , TokenStyle { tokenColor = Just (RGB 32 74 135) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( DecValTok , TokenStyle { tokenColor = Just (RGB 0 0 207) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( BaseNTok , TokenStyle { tokenColor = Just (RGB 0 0 207) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( FloatTok , TokenStyle { tokenColor = Just (RGB 0 0 207) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( ConstantTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( CharTok , TokenStyle { tokenColor = Just (RGB 78 154 6) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( SpecialCharTok , TokenStyle { tokenColor = Just (RGB 206 92 0) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) , ( StringTok , TokenStyle { tokenColor = Just (RGB 78 154 6) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( VerbatimStringTok , TokenStyle { tokenColor = Just (RGB 78 154 6) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( SpecialStringTok , TokenStyle { tokenColor = Just (RGB 78 154 6) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( ImportTok , TokenStyle { tokenColor = Nothing , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( CommentTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = False , tokenItalic = True , tokenUnderline = False } ) , ( DocumentationTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = True , tokenItalic = True , tokenUnderline = False } ) , ( AnnotationTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = True , tokenItalic = True , tokenUnderline = False } ) , ( CommentVarTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = True , tokenItalic = True , tokenUnderline = False } ) , ( OtherTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( FunctionTok , TokenStyle { tokenColor = Just (RGB 32 74 135) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) , ( VariableTok , TokenStyle { tokenColor = Just (RGB 0 0 0) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( ControlFlowTok , TokenStyle { tokenColor = Just (RGB 32 74 135) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) , ( OperatorTok , TokenStyle { tokenColor = Just (RGB 206 92 0) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) , ( ExtensionTok , TokenStyle { tokenColor = Nothing , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( PreprocessorTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = False , tokenItalic = True , tokenUnderline = False } ) , ( AttributeTok , TokenStyle { tokenColor = Just (RGB 32 74 135) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( InformationTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = True , tokenItalic = True , tokenUnderline = False } ) , ( WarningTok , TokenStyle { tokenColor = Just (RGB 143 89 2) , tokenBackground = Nothing , tokenBold = True , tokenItalic = True , tokenUnderline = False } ) , ( AlertTok , TokenStyle { tokenColor = Just (RGB 239 41 41) , tokenBackground = Nothing , tokenBold = False , tokenItalic = False , tokenUnderline = False } ) , ( ErrorTok , TokenStyle { tokenColor = Just (RGB 164 0 0) , tokenBackground = Nothing , tokenBold = True , tokenItalic = False , tokenUnderline = False } ) ] , defaultColor = Nothing , backgroundColor = Just (RGB 248 248 248) , lineNumberColor = Just (RGB 170 170 170) , lineNumberBackgroundColor = Nothing } -- | Style based on ultraviolet's espresso_libre.css (dark background). espresso :: Style espresso = Style{ backgroundColor = color 0x2A211C , defaultColor = color 0xBDAE9D , lineNumberColor = color 0xBDAE9D , lineNumberBackgroundColor = color 0x2A211C , tokenStyles = Map.fromList [ (KeywordTok, defStyle{ tokenColor = color 0x43A8ED, tokenBold = True }) , (DataTypeTok, defStyle{ tokenUnderline = True }) , (DecValTok, defStyle{ tokenColor = color 0x44AA43 }) , (BaseNTok, defStyle{ tokenColor = color 0x44AA43 }) , (FloatTok, defStyle{ tokenColor = color 0x44AA43 }) , (CharTok, defStyle{ tokenColor = color 0x049B0A }) , (StringTok, defStyle{ tokenColor = color 0x049B0A }) , (CommentTok, defStyle{ tokenColor = color 0x0066FF, tokenItalic = True }) , (AlertTok, defStyle{ tokenColor = color 0xffff00 }) , (FunctionTok, defStyle{ tokenColor = color 0xFF9358, tokenBold = True }) , (ErrorTok, defStyle{ tokenColor = color 0xffff00, tokenBold = True }) , (WarningTok, defStyle{ tokenColor = color 0xffff00, tokenBold = True }) , (ConstantTok, defStyle) , (SpecialCharTok, defStyle{ tokenColor = color 0x049B0A }) , (VerbatimStringTok, defStyle{ tokenColor = color 0x049B0A }) , (SpecialStringTok, defStyle{ tokenColor = color 0x049B0A }) , (ImportTok, defStyle) , (VariableTok, defStyle) , (ControlFlowTok, defStyle{ tokenColor = color 0x43A8ED, tokenBold = True }) , (OperatorTok, defStyle) , (BuiltInTok, defStyle) , (ExtensionTok, defStyle) , (PreprocessorTok, defStyle{ tokenBold = True }) , (AttributeTok, defStyle) , (DocumentationTok, defStyle{ tokenColor = color 0x0066FF, tokenItalic = True }) , (AnnotationTok, defStyle{ tokenColor = color 0x0066FF, tokenItalic = True, tokenBold = True }) , (CommentTok, defStyle{ tokenColor = color 0x0066FF, tokenItalic = True, tokenBold = True }) , (InformationTok, defStyle{ tokenColor = color 0x0066FF, tokenItalic = True, tokenBold = True }) ] } -- | Style based on haddock's source highlighting. haddock :: Style haddock = Style{ backgroundColor = Nothing , defaultColor = Nothing , lineNumberColor = color 0xaaaaaa , lineNumberBackgroundColor = Nothing , tokenStyles = Map.fromList [ (KeywordTok, defStyle{ tokenColor = color 0x0000FF }) , (CharTok, defStyle{ tokenColor = color 0x008080 }) , (StringTok, defStyle{ tokenColor = color 0x008080 }) , (CommentTok, defStyle{ tokenColor = color 0x008000 }) , (OtherTok, defStyle{ tokenColor = color 0xff4000 }) , (AlertTok, defStyle{ tokenColor = color 0xff0000 }) , (ErrorTok, defStyle{ tokenColor = color 0xff0000, tokenBold = True }) , (WarningTok, defStyle{ tokenColor = color 0x008000, tokenBold = True }) , (ConstantTok, defStyle) , (SpecialCharTok, defStyle{ tokenColor = color 0x008080 }) , (VerbatimStringTok, defStyle{ tokenColor = color 0x008080 }) , (SpecialStringTok, defStyle{ tokenColor = color 0x008080 }) , (ImportTok, defStyle) , (VariableTok, defStyle) , (ControlFlowTok, defStyle{ tokenColor = color 0x0000FF }) , (OperatorTok, defStyle) , (BuiltInTok, defStyle) , (ExtensionTok, defStyle) , (PreprocessorTok, defStyle{ tokenColor = color 0xff4000 }) , (DocumentationTok, defStyle{ tokenColor = color 0x008000 }) , (AnnotationTok, defStyle{ tokenColor = color 0x008000 }) , (CommentVarTok, defStyle{ tokenColor = color 0x008000 }) , (AttributeTok, defStyle) , (InformationTok, defStyle{ tokenColor = color 0x008000 }) ] } -- | Style with no colors. monochrome :: Style monochrome = Style{ backgroundColor = Nothing , defaultColor = Nothing , lineNumberColor = Nothing , lineNumberBackgroundColor = Nothing , tokenStyles = Map.fromList [ (KeywordTok, defStyle{ tokenBold = True }) , (DataTypeTok, defStyle{ tokenUnderline = True }) , (CommentTok, defStyle{ tokenItalic = True }) , (AlertTok, defStyle{ tokenBold = True }) , (ErrorTok, defStyle{ tokenBold = True }) , (WarningTok, defStyle{ tokenItalic = True }) , (ControlFlowTok, defStyle{ tokenBold = True }) , (PreprocessorTok, defStyle{ tokenBold = True }) , (DocumentationTok, defStyle{ tokenItalic = True }) , (AnnotationTok, defStyle{ tokenItalic = True }) , (CommentVarTok, defStyle{ tokenItalic = True }) , (InformationTok, defStyle{ tokenItalic = True }) ] } -- | Style based on the popular zenburn vim color scheme zenburn :: Style zenburn = Style{ backgroundColor = color 0x303030 , defaultColor = color 0xcccccc , lineNumberColor = Nothing , lineNumberBackgroundColor = Nothing , tokenStyles = Map.fromList [ (KeywordTok, defStyle{ tokenColor = color 0xf0dfaf }) , (DataTypeTok, defStyle{ tokenColor = color 0xdfdfbf }) , (DecValTok, defStyle{ tokenColor = color 0xdcdccc }) , (BaseNTok, defStyle{ tokenColor = color 0xdca3a3 }) , (FloatTok, defStyle{ tokenColor = color 0xc0bed1 }) , (CharTok, defStyle{ tokenColor = color 0xdca3a3 }) , (StringTok, defStyle{ tokenColor = color 0xcc9393 }) , (CommentTok, defStyle{ tokenColor = color 0x7f9f7f }) , (OtherTok, defStyle{ tokenColor = color 0xefef8f }) , (AlertTok, defStyle{ tokenColor = color 0xffcfaf }) , (FunctionTok, defStyle{ tokenColor = color 0xefef8f }) , (ErrorTok, defStyle{ tokenColor = color 0xc3bf9f }) , (WarningTok, defStyle{ tokenColor = color 0x7f9f7f, tokenBold = True }) , (ConstantTok, defStyle{ tokenColor = color 0xdca3a3, tokenBold = True }) , (SpecialCharTok, defStyle{ tokenColor = color 0xdca3a3 }) , (VerbatimStringTok, defStyle{ tokenColor = color 0xcc9393 }) , (SpecialStringTok, defStyle{ tokenColor = color 0xcc9393 }) , (ImportTok, defStyle) , (VariableTok, defStyle) , (ControlFlowTok, defStyle{ tokenColor = color 0xf0dfaf }) , (OperatorTok, defStyle{ tokenColor = color 0xf0efd0 }) , (BuiltInTok, defStyle) , (ExtensionTok, defStyle) , (PreprocessorTok, defStyle{ tokenColor = color 0xffcfaf, tokenBold = True }) , (AttributeTok, defStyle) , (DocumentationTok, defStyle{ tokenColor = color 0x7f9f7f }) , (AnnotationTok, defStyle{ tokenColor = color 0x7f9f7f, tokenBold = True }) , (CommentVarTok, defStyle{ tokenColor = color 0x7f9f7f, tokenBold = True }) , (InformationTok, defStyle{ tokenColor = color 0x7f9f7f, tokenBold = True }) ] }