pdfname 0.1.2 → 0.1.3
raw patch · 7 files changed
+183/−76 lines, 7 files
Files
- CHANGELOG.md +16/−7
- README.md +23/−4
- pdfname.cabal +4/−1
- src/CreateFile.hs +26/−17
- src/Main.hs +12/−13
- src/Substituions.hs +100/−18
- src/Utilities.hs +2/−16
CHANGELOG.md view
@@ -1,18 +1,27 @@ Changelog for pdfname ===================== -0.1.2 (released 2017-07-09)----------------------------+0.1.3+----- -[#1](https://github.com/asr/pdfname/issues/1), improved error message.+* [#5](https://github.com/asr/pdfname/issues/5) and+ [#6](https://github.com/asr/pdfname/issues/5): added Unicode+ substitutions.+* [#3](https://github.com/asr/pdfname/issues/3): an empty PDF file+ does not generate an exception.+* Added and fixed substitutions. +0.1.2+----- -0.1.1 (released 2017-07-07)----------------------------+[#1](https://github.com/asr/pdfname/issues/1): improved error message. +0.1.1+-----+ Fixed installation instructions (by Juan Pedro Villa-Isaza). -0.1 (released 2017-07-07)--------------------------+0.1+--- First release.
README.md view
@@ -4,9 +4,9 @@ Description ----------- -Name a PDF file using information (author, year of creation and title)-from the `pdfinfo` program.-+The `pdfname` command-line program names a PDF file using the author,+year of creation and title information extracted from the `pdfinfo`+program. Prerequisites --------------@@ -18,7 +18,6 @@ * [pdfinfo](http://linuxcommand.org/man_pages/pdfinfo1.html) Unix program - Installation ------------ @@ -77,3 +76,23 @@ attach the file. All that it is necessary is the *minimal* PDF metadata required for triggering the bug. There are various GUI, online and command-line tools for modifying the PDF metadata.++Known Errors+------------++If a PDF file or its metadata information is damaged `pdfname` (via+the [`pdfinfo`](http://hackage.haskell.org/package/pdfinfo) library)+generates an error. Known errors are the followings:++```+fd:5: hGetContents: invalid argument (invalid byte sequence)+```++```+Error: May not be a PDF file (continuing anyway)+Error: PDF file is damaged - attempting to reconstruct xref table...+Error: Couldn't find trailer dictionary+Error: Couldn't read xref table+```++If you get a different error message, please report it.
pdfname.cabal view
@@ -1,5 +1,5 @@ name: pdfname-version: 0.1.2+version: 0.1.3 license: MIT license-file: LICENSE author: Andrés Sicard-Ramírez with contributions by Juan Pedro Villa-Isaza.@@ -48,6 +48,9 @@ if impl(ghc >= 8.0) ghc-options: -Wall+ -- TODO (2017-07-14): I cannot use `cabal repl` if+ -- this flag is on.+ -- -Werror -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns
src/CreateFile.hs view
@@ -5,7 +5,7 @@ , generateFileName ) where -import Data.Char ( isAscii )+import Data.Char ( isAsciiLower, isDigit ) import Data.Maybe ( fromMaybe ) import Data.Text ( Text )@@ -29,6 +29,7 @@ import Substituions ( authorSubst , chSubst+ , commonSubst , titleSubst ) @@ -39,43 +40,48 @@ ) -------------------------------------------------------------------------------defaultValue ∷ Text-defaultValue = "xx"+defaultAuthor, defaultTitle, defaultYear ∷ Text+defaultAuthor = "no-author"+defaultTitle = "no-title"+defaultYear = "no-year" getAuthor ∷ Text → Text getAuthor xs = if T.null xs- then defaultValue+ then defaultYear else -- NB that the substituions are not commutative.- ( replace chSubst+ ( T.toLower+ . replace chSubst . T.intercalate (T.singleton '-')- . map (T.toLower . T.reverse . T.takeWhile (' ' /=) . T.reverse)+ . map (T.reverse . T.takeWhile (' ' /=) . T.reverse) . T.split (',' ==) . replace authorSubst+ . replace commonSubst ) xs getYear ∷ Text → Text-getYear xs = if T.null xs then defaultValue else T.take 4 xs+getYear xs = if T.null xs then defaultYear else T.take 4 xs getTitle ∷ Text → Text getTitle xs = if T.null xs- then defaultValue+ then defaultTitle else -- NB that the substituions are not commutative. ( T.toLower . replace chSubst . replace titleSubst+ . replace commonSubst ) xs generateFileName ∷ PDFInfo → IO FilePath generateFileName info = do let authorHelper ∷ Text- authorHelper = maybe defaultValue getAuthor $ pdfInfoAuthor info+ authorHelper = maybe defaultAuthor getAuthor $ pdfInfoAuthor info - author ← if validateName authorHelper+ author ← if isValidName authorHelper then return authorHelper else die $ "could not generate the author from " +++ "`"@@ -83,12 +89,12 @@ +++ "`" let year ∷ Text- year = maybe defaultValue (getYear . T.pack . show ) $ pdfInfoCreationDate info+ year = maybe defaultYear (getYear . T.pack . show ) $ pdfInfoCreationDate info let titleHelper ∷ Text- titleHelper = maybe defaultValue getTitle $ pdfInfoTitle info+ titleHelper = maybe defaultTitle getTitle $ pdfInfoTitle info - title ← if validateName titleHelper+ title ← if isValidName titleHelper then return titleHelper else die $ "could not generate the title from " +++ "`"@@ -107,10 +113,13 @@ return fileName --- TODO (2017-07-04): Is there Data.Text functions instead of--- Data.Char functions for implementing this function?-validateName ∷ Text → Bool-validateName t = all (== True) $ map isAscii $ T.unpack t+-- TODO (2017-07-11): Is there @Data.Text@ functions instead of+-- @Data.Char@ functions for implementing this function?+isValidChar ∷ Char → Bool+isValidChar c = isAsciiLower c || isDigit c || (c == '-')++isValidName ∷ Text → Bool+isValidName t = all (== True) $ map isValidChar $ T.unpack t createFile ∷ FilePath → FilePath → IO () createFile f newF =
src/Main.hs view
@@ -3,7 +3,7 @@ module Main where -import qualified Data.Text as T+import qualified Data.Text.IO as T import Options.Applicative ( execParser ) @@ -14,7 +14,10 @@ , stderr ) -import Text.PDF.Info ( pdfInfo )+import Text.PDF.Info+ ( pdfInfo+ , PDFInfoError(ProcessError, ProcessFailure)+ ) ------------------------------------------------------------------------------ -- Local imports@@ -32,12 +35,7 @@ , outputDir ) -import Utilities- ( (+++)- , die- , isPDF- , unlessM- )+import Utilities ( die ) ------------------------------------------------------------------------------ @@ -48,8 +46,6 @@ let file ∷ FilePath file = optInputFile opts - unlessM (isPDF file) $ die $ T.pack file +++ " is not a PDF file"- info ← pdfInfo file case info of Right i → do@@ -58,6 +54,9 @@ then putStrLn $ "The full path name will be " ++ outputDir </> newFile else createFile file newFile - Left err → do- hPrint stderr err- die "PDF file or its metadata information is damaged."+ Left pdfinfoErr → do+ case pdfinfoErr of+ ProcessFailure err → T.hPutStr stderr err+ ProcessError err → hPrint stderr err+ _ → T.hPutStr stderr "TODO: Missing error message"+ die "PDF file or its metadata information is damaged"
src/Substituions.hs view
@@ -3,6 +3,7 @@ module Substituions ( authorSubst , chSubst+ , commonSubst , titleSubst ) where @@ -34,7 +35,7 @@ , ("ó", "o") -- LATIN SMALL LETTER O WITH ACUTE , ("ö", "o") -- LATIN SMALL LETTER O WITH DIAERESIS (ö) , ("ú", "u") -- LATIN SMALL LETTER U WITH ACUTE- , ("Š", "S") -- LATIN CAPITAL LETTER S WITH CARON+ , ("Š", "S") -- LATIN CAPITAL LETTER S WITH CARON , ("š", "s") -- LATIN SMALL LETTER S WITH CARON , ("λ", "lambda") -- GREEK SMALL LETTER LAMDA , ("‘", "") -- LEFT SINGLE QUOTATION MARK@@ -94,9 +95,11 @@ , ("‘", "") -- LEFT SINGLE QUOTATION MARK , ("’", "") -- RIGHT SINGLE QUOTATION MARK , ("‚", "") -- SINGLE LOW-9 QUOTATION MAR+ , ("‛", "") -- SINGLE HIGH-REVERSED-9 QUOTATION MARK , ("“", "") -- LEFT DOUBLE QUOTATION MARK , ("”", "") -- RIGHT DOUBLE QUOTATION MARK , ("„", "") -- DOUBLE LOW-9 QUOTATION MARK+ , ("‟", "") -- DOUBLE HIGH-REVERSED-9 QUOTATION MARK , ("†", "dagger") -- DAGGER , ("‡", "dagger-dagger") -- DOUBLE DAGGER , ("•", "") -- BULLET@@ -109,12 +112,16 @@ -- | Characters substituions in Unicode notation. chUnicodeSubst ∷ [(Text,Text)] chUnicodeSubst =- [ ("\r", "") -- U+000D CARRIAGE RETURN (CR)+ [ ("\t", "") -- U+0009 CHARACTER TABULATION+ , ("\n", "") -- U+000A LINE FEED (LF)+ , ("\f", "") -- U+000C FORM FEED (FF)+ , ("\r", "") -- U+000D CARRIAGE RETURN (CR) , (" ", "-") -- U+0020 SPACE , ("!", "") -- U+0021 EXCLAMATION MARK , ("\"", "") -- U+0022 QUOTATION MARK , ("#", "") -- U+0023 NUMBER SIGN , ("$", "") -- U+0024 DOLLAR SIGN+ , ("%", "") -- U+0025 PERCENT SIGN , ("&", "") -- U+0026 AMPERSAND , ("'", "") -- U+0027 APOSTROPHE , ("(", "") -- U+0028 LEFT PARENTHESIS@@ -122,12 +129,10 @@ , ("*", "") -- U+002A ASTERISK , ("+", "") -- U+002B PLUS SIGN , (",", "") -- U+002C COMMA- , ("/", "-") -- U+002F SOLIDUS- , ("²", "2") -- U+00B2 SUPERSCRIPT TWO- , ("³", "3") -- U+00B3 SUPERSCRIPT THREE- , ("¹", "1") -- U+00B9 SUPERSCRIPT ONE- , (":", ".") -- U+003A COLON- , (";", ".") -- U+003B SEMICOLON+ , (".", "") -- U+002D FULL STOP+ , ("/", "") -- U+002F SOLIDUS+ , (":", "") -- U+003A COLON+ , (";", "") -- U+003B SEMICOLON , ("<", "") -- U+003C LESS-THAN SIGN , ("=", "") -- U+003D EQUALS SIGN , (">", "") -- U+003E GREATER-THAN SIGN@@ -136,48 +141,110 @@ , ("[", "") -- U+005B LEFT SQUARE BRACKET , ("\\", "") -- U+005C REVERSE SOLIDUS , ("]", "") -- U+005D RIGHT SQUARE BRACKET+ , ("^", "") -- U+005E CIRCUMFLEX ACCENT , ("_", "-") -- U+005F LOW LINE , ("`", "") -- U+0060 GRAVE ACCENT+ , ("{", "") -- U+007B LEFT CURLY BRACKET , ("|", "") -- U+007C VERTICAL LINE+ , ("}", "") -- U+007B RIGHT CURLY BRACKET+ , ("~", "") -- U+007E TILDE , ("¡", "") -- U+00A1 INVERTED EXCLAMATION MARK , ("¬", "") -- U+00AC NOT SIGN+ , ("²", "2") -- U+00B2 SUPERSCRIPT TWO+ , ("³", "3") -- U+00B3 SUPERSCRIPT THREE+ , ("¹", "1") -- U+00B9 SUPERSCRIPT ONE , ("À", "A") -- U+00C0 LATIN CAPITAL LETTER A WITH GRAVE , ("Á", "A") -- U+00C1 LATIN CAPITAL LETTER A WITH ACUTE+ , ("Â", "A") -- U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX , ("Ã", "A") -- U+00C3 LATIN CAPITAL LETTER A WITH TILDE- , ("Æ", "E") -- U+00C6 LATIN CAPITAL LETTER AE+ , ("Ä", "A") -- U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS+ , ("Å", "A") -- U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE+ , ("Æ", "AE") -- U+00C6 LATIN CAPITAL LETTER AE+ , ("Ç", "C") -- U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA+ , ("È", "E") -- U+00C8 LATIN CAPITAL LETTER E WITH GRAVE , ("É", "E") -- U+00C9 LATIN CAPITAL LETTER E WITH ACUTE+ , ("Ê", "E") -- U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX+ , ("Ë", "E") -- U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS , ("Í", "I") -- U+00CD LATIN CAPITAL LETTER I WITH ACUTE+ , ("Î", "I") -- U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX+ , ("Ï", "I") -- U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS , ("Ñ", "N") -- U+00D1 LATIN CAPITAL LETTER N WITH TILDE , ("Ó", "O") -- U+00D3 LATIN CAPITAL LETTER O WITH ACUTE+ , ("Ô", "O") -- U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX+ , ("Õ", "O") -- U+00D5 LATIN CAPITAL LETTER O WITH TILDE , ("Ú", "U") -- U+00DA LATIN CAPITAL LETTER U WITH ACUTE+ , ("Û", "U") -- U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX+ , ("Ü", "U") -- U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS , ("Ö", "O") -- U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS , ("×", "") -- U+00D7 MULTIPLICATION SIGN+ , ("Ø", "O") -- U+00D8 LATIN CAPITAL LETTER O WITH STROKE+ , ("Ù", "U") -- U+00D9 LATIN CAPITAL LETTER U WITH GRAVE+ , ("ß", "ss") -- U+00DF LATIN SMALL LETTER SHARP S , ("à", "a") -- U+00E0 LATIN SMALL LETTER A WITH GRAVE , ("á", "a") -- U+00E1 LATIN SMALL LETTER A WITH ACUTE , ("â", "a") -- U+00E2 LATIN SMALL LETTER A CIRCUMFLEX , ("ã", "a") -- U+00E3 LATIN SMALL LETTER A WITH TILDE , ("ä", "a") -- U+00E4 LATIN SMALL LETTER A WITH DIAERESIS- , ("æ", "e") -- U+00E6 LATIN SMALL LETTER AE+ , ("å", "a") -- U+00E5 LATIN SMALL LETTER A WITH RING ABOVE+ , ("æ", "ae") -- U+00E6 LATIN SMALL LETTER AE , ("ç", "c") -- U+00E7 LATIN SMALL LETTER C WITH CEDILLA+ , ("è", "e") -- U+00E8 LATIN SMALL LETTER E WITH GRAVE , ("é", "e") -- U+00E9 LATIN SMALL LETTER E WITH ACUTE+ , ("ê", "e") -- U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX+ , ("ë", "e") -- U+00EB LATIN SMALL LETTER E WITH DIAERESIS , ("í", "i") -- U+00ED LATIN SMALL LETTER I WITH ACUTE+ , ("î", "i") -- U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX+ , ("ï", "i") -- U+00EF LATIN SMALL LETTER I WITH DIAERESIS , ("ñ", "n") -- U+00F1 LATIN SMALL LETTER N WITH TILDE , ("ò", "o") -- U+00F2 LATIN SMALL LETTER O WITH GRAVE , ("ó", "o") -- U+00F3 LATIN SMALL LETTER O WITH ACUTE+ , ("ô", "o") -- U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX+ , ("õ", "o") -- U+00F5 LATIN SMALL LETTER O WITH TILDE , ("ö", "o") -- U+00F6 LATIN SMALL LETTER O WITH DIAERESIS , ("ø", "o") -- U+00F8 LATIN SMALL LETTER O WITH STROKE+ , ("ù", "u") -- U+00F9 LATIN SMALL LETTER U WITH GRAVE , ("ú", "u") -- U+00FA LATIN SMALL LETTER U WITH ACUTE+ , ("û", "u") -- U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX , ("ü", "u") -- U+00FC LATIN SMALL LETTER U WITH DIAERESIS , ("þ", "t") -- U+00FE LATIN SMALL LETTER THORN , ("ÿ", "y") -- U+00FF LATIN SMALL LETTER Y WITH DIAERESIS+ , ("Ă", "A") -- U+0102 LATIN CAPITAL LETTER A WITH BREVE+ , ("ă", "a") -- U+0103 LATIN SMALL LETTER A WITH+ , ("Ą", "A") -- U+0104 LATIN CAPITAL LETTER A WITH OGONEK+ , ("ą", "a") -- U+0105 LATIN SMALL LETTER A WITH OGONEK+ , ("Ć", "c") -- U+0106 LATIN CAPITAL LETTER C WITH ACUTE , ("ć", "c") -- U+0107 LATIN SMALL LETTER C WITH ACUTE , ("č", "c") -- U+010D LATIN SMALL LETTER C WITH CARON+ , ("Ę", "e") -- U+0118 LATIN CAPITAL LETTER E WITH OGONEK+ , ("ę", "e") -- U+0119 LATIN SMALL LETTER E WITH OGONEK , ("Ł", "L") -- U+0141 LATIN CAPITAL LETTER L WITH STROKE+ , ("ł", "l") -- U+0142 LATIN SMALL LETTER L WITH STROKE+ , ("Ń", "N") -- U+0143 LATIN CAPITAL LETTER N WITH ACUTE+ , ("ń", "n") -- U+0144 LATIN SMALL LETTER N WITH ACUTE , ("ņ", "n") -- U+0146 LATIN SMALL LETTER N WITH CEDILLA+ , ("Ő", "O") -- U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE+ , ("ő", "o") -- U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE+ , ("Œ", "OE") -- U+0152 LATIN CAPITAL LIGATURE OE+ , ("œ", "oe") -- U+0153 LATIN SMALL LIGATURE OE , ("ř", "r") -- U+0159 LATIN SMALL LETTER R WITH CARON+ , ("Ś", "S") -- U+015A LATIN CAPITAL LETTER S WITH ACUTE+ , ("ś", "s") -- U+015B LATIN SMALL LETTER S WITH ACUTE+ , ("Š", "S") -- U+0160 LATIN CAPITAL LETTER S WITH CARON , ("š", "s") -- U+0161 LATIN SMALL LETTER S WITH CARON , ("ū", "u") -- U+016B LATIN SMALL LETTER U WITH MACRON+ , ("Ű", "U") -- U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE+ , ("ű", "u") -- U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE , ("Ÿ", "Y") -- U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS+ , ("Ź", "Z") -- U+0179 LATIN CAPITAL LETTER Z WITH ACUTE+ , ("ź", "z") -- U+017A LATIN SMALL LETTER Z WITH ACUTE+ , ("Ż", "Z") -- U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE+ , ("ż", "z") -- U+017C LATIN SMALL LETTER Z WITH DOT ABOVE+ , ("Ž", "z") -- U+017D LATIN CAPITAL LETTER Z WITH CARON+ , ("ž", "z") -- U+017E LATIN SMALL LETTER Z WITH CARON+ , ("Ș", "S") -- U+0218 LATIN CAPITAL LETTER S WITH COMMA BELOW+ , ("ș", "s") -- U+0219 LATIN SMALL LETTER S WITH COMMA BELOW+ , ("Ț", "T") -- U+021A LATIN CAPITAL LETTER T WITH COMMA BELOW+ , ("ț", "t") -- U+021B LATIN SMALL LETTER T WITH COMMA BELOW , ("Ω", "Omega") -- U+03A9 GREEK CAPITAL LETTER OMEGA , ("α", "alpha") -- U+03B1 GREEK SMALL LETTER ALPHA , ("β", "beta") -- U+03B2 GREEK SMALL LETTER BETA@@ -204,12 +271,21 @@ , ("χ", "chi") -- U+03C7 GREEK SMALL LETTER CHI , ("ψ", "psi") -- U+03C8 GREEK SMALL LETTER PSI , ("ω", "omega") -- U+03C9 GREEK SMALL LETTER OMEGA+ , ("ẞ", "SS") -- U+1E9E LATIN CAPITAL LETTER SHARP S , ("–", "-") -- U+2013 EN DASH , ("—", "-") -- U+2014 EM DASH , ("‘", "") -- U+2018 LEFT SINGLE QUOTATION MARK , ("’", "") -- U+2019 RIGHT SINGLE QUOTATION MARK+ , ("‚", "") -- U+201A SINGLE LOW-9 QUOTATION MARK+ , ("‛", "") -- U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK+ , ("“", "") -- U+201C LEFT DOUBLE QUOTATION MARK+ , ("”", "") -- U+201D RIGHT DOUBLE QUOTATION MARK+ , ("„", "") -- U+201E DOUBLE LOW-9 QUOTATION MARK+ , ("‟", "") -- U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK , ("‡", "") -- U+2021 DOUBLE DAGGER , ("™", "") -- U+2122 TRADE MARK SIGN+ , ("ℵ", "aleph") -- U+2135 ALEF SYMBOL+ , ("ℶ", "beth") -- U+2136 BET SYMBOL , ("�", "") -- U+FFFD REPLACEMENT CHARACTER ] @@ -219,17 +295,26 @@ chSubst = chHexSubst ++ chNNSubst ++ chDecSubst ++ chUnicodeSubst ------------------------------------------------------------------------------+-- Author and title substituions++commonSubst ∷ [(Text, Text)]+commonSubst =+ [ ("á", "a") -- U+00C3 and U+00A1 (LATIN SMALL LETTER A WITH GRAVE)+ , ("é", "e") -- U+00C3 and U+00A9 (LATIN SMALL LETTER E WITH ACUTE)+ , ("Ã\x00AD", "i") -- U+00C3 and U+00AD (LATIN SMALL LETTER I GRAVE)+ -- We erase `ö` because it follows an `o` in the examples we know.+ , ("ö", "") -- U+00C3 and U+00B6 (LATIN SMALL LETTER O WITH DIAERESIS)+ , ("Å›", "s") -- U+00C5 and U+203A (LATIN CAPITAL LETTER S WITH ACUTE)+ ]++------------------------------------------------------------------------------ -- Author substituions authorSubst ∷ [(Text, Text)] authorSubst = [ (", ", ",") , (" and", ",")- -- See Issue #1.- , ("Ã\x00AD", "i") -- U+00C3 and U+00AD- -- See Issue #1.- , ("á", "a") -- U+00C3 and U+00A1- , ("Mcbride", "McBride")+ ] ------------------------------------------------------------------------------@@ -258,7 +343,6 @@ , ("<TEX>$\\gamma$</TEX>", "gamma") , ("<TEX>$\\epsilon$</TEX>", "epsilon") , ("<TEX>$\\eta$</TEX>", "eta")- -- See Issue #2. , ("<TEX>$\\lambda$</TEX>", "lambda") , ("<TEX>$\\pi$</TEX>", "pi") , ("<TEX>$\\omega$</TEX>", "omega")@@ -267,6 +351,4 @@ , ("<TEX>{\\sc QuickSpec}</TEX>:", "QuickSpec") , ("<TEX>{\\sc QuodLibet}</TEX>!", "QuodLibet") , ("<TEX>{\\sc Vampire}</TEX>", "Vampire")- , ("Å›", "s") -- U+00C5 and U+203A- , ("ö", "") -- U+00C3 and U+00B6 ]
src/Utilities.hs view
@@ -4,7 +4,6 @@ ( (+++) , die , ifM- , isPDF , progNameVersion , replace , unless_@@ -20,19 +19,13 @@ import Data.Version ( showVersion ) -import Control.Monad ( replicateM, unless, void )+import Control.Monad ( unless, void ) import Paths_pdfname ( version ) import System.Environment ( getProgName ) import System.Exit ( exitFailure )--import System.IO- ( IOMode(ReadMode)- , hGetChar- , stderr- , withBinaryFile- )+import System.IO ( stderr ) ------------------------------------------------------------------------------ -- Utilities from the Agda library@@ -76,10 +69,3 @@ -- TODO (2017-07-06): To use `getProgName`. progNameVersion ∷ String progNameVersion = "pdfname" ++ " version " ++ showVersion version--isPDF ∷ FilePath → IO Bool-isPDF f =- ifM ((==) "%PDF" <$> withBinaryFile f ReadMode (replicateM 4 . hGetChar))- (return True)- (return False)-