M rhapsode.cabal => rhapsode.cabal +1 -1
@@ 64,7 64,7 @@ executable rhapsode
html-conduit, xml-conduit, text, containers, data-default-class,
network-uri,
stylist >= 1.1, css-syntax, xml-conduit-stylist, scientific,
- async, hurl
+ async, hurl >= 1.1.0.0, filepath
-- Directories containing source files.
hs-source-dirs: src
M src/Input.hs => src/Input.hs +12 -0
@@ 17,6 17,8 @@ import System.Environment
import System.Directory
import Data.List
import Data.Default.Class
+import Data.Maybe (fromMaybe)
+import System.FilePath
--- Commandline arguments
data ProgramCtl = ProgramCtl {
@@ 92,3 94,13 @@ docForText txt = XML.Document {
},
XML.documentEpilogue = []
}
+
+newFilePath filepath count = do
+ let realpath = filepath ++ show count
+ exists <- doesPathExist realpath
+ if exists then newFilePath filepath $ count + 1 else return realpath
+
+downloadsDir = do
+ downloads <- lookupEnv "XDG_DOWNLOAD_DIR"
+ home <- getHomeDirectory
+ return $ fromMaybe (home </> "Downloads") downloads
M src/Main.hs => src/Main.hs +4 -6
@@ 74,9 74,10 @@ retreiveStyles uri html manager base = do
loadURL url = do
response <- fetchURL manager ["text/css"] url
+ let charsets' = map unpack charsets
return $ case response of
("text/css", Left text) -> text
- ("text/css", Right bytes) -> applyCSScharset charsets $ B.toStrict bytes
+ ("text/css", Right bytes) -> applyCSScharset charsets' $ B.toStrict bytes
(_, _) -> ""
lowerVars "speech" = CSSCond.B True
@@ 84,14 85,11 @@ retreiveStyles uri html manager base = do
lowerVars _ = CSSCond.B False
lowerToks _ = CSSCond.B False
-applyCSScharset (charset:charsets) bytes | cssCharset (CSSTok.tokenize text') == charset = text
+applyCSScharset (charset:charsets) bytes
+ | cssCharset (CSSTok.tokenize text) == Txt.pack charset = text
| otherwise = applyCSScharset charsets bytes
where
text = convertCharset charset bytes
- -- I don't know how better to handle these errors in the APIs I'm using...
- text' = unsafePerformIO $ catch (evaluate text) handleDecodeError
- handleDecodeError :: UnicodeException -> IO Text -- Type signature REQUIRED
- handleDecodeError _ = return ""
applyCSScharset _ bytes = convertCharset "utf-8" bytes
cssCharset toks | (CSSTok.AtKeyword "charset":toks') <- skipCSSspace toks,
(CSSTok.String charset:_) <- skipCSSspace toks' = charset