~alcinnz/hurl

1fec182a0be7faaccf727add3ee0b97594064615 — Adrian Cochrane 4 years ago 47f9ef3
Implement lookups of ini-file keys.
1 files changed, 14 insertions(+), 3 deletions(-)

M src/Network/URI/XDG/Ini.hs
M src/Network/URI/XDG/Ini.hs => src/Network/URI/XDG/Ini.hs +14 -3
@@ 1,6 1,6 @@
module Network.URI.XDG.Ini(parseIni) where
module Network.URI.XDG.Ini(INI, parseIni, iniLookup, iniLookupLocalized) where

import Data.Char (isSpace)
import Data.Char (isSpace, toLower)
import Data.List (dropWhile, dropWhileEnd)

type INI = [(String, [(String, String)])]


@@ 8,7 8,7 @@ type INI = [(String, [(String, String)])]
parseIni :: String -> INI
parseIni source = parseIni' $ filter (not . isComment) $ map strip $ lines source

strip cs = dropWhile isSpace $ dropWhileEnd isSpace cs
strip cs = dropWhile isSpace $ dropWhileEnd isSpace $ map toLower cs
strip2 (a, b) = (strip a, strip b)

isComment ('#':_) = True


@@ 28,3 28,14 @@ parseKeys [] = ([], [])
parseKey ('=':as) = ([], as)
parseKey (a:as) = let (x, y) = parseKey as in (a:x, y)
parseKey [] = ([], [])

---

iniLookup :: String -> String -> INI -> Maybe String
iniLookup group key ini = lookup group ini >>= lookup key

iniLookupLocalized :: [String] -> String -> String -> INI -> Maybe String
iniLookupLocalized (locale:locales) group key ini
    | Just ret <- iniLookup group (key ++ "[" ++ locale ++ "]") ini = Just ret
    | otherwise = iniLookupLocalized locales group key ini
iniLookupLocalized [] group key ini = iniLookup group key ini