lhslatex (empty) → 0.1.0.0
raw patch · 5 files changed
+115/−0 lines, 5 filesdep +basedep +directorydep +filepathsetup-changed
Dependencies added: base, directory, filepath, process, regex-posix
Files
- LICENSE +27/−0
- README.md +2/−0
- Setup.hs +2/−0
- lhslatex.cabal +29/−0
- lhslatex.hs +55/−0
+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) 2014, Timo von Holtz+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++* Redistributions of source code must retain the above copyright notice, this+ list of conditions and the following disclaimer.++* Redistributions in binary form must reproduce the above copyright notice,+ this list of conditions and the following disclaimer in the documentation+ and/or other materials provided with the distribution.++* Neither the name of the {organization} nor the names of its+ contributors may be used to endorse or promote products derived from+ this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,2 @@+lhslatex+========
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ lhslatex.cabal view
@@ -0,0 +1,29 @@+-- Initial lhslatex.cabal generated by cabal init. For further +-- documentation, see http://haskell.org/cabal/users-guide/++name: lhslatex+version: 0.1.0.0+synopsis: Tool for using pdflatex with .lhs files+description: Tool for using pdflatex with .lhs files+homepage: https://github.com/tvh/lhslatex+license: BSD3+license-file: LICENSE+author: Timo von Holtz+maintainer: tvh@tvholtz.de+-- copyright: +-- category: +build-type: Simple+extra-source-files: README.md+cabal-version: >=1.10++executable lhslatex+ main-is: lhslatex.hs + -- other-modules: + -- other-extensions: + build-depends: base >=4.6 && <4.8,+ process >= 1.2,+ filepath >= 1.3,+ regex-posix >= 0.95,+ directory >= 1.2+ -- hs-source-dirs: + default-language: Haskell2010
+ lhslatex.hs view
@@ -0,0 +1,55 @@+import System.Directory+import System.Environment+import Text.Regex.Posix+import System.FilePath.Posix+import Data.List+import System.Process+import Control.Monad++createTmpDir :: FilePath -> IO FilePath+createTmpDir base = do+ let dir = addExtension base ".XXXXXXXXXX"+ exists <- doesDirectoryExist dir+ when exists $ removeDirectoryRecursive dir+ createDirectory dir+ return dir++splitArgs :: [String] -> (String,[String])+splitArgs args =+ let (file, args') = partition (=~ "\\.lhs$") args+ file' = case file of+ [f] -> f+ _ -> error "could not identify .lhs file"+ (stem,_) = splitExtension file'+ in (stem, args')++moveFile :: FilePath -> FilePath -> IO ()+moveFile fp1 fp2 = do+-- error $ show (fp1,fp2)+ exists <- doesFileExist fp2+ when exists (removeFile fp2)+ renameFile fp1 fp2++main :: IO ()+main = do+ args <- getArgs+ let (stem,args') = splitArgs args+ file = addExtension stem ".lhs"+ texFile = addExtension stem ".tex"+ pdfFile = addExtension stem ".pdf"+ auxFile = addExtension stem ".aux"+ old_dir <- getCurrentDirectory+ tmp_dir <- createTmpDir (old_dir </> "lhslatex")+ tInputs' <- lookupEnv "TEXINPUTS"+ let tInputs = case tInputs' of+ Just e -> e+ Nothing -> ""+ setEnv "TEXINPUTS" $ old_dir ++ ":" ++ tInputs+ lhsFile <- readFile file+ setCurrentDirectory tmp_dir+ tex <- readProcess "lhs2TeX" ["-"] lhsFile+ writeFile texFile tex+ callProcess "pdflatex" (args' ++ [texFile])+ moveFile (tmp_dir </> pdfFile) (old_dir </> pdfFile)+ moveFile (tmp_dir </> auxFile) (old_dir </> auxFile)+ removeDirectoryRecursive tmp_dir