packages feed

carettah-0.1.0: FormatPangoMarkup.hs

module FormatPangoMarkup (formatPangoMarkup) where
import Text.Highlighting.Kate
import Graphics.Rendering.Pango

-- TODO: should use blaze-builder

tagTok :: Token -> String
tagTok (KeywordTok, s)        = "<span foreground=\"#007020\" font_weight=\"bold\">" ++ escapeMarkup s ++ "</span>"
tagTok (DataTypeTok, s)       = "<span foreground=\"#902000\">" ++ escapeMarkup s ++ "</span>"
tagTok (DecValTok, s)         = "<span foreground=\"#40a070\">" ++ escapeMarkup s ++ "</span>"
tagTok (BaseNTok, s)          = "<span foreground=\"#40a070\">" ++ escapeMarkup s ++ "</span>"
tagTok (FloatTok, s)          = "<span foreground=\"#40a070\">" ++ escapeMarkup s ++ "</span>"
tagTok (CharTok, s)           = "<span foreground=\"#4070a0\">" ++ escapeMarkup s ++ "</span>"
tagTok (StringTok, s)         = "<span foreground=\"#4070a0\">" ++ escapeMarkup s ++ "</span>"
tagTok (CommentTok, s)        = "<span foreground=\"#60a0b0\" background=\"lightgray\" font_style=\"italic\">" ++ escapeMarkup s ++ "</span>"
tagTok (OtherTok, s)          = "<span foreground=\"#007020\">" ++ escapeMarkup s ++ "</span>"
tagTok (AlertTok, s)          = "<span foreground=\"red\" font_weight=\"bold\">" ++ escapeMarkup s ++ "</span>"
tagTok (FunctionTok, s)       = "<span foreground=\"#06287e\">" ++ escapeMarkup s ++ "</span>"
tagTok (RegionMarkerTok, s)   = escapeMarkup s
tagTok (ErrorTok, s)          = "<span foreground=\"red\" font_weight=\"bold\">" ++ escapeMarkup s ++ "</span>"
tagTok (NormalTok, s)         = escapeMarkup s

tagLine :: SourceLine -> [String]
tagLine = fmap tagTok

formatPangoMarkup :: String -> String -> String
formatPangoMarkup lang = unlines . fmap (concat . tagLine) . highlightAs lang