module Text.XML.HXT.Parser.DefaultURI
( setDefaultURI
)
where
import Text.XML.HXT.DOM.XmlTree
import Text.XML.HXT.DOM.XmlState
import System.Directory
( getCurrentDirectory
)
import Network.URI
( escapeURIChar
, isUnescapedInURI
)
setDefaultURI :: XState state ()
setDefaultURI
= do
wd <- io getCurrentDirectory
setSysParam transferDefaultURI ("file://" ++ normalize wd ++ "/")
where
normalize wd'@(d : ':' : _)
| d `elem` ['A'..'Z'] || d `elem` ['a'..'z']
= '/' : concatMap win32ToUriChar wd'
normalize wd'
= concatMap escapeNonUriChar wd'
win32ToUriChar '\\' = "/"
win32ToUriChar c = escapeNonUriChar c
escapeNonUriChar c = escapeURIChar isUnescapedInURI c