xournal-convert 0.1.0 → 0.1.1
raw patch · 4 files changed
+97/−70 lines, 4 filesdep +bytestringdep ~xournal-parserdep ~xournal-renderdep ~xournal-types
Dependencies added: bytestring
Dependency ranges changed: xournal-parser, xournal-render, xournal-types
Files
- lib/Application/XournalConvert/Command.hs +3/−3
- lib/Application/XournalConvert/Convert/MakeSVG.hs +72/−0
- lib/Application/XournalConvert/Job.hs +15/−62
- xournal-convert.cabal +7/−5
lib/Application/XournalConvert/Command.hs view
@@ -4,9 +4,9 @@ import Application.XournalConvert.Job commandLineProcess :: Xournal_convert -> IO ()-commandLineProcess Test = do - putStrLn "test called"- startJob+-- commandLineProcess Test = do +-- putStrLn "test called"+-- startJob commandLineProcess (MakeSVG fname mdest) = do putStrLn "makeSVG is called" startMakeSVG fname mdest
+ lib/Application/XournalConvert/Convert/MakeSVG.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE ScopedTypeVariables #-}++module Application.XournalConvert.Convert.MakeSVG where++import Data.List +import Graphics.Xournal.Render.Simple+import Graphics.Rendering.Cairo++import Data.Xournal.Simple+import Text.Xournal.Parse++import Text.StringTemplate++import System.Directory +import System.FilePath+import System.IO+import qualified Data.ByteString.Lazy as B++import Paths_xournal_convert++makeSVGFromXournal :: Xournal -> FilePath -> FilePath + -> IO [String] +makeSVGFromXournal xojcontent fname dest = do + let fnamebase = takeBaseName fname + let pages = xoj_pages xojcontent+ names = map (svgFileName fnamebase) [1..]+ namePages = zip names pages + let Dim w h = page_dim (head pages)+ let svgoutfn x = withSVGSurface (dest </> fst x) w h (\s -> renderWith s (cairoDrawPage (snd x)))++ mapM_ svgoutfn namePages+ makeHtmlJavascriptPage (dest </> "index.html") $ zip [1..] (map fst namePages)+ return (map fst namePages )++++render1 :: [(String,String)] -> String -> String+render1 attribs tmpl = render . setManyAttrib attribs . newSTMP $ tmpl++svgFileName :: String -> Int -> String +svgFileName fname_wo_ext pnum =+ fname_wo_ext ++ "_Page_" ++ show pnum <.> "svg"++checkIfBinary :: FilePath -> IO Bool +checkIfBinary fname = + withFile fname ReadMode $ \h -> do+ b <- return . B.any ( == 0 ) . B.take 100 =<< B.hGetContents h + b `seq` return b + +ifThenElse :: Bool -> a -> a -> a +ifThenElse b tact fact = if b then tact else fact ++onePageTemplate :: String +onePageTemplate = "<p><div class=\"page\"> <a name=\"$page$\"> <img src=\"$filename$\" width=100% /> </a> </div> </p>\n\n"++onerule :: String +onerule = "<hr /> \n"++makeHtmlJavascriptPage :: FilePath -> [(Int,String)] -> IO ()+makeHtmlJavascriptPage fname names = do+ putStrLn $ "writing " ++ fname+ putStrLn $ show names + templateDir <- getDataDir >>= return . (</> "template")+ indexhtmlst <- readFile (templateDir </> "index.html.st")+ let mkstr :: (Int,String) -> String + mkstr (p,n) = flip render1 onePageTemplate [ ("filename", "." </> n) + , ("page", show p) ]+ bodystr = intercalate onerule . map mkstr $ names+ let str = flip render1 indexhtmlst [ ("body", bodystr) ] + withFile fname WriteMode $ \h -> do + hPutStr h str+
lib/Application/XournalConvert/Job.hs view
@@ -2,73 +2,26 @@ module Application.XournalConvert.Job where -import Data.List -import Graphics.Xournal.Render.Simple-import Graphics.Rendering.Cairo--import Data.Xournal.Simple-import Text.Xournal.Parse--import Text.StringTemplate- import System.Directory -import System.FilePath-import System.IO--import Paths_xournal_convert--render1 :: [(String,String)] -> String -> String-render1 attribs tmpl = render . setManyAttrib attribs . newSTMP $ tmpl--svgFileName :: String -> Int -> String -svgFileName fname_wo_ext pnum =- fname_wo_ext ++ "_Page_" ++ show pnum <.> "svg"---startJob :: IO () -startJob = do - putStrLn "job started"--+import Data.Xournal.Simple+-- import Text.Xournal.Parse+import Text.Xournal.Parse.Enumerator +import Application.XournalConvert.Convert.MakeSVG +-- | startMakeSVG :: FilePath -> Maybe FilePath -> IO () startMakeSVG fname mdest = do - xojcontent <- read_xournal fname - cdir <- getCurrentDirectory - let dest = maybe cdir id mdest + exojcontent <- parseXournal fname + case exojcontent of + Left err -> putStrLn $ "parsing error : " ++ err + Right xojcontent -> do + cdir <- getCurrentDirectory + let dest = maybe cdir id mdest + makeSVGFromXournal xojcontent fname dest + return () - -- setCurrentDirectory dest - let -- (fname_wo_ext,_fname_ext) = splitExtension fname - fnamebase = takeBaseName fname - let pages = xoj_pages xojcontent- names = map (svgFileName fnamebase) [1..]- namePages = zip names pages - let Dim w h = page_dim (head pages)- let svgoutfn x = withSVGSurface (dest </> fst x) w h (\s -> renderWith s (cairoDrawPage (snd x)))-- mapM_ svgoutfn namePages- makeHtmlJavascriptPage (dest </> "index.html") $ zip [1..] (map fst namePages)- putStrLn "test ended"--onePageTemplate :: String -onePageTemplate = "<p><div class=\"page\"> <a name=\"$page$\"> <img src=\"$filename$\" width=100% /> </a> </div> </p>\n\n"--onerule :: String -onerule = "<hr /> \n"+ -- xojcontent <- checkIfBinary fname >>= \b -> + -- ifThenElse b (read_xojgz fname) (read_xournal fname) -makeHtmlJavascriptPage :: FilePath -> [(Int,String)] -> IO ()-makeHtmlJavascriptPage fname names = do- putStrLn $ "writing " ++ fname- putStrLn $ show names - templateDir <- getDataDir >>= return . (</> "template")- indexhtmlst <- readFile (templateDir </> "index.html.st")- let mkstr :: (Int,String) -> String - mkstr (p,n) = flip render1 onePageTemplate [ ("filename", "." </> n) - , ("page", show p) ]- bodystr = intercalate onerule . map mkstr $ names- let str = flip render1 indexhtmlst [ ("body", bodystr) ] - withFile fname WriteMode $ \h -> do - hPutStr h str-
xournal-convert.cabal view
@@ -1,5 +1,5 @@ Name: xournal-convert-Version: 0.1.0+Version: 0.1.1 Synopsis: convert utility for xoj files Description: convert xoj files into various formats (SVG,SVG+index.html..) Homepage: http://ianwookim.org/hxournal@@ -39,15 +39,17 @@ filepath == 1.2.*, cmdargs >= 0.7 && < 0.10, HStringTemplate == 0.6.*,- xournal-types == 0.2.*,- xournal-parser == 0.3.*, - xournal-render == 0.4.*, - cairo == 0.12.*+ xournal-types == 0.4.*,+ xournal-parser >= 0.4.1 && < 0.5, + xournal-render == 0.6.*, + cairo == 0.12.*, + bytestring == 0.9.* Exposed-Modules: Application.XournalConvert.ProgType Application.XournalConvert.Job Application.XournalConvert.Command+ Application.XournalConvert.Convert.MakeSVG Other-Modules: Paths_xournal_convert