HPDF-0.3: Graphics/PDF/Text.hs
-- | Function used to draw text
module Graphics.PDF.Text
(-- * Text
drawText, clipText,fillAndDrawText,fillText,charSpacing,wordSpacing,textLeading
, pdfString
)
where
import Graphics.PDF.LowLevel
import Text.Regex
leftPar = mkRegex "[(]"
rightPar = mkRegex "[)]"
backslash = mkRegex "[\\]"
-- | Create a pdf string
pdfString :: String -> [PdfString]
pdfString s = map (S . escape) . lines $ s
where
escape s = replace rightPar "\\)" . replace leftPar "\\(" . replace backslash "\\\\\\\\" $ s
replace reg repl s = subRegex reg s repl
-- | Stroke text at a given position and use the current font settings
drawText :: Float -> Float -> String -> PdfCmd
drawText px py s = (PdfText TextStroke px py (pdfString s),[])
-- | Fill and stroke text at a given position and use the current font settings
fillAndDrawText :: Float -> Float -> String -> PdfCmd
fillAndDrawText px py s = (PdfText TextFillStroke px py (pdfString s),[])
-- | Fill text at a given position and use the current font settings
fillText :: Float -> Float -> String -> PdfCmd
fillText px py s = (PdfText TextFill px py (pdfString s),[])
-- | Intersect clip region with text shape
clipText :: Float -> Float -> String -> PdfCmd
clipText px py s = (PdfText TextClip px py (pdfString s),[])
-- | Set char spacing value
charSpacing :: Float -> PdfCmd
charSpacing value = (PdfCharSpacing value,[])
-- | Set word spacing value
wordSpacing :: Float -> PdfCmd
wordSpacing value = (PdfWordSpacing value,[])
-- | Set text leading value (used for line separation when text is containing a \\n)
textLeading :: Float -> PdfCmd
textLeading value = (PdfLeading value,[])