------------------------------------------------------------------------------ -- | -- Module: Xmobar.Text.Pango -- Copyright: (c) 2022 Jose Antonio Ortega Ruiz -- License: BSD3-style (see LICENSE) -- -- Author: Pavel Kalugin -- Maintainer: jao@gnu.org -- Stability: unstable -- Portability: portable -- Created: Fri Feb 4, 2022 01:15 -- -- -- Codification with Pango markup -- ------------------------------------------------------------------------------ module Xmobar.Text.Pango (withPangoColor, withPangoFont, withPangoMarkup) where import Text.Printf (printf) import Data.List (isPrefixOf) replaceAll :: (Eq a) => a -> [a] -> [a] -> [a] replaceAll c s = concatMap (\x -> if x == c then s else [x]) xmlEscape :: String -> String xmlEscape s = replaceAll '"' """ $ replaceAll '\'' "'" $ replaceAll '<' "<" $ replaceAll '>' ">" $ replaceAll '&' "&" s withPangoColor :: (String, String) -> String -> String withPangoColor (fg, bg) s = printf fmt (xmlEscape fg) (xmlEscape bg) (xmlEscape s) where fmt = "%s" fixXft :: String -> String fixXft font = if "xft:" `isPrefixOf` font then drop 4 font else font withPangoFont :: String -> String -> String withPangoFont font txt = printf fmt (fixXft font) (xmlEscape txt) where fmt = "%s" withPangoMarkup :: String -> String -> String -> String -> String withPangoMarkup fg bg font txt = printf fmt (fixXft font) (xmlEscape fg) (xmlEscape bg) (xmlEscape txt) where fmt = "%s"