pdfname 0.2 → 0.3
raw patch · 4 files changed
+293/−154 lines, 4 files
Files
- CHANGELOG.md +5/−0
- pdfname.cabal +2/−2
- src/CreateFile.hs +5/−8
- src/Substitutions.hs +281/−144
CHANGELOG.md view
@@ -1,6 +1,11 @@ Changelog for pdfname ===================== +0.3+---++Added Unicode and HTML escaped text substitutions.+ 0.2 ---
pdfname.cabal view
@@ -1,5 +1,5 @@ name: pdfname-version: 0.2+version: 0.3 license: MIT license-file: LICENSE author: Andrés Sicard-Ramírez with contributions by Juan Pedro Villa-Isaza.@@ -15,7 +15,7 @@ The @pdfname@ command-line program names a PDF file using the author, year of creation and title information extracted from the @pdfinfo@ program.-tested-with: GHC == 8.0.2+tested-with: GHC == 8.2.1 extra-source-files: CHANGELOG.md README.md
src/CreateFile.hs view
@@ -28,10 +28,9 @@ import Substitutions ( authorSubst- , titleSubst+ , removeFromTitle , replace- , replaceHTMLEntities- , replaceHTMLSymbols+ , replaceHTMLEscapedText , unicodeSubst , weirdSubst )@@ -55,8 +54,7 @@ . T.intercalate (T.singleton '-') . map (T.reverse . T.takeWhile (' ' /=) . T.reverse) . T.split (',' ==)- . replaceHTMLSymbols- . replaceHTMLEntities+ . replaceHTMLEscapedText . replace authorSubst . replace weirdSubst ) xs@@ -72,9 +70,8 @@ -- NB that the substitutions are not commutative. ( T.toLower . replace unicodeSubst- . replaceHTMLSymbols- . replaceHTMLEntities- . replace titleSubst+ . replaceHTMLEscapedText+ . removeFromTitle . replace weirdSubst ) xs
src/Substitutions.hs view
@@ -2,46 +2,49 @@ module Substitutions ( authorSubst- , titleSubst+ , removeFromTitle , replace- , replaceHTMLEntities- , replaceHTMLSymbols+ , replaceHTMLEscapedText , unicodeSubst , weirdSubst ) where +import Data.Char ( ord )+ import Data.Text ( Text ) import qualified Data.Text as T +import Text.Printf ( printf )+ --------------------------------------------------------------------------------- Replacements+-- Replacements and pre-processing -type HTMLEntityName = Text-type HTMLEntityDec = Text-type HTMLEntityHex = Text-type HTMLSymbolDec = Text-type HTMLSymbolHex = Text+-- | Remove text from the title.+removeFromTitle ∷ Text → Text+removeFromTitle = replace $ map (\ a → (a, T.empty)) titleErase -replaceHTMLEntities ∷ Text → Text-replaceHTMLEntities = replace nameSubst . replace decSubst . replace hexSubst+-- These substitutions should be done before the Unicode+-- substitutions.+replaceHTMLEscapedText ∷ Text → Text+replaceHTMLEscapedText = replace $ htmlNameSubst ++ numericSubst where- nameSubst ∷ [(HTMLEntityName, Text)]- nameSubst = map (\ (a, _, _, d) → (a, d)) htmlEntitySubst+ htmlDecSubst ∷ [(Text, Text)]+ htmlDecSubst = substHelper "&#%d;" - decSubst ∷ [(HTMLEntityDec, Text)]- decSubst = map (\ (_, b, _, d) → (b, d)) htmlEntitySubst+ html4HexSubst ∷ [(Text, Text)]+ html4HexSubst = substHelper "&#x%04X;" - hexSubst ∷ [(HTMLEntityHex, Text)]- hexSubst = map (\ (_, _, c, d) → (c, d)) htmlEntitySubst+ html5HexSubst ∷ [(Text, Text)]+ html5HexSubst = substHelper "&#x%05X;" -replaceHTMLSymbols ∷ Text → Text-replaceHTMLSymbols = replace decSubst . replace hexSubst- where- decSubst ∷ [(HTMLSymbolDec, Text)]- decSubst = map (\ (a, _, c) → (a, c)) htmlSymbolSubst+ numericSubst ∷ [(Text, Text)]+ numericSubst = htmlDecSubst ++ html4HexSubst ++ html5HexSubst - hexSubst ∷ [(HTMLSymbolHex, Text)]- hexSubst = map (\ (_, b, c) → (b, c)) htmlSymbolSubst+ substHelper ∷ String → [(Text, Text)]+ substHelper format = map (\ (_, b) → (printfHelper format b, b)) htmlNameSubst+ where+ printfHelper ∷ String → Text → Text+ printfHelper pFormat t = T.pack $ printf pFormat (ord $ T.head t) replace ∷ [(Text,Text)] → Text → Text replace xs ys = foldl (flip (uncurry T.replace)) ys xs@@ -49,87 +52,183 @@ ------------------------------------------------------------------------------ -- HTML entities and symbols substitutions --- Used by example for the Journal of Functional Programmning.+noName ∷ Text+noName = "N/A" --- | Substitutions of HTML entities.-htmlEntitySubst ∷ [(HTMLEntityName, HTMLEntityDec, HTMLEntityHex, Text)]-htmlEntitySubst =- [ ("Â", "Â", "Â", "A") -- LATIN CAPITAL LETTER A WITH CIRCUMFLEX- , ("Ä", "Ä", "Ä", "A") -- LATIN CAPITAL LETTER A WITH DIAERESIS- , ("Ç", "Ç", "Ç", "C") -- LATIN CAPITAL LETTER C WITH CEDILLA- , ("Ë", "Ë", "Ë", "E") -- LATIN CAPITAL LETTER E WITH DIAERESIS- , ("Ï", "Ï", "Ï", "I") -- LATIN CAPITAL LETTER I WITH DIAERESIS- , ("Ö", "Ö", "Ö", "O") -- LATIN CAPITAL LETTER U WITH DIAERESIS- , ("Ø", "Ø", "Ø", "O") -- LATIN CAPITAL LETTER O WITH STROKE- , ("Ü", "Ü", "Ü", "U") -- LATIN CAPITAL LETTER U WITH DIAERESIS- , ("á", "á", "á", "a") -- LATIN SMALL LETTER A WITH ACUTE- , ("â", "â", "â", "a") -- LATIN SMALL LETTER A WITH CIRCUMFLEX- , ("ä", "ä", "ä", "a") -- LATIN SMALL LETTER A WITH DIAERESIS- , ("ç", "ç", "ç", "c") -- LATIN SMALL LETTER C WITH CEDILLA- , ("é", "é", "é", "e") -- LATIN SMALL LETTER E WITH ACUTE- , ("ë", "ë", "ë", "e") -- LATIN SMALL LETTER E WITH DIAERESIS- , ("í", "í", "í", "i") -- LATIN SMALL LETTER I WITH ACUTE- , ("ï", "ï", "ï", "i") -- LATIN SMALL LETTER I WITH DIAERESIS- , ("ó", "ó", "ó", "o") -- LATIN SMALL LETTER O WITH ACUTE- , ("ö", "ö", "ö", "o") -- LATIN SMALL LETTER O WITH DIAERESIS- , ("ø", "ø", "ø", "o") -- LATIN SMALL LETTER O WITH STROKE- , ("ú", "ú", "ú", "u") -- LATIN SMALL LETTER U WITH ACUTE- , ("ü", "ü", "ü", "u") -- LATIN SMALL LETTER U WITH DIAERESIS- , ("Ī", "Ī", "Ī", "I") -- LATIN CAPITAL LETTER I WITH MACRON- , ("ī", "ī", "ī", "I") -- LATIN SMALL LETTER I WITH MACRON- , ("Ś", "Ś", "Ś", "S") -- LATIN CAPITAL LETTER S WITH ACUTE- , ("ś", "ś", "ś", "s") -- LATIN SMALL LETTER S WITH ACUTE- , ("Ş", "Ş", "Ş", "s") -- LATIN CAPITAL LETTER S WITH CEDILLA- , ("ş", "ş", "ş", "s") -- LATIN SMALL LETTER S WITH CEDILLA- , ("Š", "Š", "Š", "S") -- LATIN CAPITAL LETTER S WITH CARON- , ("š", "š", "š", "s") -- LATIN SMALL LETTER S WITH CARON- , ("α", "α", "α", "alpha") -- GREEK SMALL LETTER ALPHA- , ("β", "β", "β", "beta") -- GREEK SMALL LETTER BETA- , ("γ", "γ", "γ", "gamma") -- GREEK SMALL LETTER GAMMA- , ("δ", "δ", "δ", "delta") -- GREEK SMALL LETTER DELTA- , ("ε", "ε", "ε", "epsilon") -- GREEK SMALL LETTER EPSILON- , ("ζ", "ζ", "ζ", "zeta") -- GREEK SMALL LETTER ZETA- , ("η", "η", "η", "eta") -- GREEK SMALL LETTER ETA- , ("θ", "θ", "θ", "theta") -- GREEK SMALL LETTER THETA- , ("ι", "ι", "ι", "iota") -- GREEK SMALL LETTER IOTA- , ("κ", "κ", "κ", "kappa") -- GREEK SMALL LETTER KAPPA- , ("λ", "λ", "λ", "lambda") -- GREEK SMALL LETTER LAMDA- , ("μ", "μ", "μ", "mu") -- GREEK SMALL LETTER MU- , ("ν", "ν", "ν", "nu") -- GREEK SMALL LETTER NU- , ("ξ", "ξ", "ξ", "xi") -- GREEK SMALL LETTER ZI- , ("ο", "ο", "ο", "omicron") -- GREEK SMALL LETTER OMICRON- , ("π", "π", "π", "pi") -- GREEK SMALL LETTER PI- , ("ρ", "ρ", "ρ", "rho") -- GREEK SMALL LETTER RHO- , ("ς", "ς", "ς", "sigma") -- GREEK SMALL LETTER FINAL SIGMA- , ("σ", "σ", "σ", "sigma") -- GREEK SMALL LETTER SIGMA- , ("τ", "τ", "τ", "tau") -- GREEK SMALL LETTER TAU- , ("υ", "υ", "υ", "upsilon") -- GREEK SMALL LETTER UPSILON- , ("φ", "φ", "φ", "phi") -- GREEK SMALL LETTER PHI- , ("χ", "χ", "χ", "chi") -- GREEK SMALL LETTER CHI- , ("ψ", "ψ", "ψ", "psi") -- GREEK SMALL LETTER PSI- , ("ω", "ω", "ω", "omega") -- GREEK SMALL LETTER OMEGA- , ("–", "–", "–", "-") -- EN DASH- , ("—", "—", "—", ".") -- EM DAS- , ("‘", "‘", "‘", "") -- LEFT SINGLE QUOTATION MARK- , ("’", "’", "’", "") -- RIGHT SINGLE QUOTATION MARK- , ("‚", "‚", "‚", "") -- SINGLE LOW-9 QUOTATION MAR- , ("“", "“", "“", "") -- LEFT DOUBLE QUOTATION MARK- , ("”", "”", "”", "") -- RIGHT DOUBLE QUOTATION MARK- , ("„", "„", "„", "") -- DOUBLE LOW-9 QUOTATION MARK- , ("†", "†", "†", "dagger") -- DAGGER- , ("‡", "‡", "‡", "dagger-dagger") -- DOUBLE DAGGER- , ("•", "•", "•", "") -- BULLET- , ("…", "…", "…", "") -- HORIZONTAL ELLIPSIS- , ("⊃", "₃", "⊃", "") -- SUPERSET OF- ]+-- | Substitutions of HTML-escaped text (entities and symbols). --- | Substitutions of HTML symbols.-htmlSymbolSubst ∷ [(HTMLSymbolDec, HTMLSymbolHex, Text)]-htmlSymbolSubst =- [ ("‐", "‐", "-") -- HYPHEN- , ("‛", "‛", "") -- SINGLE HIGH-REVERSED-9 QUOTATION MARK- , ("‟", "‟", "") -- DOUBLE HIGH-REVERSED-9 QUOTATION MARK- , ("⌝", "⌝", "") -- TOP RIGHT CORNER+-- We use @noName@ when the HTML symbol has not an entity name.+htmlNameSubst ∷ [(Text, Text)]+htmlNameSubst =+ [ (noName, "!") -- U+0021 EXCLAMATION MARK+ , (""", "\"") -- U+0022 QUOTATION MARK+ , (noName, "#") -- U+0023 NUMBER SIGN+ , (noName, "$") -- U+0024 DOLLAR SIGN+ , (noName, "%") -- U+0025 PERCENT SIGN+ , ("&", "&") -- U+0026 AMPERSAND+ , (noName, "'") -- U+0027 APOSTROPHE+ , (noName, "(") -- U+0028 LEFT PARENTHESIS+ , (noName, ")") -- U+0029 RIGHT PARENTHESIS+ , (noName, "*") -- U+002A ASTERISK+ , (noName, "+") -- U+002B PLUS SIGN+ , (noName, ",") -- U+002C COMMA+ -- We do not substitute U+002D HYPHEN-MINUS+ , (noName, ".") -- U+002E FULL STOP+ , (noName, "/") -- U+002F SOLIDUS+ , (noName, ":") -- U+003A COLON+ , (noName, ";") -- U+003B SEMICOLON+ , ("<", "<") -- U+003C LESS-THAN SIGN+ , (noName, "=") -- U+003D EQUALS SIGN+ , (">", ">") -- U+003E GREATER-THAN SIGN+ , (noName, "?") -- U+003F QUESTION MARK+ , (noName, "@") -- U+0040 COMMERCIAL AT+ , ("²", "²") -- U+00B2 SUPERSCRIPT TWO+ , ("³", "³") -- U+00B3 SUPERSCRIPT THREE+ , ("¹", "¹") -- U+00B9 SUPERSCRIPT ONE+ , ("À", "À") -- U+00C0+ , ("Á", "Á") -- U+00C1+ , ("Â", "Â") -- U+00C2+ , ("Ã", "Ã") -- U+00C3+ , ("Ä", "Ä") -- U+00C4+ , ("Å", "Å") -- U+00C5+ , ("Æ", "Æ") -- U+00C6+ , ("Ç", "Ç") -- U+00C7+ , ("È", "È") -- U+00C8+ , ("É", "É") -- U+00C9+ , ("Ê", "Ê") -- U+00CA+ , ("Ë", "Ë") -- U+00CB+ , ("Ì", "Ì") -- U+00CC+ , ("Í", "Í") -- U+00CD+ , ("Î", "Î") -- U+00CE+ , ("Ï", "Ï") -- U+00CF+ , ("Ð", "Ð") -- U+00D0+ , ("Ñ", "Ñ") -- U+00D1+ , ("Ò", "Ò") -- U+00D2+ , ("Ó", "Ó") -- U+00D3+ , ("Ô", "Ô") -- U+00D4+ , ("Õ", "Õ") -- U+00D5+ , ("Ö", "Ö") -- U+00D6+ , ("×", "×") -- U+00D7+ , ("Ø", "Ø") -- U+00D8+ , ("Ù", "Ù") -- U+00D9+ , ("Ú", "Ú") -- U+00DA+ , ("Û", "Û") -- U+00DB+ , ("Ü", "Ü") -- U+00DC+ , ("Ý", "Ý") -- U+00DD+ , ("Þ", "Þ") -- U+00DE+ , ("ß", "ß") -- U+00DF+ , ("à", "à") -- U+00E0+ , ("á", "á") -- U+00E1+ , ("â", "â") -- U+00E2+ , ("ã", "ã") -- U+00E3+ , ("ä", "ä") -- U+00E4+ , ("å", "å") -- U+00E5+ , ("æ", "æ") -- U+00E6+ , ("ç", "ç") -- U+00E7+ , ("è", "è") -- U+00E8+ , ("é", "é") -- U+00E9+ , ("ê", "ê") -- U+00EA+ , ("ë", "ë") -- U+00EB+ , ("ì", "ì") -- U+00EC+ , ("í", "í") -- U+00ED+ , ("î", "î") -- U+00EE+ , ("ï", "ï") -- U+00EF+ , ("ð", "ð") -- U+00F0+ , ("ñ", "ñ") -- U+00F1+ , ("ò", "ò") -- U+00F2+ , ("ó", "ó") -- U+00F3+ , ("ô", "ô") -- U+00F4+ , ("õ", "õ") -- U+00F5+ , ("ö", "ö") -- U+00F6+ , ("÷", "÷") -- U+00F7+ , ("ø", "ø") -- U+00F8+ , ("ù", "ù") -- U+00F9+ , ("ú", "ú") -- U+00FA+ , ("û", "û") -- U+00FB+ , ("ü", "ü") -- U+00FC+ , ("ý", "ý") -- U+00FD+ , ("þ", "þ") -- U+00FE+ , ("ÿ", "ÿ") -- U+00FF+ , (noName, "ĕ") -- U+0115+ , ("Ī", "Ī") -- U+012A+ , ("ī", "ī") -- U+012B+ , (noName, "ĭ") -- U+012D+ , ("Ś", "Ś") -- U+015A+ , ("ś", "ś") -- U+015B+ , ("Ş", "Ş") -- U+015E+ , ("ş", "ş") -- U+015F+ , ("Š", "Š") -- U+0160+ , ("š", "š") -- U+0161+ , ("ŭ", "ŭ") -- U+016D+ , ("Α", "Α") -- U+0391+ , ("Β", "Β") -- U+0392+ , ("Γ", "Γ") -- U+0393+ , ("Δ", "Δ") -- U+0394+ , ("Ε", "Ε") -- U+0395+ , ("Ζ", "Ζ") -- U+0396+ , ("Η", "Η") -- U+0397+ , ("Θ", "θ") -- U+0398+ , ("Ι", "Ι") -- U+0399+ , ("Κ", "Κ") -- U+03AA+ , ("Λ", "Λ") -- U+03AB+ , ("Μ", "Μ") -- U+03AC+ , ("Ν", "Ν") -- U+03AD+ , ("Ξ", "Ξ") -- U+03AE+ , ("Ο", "Ο") -- U+03AF+ , ("Π", "Π") -- U+03A0+ , ("Ρ", "Ρ") -- U+03A1+ -- The code U+03A2 is reserved.+ , ("Σ", "Σ") -- U+03A3+ , ("Τ", "Τ") -- U+03A4+ , ("Υ", "Υ") -- U+03A5+ , ("Φ", "Φ") -- U+03A6+ , ("Χ", "Χ") -- U+03A7+ , ("Ψ", "Ψ") -- U+03A8+ , ("Ω", "Ω") -- U+03A9+ , ("α", "α") -- U+03B1+ , ("β", "β") -- U+03B2+ , ("γ", "γ") -- U+03B3+ , ("δ", "δ") -- U+03B4+ , ("ε", "ε") -- U+03B5+ , ("ζ", "ζ") -- U+03B6+ , ("η", "η") -- U+03B7+ , ("θ", "θ") -- U+03B8+ , ("ι", "ι") -- U+03B9+ , ("κ", "κ") -- U+03BA+ , ("λ", "λ") -- U+03BB+ , ("μ", "μ") -- U+03BC+ , ("ν", "ν") -- U+03BD+ , ("ξ", "ξ") -- U+03BE+ , ("ο", "ο") -- U+03BF+ , ("π", "π") -- U+03C0+ , ("ρ", "ρ") -- U+03C1+ , ("ς", "ς") -- U+03C2+ , ("σ", "σ") -- U+03C3+ , ("τ", "τ") -- U+03C4+ , ("υ", "υ") -- U+03C5+ , ("φ", "φ") -- U+03C6+ , ("χ", "χ") -- U+03C7+ , ("ψ", "ψ") -- U+03C8+ , ("ω", "ω") -- U+03C9+ , (noName, "‐") -- U+2010+ , ("–", "–") -- U+2013+ , ("—", "—") -- U+2014+ , ("‘", "‘") -- U+2018+ , ("’", "’") -- U+2019+ , ("‚", "‚") -- U+201A+ , (noName, "‛") -- U+201B+ , ("“", "“") -- U+201C+ , ("”", "”") -- U+201D+ , ("„", "„") -- U+201E+ , (noName, "‟") -- U+201F+ , ("†", "†") -- U+2020+ , ("‡", "‡") -- U+2021+ , ("•", "•") -- U+2022+ , ("…", "…") -- U+2026+ , ("∀", "∀") -- U+2200+ , ("∃", "∃") -- U+2203+ , ("⊃", "⊃") -- U+2283+ , (noName, "⌝") -- U+231D ] ------------------------------------------------------------------------------@@ -155,7 +254,8 @@ , ("*", "") -- U+002A ASTERISK , ("+", "") -- U+002B PLUS SIGN , (",", "") -- U+002C COMMA- , (".", "") -- U+002D FULL STOP+ -- We do not substitute U+002D HYPHEN-MINUS+ , (".", "") -- U+002E FULL STOP , ("/", "") -- U+002F SOLIDUS , (":", "") -- U+003A COLON , (";", "") -- U+003B SEMICOLON@@ -191,10 +291,13 @@ , ("É", "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+00CC LATIN CAPITAL LETTER I WITH GRAVE , ("Í", "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+ , ("Ð", "ETH") -- U+00D0 LATIN CAPITAL LETTER ETH , ("Ñ", "N") -- U+00D1 LATIN CAPITAL LETTER N WITH TILDE+ , ("Ò", "O") -- U+00D2 LATIN CAPITAL LETTER O WITH GRAVE , ("Ó", "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@@ -206,6 +309,7 @@ , ("Û", "U") -- U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX , ("Ü", "U") -- U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS , ("Ý", "Y") -- U+00DD LATIN CAPITAL LETTER Y WITH ACUTE+ , ("Þ", "THORN") -- U+00DE LATIN CAPITAL LETTER THORN , ("ß", "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@@ -219,22 +323,25 @@ , ("é", "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+00EC LATIN SMALL LETTER I WITH GRAVE , ("í", "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+ , ("ð", "eth") -- U+00F0 LATIN SMALL LETTER ETH , ("ñ", "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+ , ("÷", "") -- U+00F7 DIVISION SIGN , ("ø", "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 , ("ý", "y") -- U+00FD LATIN SMALL LETTER Y WITH ACUTE- , ("þ", "t") -- U+00FE LATIN SMALL LETTER THORN+ , ("þ", "thorn") -- U+00FE LATIN SMALL LETTER THORN , ("ÿ", "y") -- U+00FF LATIN SMALL LETTER Y WITH DIAERESIS , ("Ā", "A") -- U+0100 LATIN CAPITAL LETTER A WITH MACRON , ("ā", "a") -- U+0101 LATIN SMALL LETTER A WITH MACRON@@ -250,6 +357,7 @@ , ("ď", "d") -- U+010F LATIN SMALL LETTER D WITH CARON , ("Ē", "E") -- U+0112 LATIN CAPITAL LETTER E WITH MACRON , ("ē", "e") -- U+0113 LATIN SMALL LETTER E WITH MACRON+ , ("ĕ", "e") -- U+0115 LATIN SMALL LETTER E WITH BREVE , ("Ę", "e") -- U+0118 LATIN CAPITAL LETTER E WITH OGONEK , ("ę", "e") -- U+0119 LATIN SMALL LETTER E WITH OGONEK , ("Ě", "E") -- U+011A LATIN CAPITAL LETTER E WITH CARON@@ -260,6 +368,7 @@ , ("ģ", "g") -- U+0123 LATIN SMALL LETTER G WITH CEDILLA , ("Ī", "I") -- U+012A LATIN CAPITAL LETTER I WITH MACRON , ("ī", "I") -- U+012B LATIN SMALL LETTER I WITH MACRON+ , ("ĭ", "i") -- U+012D LATIN SMALL LETTER I WITH BREVE , ("İ", "I") -- U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE , ("Ķ", "K") -- U+0136 LATIN CAPITAL LETTER K WITH CEDILLA , ("ķ", "k") -- U+0137 LATIN SMALL LETTER K WITH CEDILLA@@ -288,6 +397,7 @@ , ("Ť", "T") -- U+0164 LATIN CAPITAL LETTER T WITH CARON , ("ť", "t") -- U+0165 LATIN SMALL LETTER T WITH CARON , ("Ū", "U") -- U+016A LATIN CAPITAL LETTER U WITH MACRON+ , ("ŭ", "u") -- U+016D LATIN SMALL LETTER U WITH BREVE , ("ū", "u") -- U+016B LATIN SMALL LETTER U WITH MACRON , ("Ů", "U") -- U+016E LATIN CAPITAL LETTER U WITH RING ABOVE , ("ů", "u") -- U+016F LATIN SMALL LETTER U WITH RING ABOVE@@ -306,6 +416,30 @@ , ("Ț", "T") -- U+021A LATIN CAPITAL LETTER T WITH COMMA BELOW , ("ț", "t") -- U+021B LATIN SMALL LETTER T WITH COMMA BELOW , ("ə", "a") -- U+0259 LATIN SMALL LETTER SCHWA+ , ("Α", "Alpha") -- U+0391 GREEK CAPITAL LETTER ALPHA+ , ("Β", "Beta") -- U+0392 GREEK CAPITAL LETTER BETA+ , ("Γ", "Gamma") -- U+0393 GREEK CAPITAL LETTER GAMMA+ , ("Δ", "Delta") -- U+0394 GREEK CAPITAL LETTER DELTA+ , ("Ε", "Epsilon") -- U+0395 GREEK CAPITAL LETTER EPSILON+ , ("Ζ", "Zeta") -- U+0396 GREEK CAPITAL LETTER ZETA+ , ("Η", "Eta") -- U+0397 GREEK CAPITAL LETTER ETA+ , ("Θ", "Theta") -- U+0398 GREEK CAPITAL LETTER THETA+ , ("Ι", "Iota") -- U+0399 GREEK CAPITAL LETTER IOTA+ , ("Κ", "Kappa") -- U+039A GREEK CAPITAL LETTER KAPPA+ , ("Λ", "Lambda") -- U+039B GREEK CAPITAL LETTER LAMDA+ , ("Μ", "Mu") -- U+039C GREEK CAPITAL LETTER MU+ , ("Ν", "Nu") -- U+039D GREEK CAPITAL LETTER NU+ , ("Ξ", "Xi") -- U+039E GREEK CAPITAL LETTER ZI+ , ("Ο", "Omicron") -- U+039F GREEK CAPITAL LETTER OMICRON+ , ("Π", "Pi") -- U+03A0 GREEK CAPITAL LETTER PI+ , ("Ρ", "Rho") -- U+03A1 GREEK CAPITAL LETTER RHO+ -- The code U+03A2 is reserved.+ , ("Σ", "Sigma") -- U+03A3 GREEK CAPITAL LETTER SIGMA+ , ("Τ", "Tau") -- U+03A4 GREEK CAPITAL LETTER TAU+ , ("Υ", "Upsilon") -- U+03A5 GREEK CAPITAL LETTER UPSILON+ , ("Φ", "Phi") -- U+03A6 GREEK CAPITAL LETTER PHI+ , ("χ", "Chi") -- U+03A7 GREEK CAPITAL LETTER CHI+ , ("Ψ", "Psi") -- U+03A8 GREEK CAPITAL LETTER PSI , ("Ω", "Omega") -- U+03A9 GREEK CAPITAL LETTER OMEGA , ("α", "alpha") -- U+03B1 GREEK SMALL LETTER ALPHA , ("β", "beta") -- U+03B2 GREEK SMALL LETTER BETA@@ -333,7 +467,8 @@ , ("ψ", "psi") -- U+03C8 GREEK SMALL LETTER PSI , ("ω", "omega") -- U+03C9 GREEK SMALL LETTER OMEGA , ("ẞ", "SS") -- U+1E9E LATIN CAPITAL LETTER SHARP S- , ("‐", "-") -- U+2210 HYPHEN+ , (" ", "-") -- U+2009 THIN SPACE+ , ("‐", "-") -- U+2010 HYPHEN , ("–", "-") -- U+2013 EN DASH , ("—", "-") -- U+2014 EM DASH , ("‘", "") -- U+2018 LEFT SINGLE QUOTATION MARK@@ -348,9 +483,30 @@ , ("‡", "") -- U+2021 DOUBLE DAGGER , ("•", "") -- U+2022 BULLET , ("…", "") -- U+2026 HORIZONTAL ELLIPSIS+ , ("⁰", "0") -- U+2070 SUPERSCRIPT ZERO+ , ("ⁱ", "i") -- U+2071 SUPERSCRIPT LATIN SMALL LETTER I+ -- The codes U+2072 and U+2073 are reserved.+ , ("⁴", "4") -- U+2074 SUPERSCRIPT FOUR+ , ("⁵", "5") -- U+2075 SUPERSCRIPT FIVE+ , ("⁶", "6") -- U+2076 SUPERSCRIPT SIX+ , ("⁷", "7") -- U+2077 SUPERSCRIPT SEVEN+ , ("⁸", "8") -- U+2078 SUPERSCRIPT EIGHT+ , ("⁹", "9") -- U+2079 SUPERSCRIPT NINE+ , ("₀", "0") -- U+2080 SUBSCRIPT ZERO+ , ("₁", "1") -- U+2081 SUBSCRIPT ONE+ , ("₂", "2") -- U+2082 SUBSCRIPT TWO+ , ("₃", "3") -- U+2083 SUBSCRIPT THREE+ , ("₄", "4") -- U+2074 SUBSCRIPT FOUR+ , ("₅", "5") -- U+2075 SUBSCRIPT FIVE+ , ("₆", "6") -- U+2076 SUBSCRIPT SIX+ , ("₇", "7") -- U+2077 SUBSCRIPT SEVEN+ , ("₈", "8") -- U+2078 SUBSCRIPT EIGHT+ , ("₉", "9") -- U+2079 SUBSCRIPT NINE , ("™", "") -- U+2122 TRADE MARK SIGN , ("ℵ", "aleph") -- U+2135 ALEF SYMBOL , ("ℶ", "beth") -- U+2136 BET SYMBOL+ , ("∀", "for-all") -- U+2200 FOR ALL+ , ("∃", "exists") -- U+2203 THERE EXISTS , ("⊃", "") -- U+2283 SUPERSET OF , ("⌝", "") -- U+231D TOP RIGHT CORNER , ("�", "") -- U+FFFD REPLACEMENT CHARACTER@@ -366,42 +522,6 @@ , (" and", ",") ] --- | Title substitutions.---- These substitutions should be done before the substitutions of the--- HTML entities and converting to lower case.-titleSubst ∷ [(Text,Text)]-titleSubst =- [ ("<Emphasis Type=\"BoldItalic\">P </Emphasis>", "P")- , ("<Emphasis Type=\"Italic\">0 </Emphasis>", "0")- , ("<Emphasis Type=\"Italic\">C</Emphasis>", "C")- , ("<Emphasis Type=\"Italic\">CC</Emphasis>", "CC")- , ("<Emphasis Type=\"Italic\">I </Emphasis>", "I")- , ("<Emphasis Type=\"Italic\">J</Emphasis>", "J")- , ("<Emphasis Type=\"Italic\">Modus ponens</Emphasis>", "Modus ponens")- , ("<Emphasis Type=\"Italic\">P </Emphasis>", "P")- , ("<Emphasis Type=\"Italic\">really </Emphasis>", "really")- , ("<Emphasis Type=\"Italic\">S-P</Emphasis>", "S-P")- , ("<Subscript>3</Subscript>", "3")- -- The whitespace around `+` is not the standard one.- -- TODO (2017-07-04): Added test case.- , ("<Superscript> + </Superscript>", "plus")- , ("<Subscript>ω</Subscript>", "omega")- , ("<TEX>$\\alpha$</TEX>", "alpha")- , ("<TEX>$\\beta$</TEX>", "beta")- , ("<TEX>$\\gamma$</TEX>", "gamma")- , ("<TEX>$\\epsilon$</TEX>", "epsilon")- , ("<TEX>$\\eta$</TEX>", "eta")- , ("<TEX>$\\lambda$</TEX>", "lambda")- , ("<TEX>$\\pi$</TEX>", "pi")- , ("<TEX>$\\omega$</TEX>", "omega")- , ("<TEX>{\\sc Coq}</TEX>", "Coq")- , ("<TEX>{\\sf Haskell}</TEX>:", "Haskell")- , ("<TEX>{\\sc QuickSpec}</TEX>:", "QuickSpec")- , ("<TEX>{\\sc QuodLibet}</TEX>!", "QuodLibet")- , ("<TEX>{\\sc Vampire}</TEX>", "Vampire")- ]- ------------------------------------------------------------------------------ -- Weird substitutions. @@ -417,8 +537,25 @@ -- 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)- -- TODO (2017-07-20): Five hex numbers- , ("‐", "-") -- U+2010 HYPHEN -- TODO (2017-07-17): Missing `;`. , ("’", "") -- U+2019 RIGHT SINGLE QUOTATION MARK+ ]++------------------------------------------------------------------------------+-- Title pre-processing++titleErase ∷ [Text]+titleErase =+ [ "<Emphasis Type=\"BoldItalic\">" -- opening+ , "<Emphasis Type=\"Italic\">" -- opening+ , "</Emphasis>" -- closing+ , "<Subscript>" -- opening+ , "</Subscript>" -- closing+ , "<Superscript>" -- opening+ , "</Superscript>" -- closing+ , "<TEX>$\\" -- opening+ , "$</TEX>" -- closing+ , "<TEX>{\\sc " -- opening+ , "<TEX>{\\sf " -- opening+ , "}</TEX>" -- closing ]