module Graphics.Vty.Widgets.Extras.Text
( highlight
)
where
import Text.Regex.Base (RegexLike, matchAll)
import Graphics.Vty.Widgets.Text (Formatter(..))
import Graphics.Vty (Attr, def_attr)
import Text.Trans.Tokenize (TextStreamEntity(..), Token(..), TextStream(..))
highlight :: (RegexLike r String) => r -> Attr -> Formatter
highlight regex attr = Formatter $
\_ (TS ts) -> return $ TS $ map highlightToken ts
where
highlightToken :: TextStreamEntity Attr -> TextStreamEntity Attr
highlightToken NL = NL
highlightToken (T t) =
if tokenAttr t /= def_attr
then T t
else T (highlightToken' t)
highlightToken' :: Token Attr -> Token Attr
highlightToken' t =
if null $ matchAll regex $ tokenStr t
then t
else t { tokenAttr = attr }