api-tools-0.2: src/Data/API/Doc/Subst.hs
module Data.API.Doc.Subst
( Dict
, subst
, prep
, mkDict
, extDict
)
where
import qualified Data.Map as Map
import Text.Regex
import Safe
type Dict = Map.Map String String
subst_re :: Regex
subst_re = mkRegexWithOpts "<<[a-zA-Z0-9_'-]+>>" True True
subst :: Dict -> String -> String
subst dct str =
case matchRegexAll subst_re str of
Nothing -> str
Just (pre,var_,pst,_) -> pre ++ rpl ++ subst dct pst
where
rpl = maybe ("<<"++var++">>") id $ Map.lookup var dct
var = chp $ reverse $ chp $ reverse var_
chp = tailNote "subst.chp" . tailNote "subst.chp"
prep :: Dict -> [String] -> String
prep dct = unlines . map (subst dct)
mkDict :: [(String,String)] -> Dict
mkDict = Map.fromList
extDict :: [(String,String)] -> Dict -> Dict
extDict al dct = foldr (uncurry Map.insert) dct al