module Xmobar.Text.Pango (withPangoColor, withPangoFont, withPangoMarkup, fixXft)
where
import Text.Printf (printf)
import Data.List (isPrefixOf)
replaceAll :: (Eq a) => a -> [a] -> [a] -> [a]
replaceAll :: forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll a
c [a]
s = forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (\a
x -> if a
x forall a. Eq a => a -> a -> Bool
== a
c then [a]
s else [a
x])
xmlEscape :: String -> String
xmlEscape :: String -> String
xmlEscape String
s = forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'"' String
""" forall a b. (a -> b) -> a -> b
$
forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'\'' String
"'" forall a b. (a -> b) -> a -> b
$
forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'<' String
"<" forall a b. (a -> b) -> a -> b
$
forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'>' String
">" forall a b. (a -> b) -> a -> b
$
forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'&' String
"&" String
s
withPangoColor :: (String, String) -> String -> String
withPangoColor :: (String, String) -> String -> String
withPangoColor (String
fg, String
bg) String
s =
forall r. PrintfType r => String -> r
printf String
fmt (String -> String
xmlEscape String
fg) (String -> String
xmlEscape String
bg) (String -> String
xmlEscape String
s)
where fmt :: String
fmt = String
"<span foreground=\"%s\" background=\"%s\">%s</span>"
fixXft :: String -> String
fixXft :: String -> String
fixXft String
font =
if String
"xft:" forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
font then forall a. Eq a => a -> [a] -> [a] -> [a]
replaceAll Char
'-' String
" " forall a b. (a -> b) -> a -> b
$ forall a. Int -> [a] -> [a]
drop Int
4 String
font else String
font
withPangoFont :: String -> String -> String
withPangoFont :: String -> String -> String
withPangoFont String
font String
txt = forall r. PrintfType r => String -> r
printf String
fmt (String -> String
fixXft String
font) (String -> String
xmlEscape String
txt)
where fmt :: String
fmt = String
"<span font=\"%s\">%s</span>"
withPangoMarkup :: String -> String -> String -> String -> String
withPangoMarkup :: String -> String -> String -> String -> String
withPangoMarkup String
fg String
bg String
font String
txt =
forall r. PrintfType r => String -> r
printf String
fmt (String -> String
fixXft String
font) (String -> String
xmlEscape String
fg) (String -> String
xmlEscape String
bg) (String -> String
xmlEscape String
txt)
where fmt :: String
fmt = String
"<span font=\"%s\" foreground=\"%s\" background=\"%s\">%s</span>"