summaryrefslogtreecommitdiff
path: root/Pancake
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2017-12-14 01:37:19 +0300
committerdefanor <defanor@uberspace.net>2017-12-14 01:37:19 +0300
commit468c60775c21d1f3505261fd0840aec1d9fdb5c0 (patch)
tree7cf4386b1eee906fced90140289782125fe807fd /Pancake
parent26dd6a87815bcd735b1a2c7c11eeb071b003a3ee (diff)
Handle HXT errors and suppress warnings
Diffstat (limited to 'Pancake')
-rw-r--r--Pancake/Unclutter.hs14
1 files changed, 9 insertions, 5 deletions
diff --git a/Pancake/Unclutter.hs b/Pancake/Unclutter.hs
index eccc050..06ce098 100644
--- a/Pancake/Unclutter.hs
+++ b/Pancake/Unclutter.hs
@@ -41,10 +41,11 @@ import Data.List
import Text.Regex.TDFA.String
import Text.Regex.Base.RegexLike
import Text.XML.HXT.Core ( writeDocumentToString, readString
- , withParseHTML, runX, (>>>), yes)
+ , withParseHTML, withWarnings, runX, (>>>), yes, no)
import Text.XML.HXT.XSLT (xsltApplyStylesheetFromURI)
import Data.Text.Encoding (decodeUtf8', decodeLatin1, encodeUtf8)
import qualified Data.Text as T
+import Control.Exception
import Pancake.Common
@@ -59,19 +60,19 @@ tryUnclutter :: MonadIO m
-> BS.ByteString
-- ^ Raw document.
-> m BS.ByteString
-tryUnclutter rs u d = do
+tryUnclutter rs u d = liftIO $ handle err $ do
let matches (r, _) = case execute r uStr of
Right (Just _) -> True
_ -> False
case find matches rs of
- Just (_, fn) -> liftIO $ do
+ Just (_, fn) -> do
dir <- getXdgDirectory XdgConfig "pancake"
let src = dir </> "unclutter" </> fn <.> "xsl"
exists <- doesFileExist src
if exists
then do
let txt = T.unpack $ either (const $ decodeLatin1 d) id $ decodeUtf8' d
- doc = readString [withParseHTML yes] txt
+ doc = readString [withParseHTML yes, withWarnings no] txt
rc <- runX $ doc
>>> xsltApplyStylesheetFromURI src
>>> writeDocumentToString []
@@ -80,7 +81,10 @@ tryUnclutter rs u d = do
_ -> d
else pure d
Nothing -> pure d
- where uStr = uriToString id u ""
+ where
+ uStr = uriToString id u ""
+ err :: SomeException -> IO BS.ByteString
+ err e = putErrLn (show e) >> pure d
-- | Compiles regexps for uncluttering.
prepareUnclutter :: MonadIO m => Config -> m [(Regex, String)]