diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 Changelog for pdfname
 =====================
 
+0.3
+---
+
+Added Unicode and HTML escaped text substitutions.
+
 0.2
 ---
 
diff --git a/pdfname.cabal b/pdfname.cabal
--- a/pdfname.cabal
+++ b/pdfname.cabal
@@ -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
diff --git a/src/CreateFile.hs b/src/CreateFile.hs
--- a/src/CreateFile.hs
+++ b/src/CreateFile.hs
@@ -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
 
diff --git a/src/Substitutions.hs b/src/Substitutions.hs
--- a/src/Substitutions.hs
+++ b/src/Substitutions.hs
@@ -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 =
-  [ ("&Acirc;",   "&#194;",  "&#x00C2;", "A")              -- LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-  , ("&Auml;",    "&#196;",  "&#x00C4;", "A")              -- LATIN CAPITAL LETTER A WITH DIAERESIS
-  , ("&Ccedil;",  "&#199;",  "&#x00C7;", "C")              -- LATIN CAPITAL LETTER C WITH CEDILLA
-  , ("&Euml;",    "&#203;",  "&#x00CB;", "E")              -- LATIN CAPITAL LETTER E WITH DIAERESIS
-  , ("&Iuml;",    "&#207;",  "&#x00CF;", "I")              -- LATIN CAPITAL LETTER I WITH DIAERESIS
-  , ("&Ouml;",    "&#214;",  "&#x00D6;", "O")              -- LATIN CAPITAL LETTER U WITH DIAERESIS
-  , ("&Oslash;",  "&#216;",  "&#x00D8;", "O")              -- LATIN CAPITAL LETTER O WITH STROKE
-  , ("&Uuml;",    "&#220;",  "&#x00DC;", "U")              -- LATIN CAPITAL LETTER U WITH DIAERESIS
-  , ("&aacute;",  "&#225;",  "&#x00E1;", "a")              -- LATIN SMALL LETTER A WITH ACUTE
-  , ("&acirc;",   "&#226;",  "&#x00E2;", "a")              -- LATIN SMALL LETTER A WITH CIRCUMFLEX
-  , ("&auml;",    "&#228;",  "&#x00E4;", "a")              -- LATIN SMALL LETTER A WITH DIAERESIS
-  , ("&ccedil;",  "&#231;",  "&#x00E7;", "c")              -- LATIN SMALL LETTER C WITH CEDILLA
-  , ("&eacute;",  "&#233;",  "&#x00E9;", "e")              -- LATIN SMALL LETTER E WITH ACUTE
-  , ("&euml;",    "&#235;",  "&#x00EB;", "e")              -- LATIN SMALL LETTER E WITH DIAERESIS
-  , ("&iacute;",  "&#237;",  "&#x00ED;", "i")              -- LATIN SMALL LETTER I WITH ACUTE
-  , ("&iuml;",    "&#239;",  "&#x00EF;", "i")              -- LATIN SMALL LETTER I WITH DIAERESIS
-  , ("&oacute;",  "&#243;",  "&#x00F3;", "o")              -- LATIN SMALL LETTER O WITH ACUTE
-  , ("&ouml;",    "&#246;",  "&#x00F6;", "o")              -- LATIN SMALL LETTER O WITH DIAERESIS
-  , ("&oslash;",  "&#248;",  "&#x00F8;", "o")              -- LATIN SMALL LETTER O WITH STROKE
-  , ("&uacute;",  "&#250;",  "&#x00FA;", "u")              -- LATIN SMALL LETTER U WITH ACUTE
-  , ("&uuml;",    "&#252;",  "&#x00FC;", "u")              -- LATIN SMALL LETTER U WITH DIAERESIS
-  , ("&Imacr;",   "&#298;",  "&#x012A;", "I")              -- LATIN CAPITAL LETTER I WITH MACRON
-  , ("&imacr;",   "&#299;",  "&#x012B;", "I")              -- LATIN SMALL LETTER I WITH MACRON
-  , ("&Sacute;",  "&#346;",  "&#x015A;", "S")              -- LATIN CAPITAL LETTER S WITH ACUTE
-  , ("&sacute;",  "&#347;",  "&#x015B;", "s")              -- LATIN SMALL LETTER S WITH ACUTE
-  , ("&Scedil;",  "&#350;",  "&#x015E;", "s")              -- LATIN CAPITAL LETTER S WITH CEDILLA
-  , ("&scedil;",  "&#351;",  "&#x015F;", "s")              -- LATIN SMALL LETTER S WITH CEDILLA
-  , ("&Scaron;",  "&#352;",  "&#x0160",  "S")              -- LATIN CAPITAL LETTER S WITH CARON
-  , ("&scaron;",  "&#353;",  "&#x0161",  "s")              -- LATIN SMALL LETTER S WITH CARON
-  , ("&alpha;",   "&#945;",  "&#x03B1;", "alpha")          -- GREEK SMALL LETTER ALPHA
-  , ("&beta;",    "&#946;",  "&#x03B2;", "beta")           -- GREEK SMALL LETTER BETA
-  , ("&gamma;",   "&#947;",  "&#x03B3;", "gamma")          -- GREEK SMALL LETTER GAMMA
-  , ("&delta;",   "&#948;",  "&#x03B4;", "delta")          -- GREEK SMALL LETTER DELTA
-  , ("&epsilon;", "&#949;",  "&#x03B5;", "epsilon")        -- GREEK SMALL LETTER EPSILON
-  , ("&zeta;",    "&#950;",  "&#x03B6;", "zeta")           -- GREEK SMALL LETTER ZETA
-  , ("&eta;",     "&#951;",  "&#x03B7;", "eta")            -- GREEK SMALL LETTER ETA
-  , ("&theta;",   "&#952;",  "&#x03B8;", "theta")          -- GREEK SMALL LETTER THETA
-  , ("&iota;",    "&#953;",  "&#x03B9;", "iota")           -- GREEK SMALL LETTER IOTA
-  , ("&kappa;",   "&#954;",  "&#x03BA;", "kappa")          -- GREEK SMALL LETTER KAPPA
-  , ("&lambda;",  "&#955;",  "&#x03BB;", "lambda")         -- GREEK SMALL LETTER LAMDA
-  , ("&mu;",      "&#956;",  "&#x03BC;", "mu")             -- GREEK SMALL LETTER MU
-  , ("&nu;",      "&#957;",  "&#x03BD;", "nu")             -- GREEK SMALL LETTER NU
-  , ("&xi;",      "&#958;",  "&#x03BE;", "xi")             -- GREEK SMALL LETTER ZI
-  , ("&omicron;", "&#959;",  "&#x03BF;", "omicron")        -- GREEK SMALL LETTER OMICRON
-  , ("&pi;",      "&#960;",  "&#x03C0;", "pi")             -- GREEK SMALL LETTER PI
-  , ("&rho;",     "&#961;",  "&#x03C1;", "rho")            -- GREEK SMALL LETTER RHO
-  , ("&sigmaf;",  "&#962;",  "&#x03C2;", "sigma")          -- GREEK SMALL LETTER FINAL SIGMA
-  , ("&sigma;",   "&#963;",  "&#x03C3;", "sigma")          -- GREEK SMALL LETTER SIGMA
-  , ("&tau;",     "&#964;",  "&#x03C4;", "tau")            -- GREEK SMALL LETTER TAU
-  , ("&upsilon;", "&#965;",  "&#x03C5;", "upsilon")        -- GREEK SMALL LETTER UPSILON
-  , ("&phi;",     "&#966;",  "&#x03C6;", "phi")            -- GREEK SMALL LETTER PHI
-  , ("&chi;",     "&#967;",  "&#x03C7;", "chi")            -- GREEK SMALL LETTER CHI
-  , ("&psi;",     "&#968;",  "&#x03C8;", "psi")            -- GREEK SMALL LETTER PSI
-  , ("&omega;",   "&#969;",  "&#x03C9;", "omega")          -- GREEK SMALL LETTER OMEGA
-  , ("&ndash;",   "&#8211;", "&#x2013;", "-")              -- EN DASH
-  , ("&mdash;",   "&#8212;", "&#x2014;", ".")              -- EM DAS
-  , ("&lsquo;",   "&#8216;", "&#x2018;", "")               -- LEFT SINGLE QUOTATION MARK
-  , ("&rsquo;",   "&#8217;", "&#x2019;", "")               -- RIGHT SINGLE QUOTATION MARK
-  , ("&sbquo;",   "&#8218;", "&#x201A;", "")               -- SINGLE LOW-9 QUOTATION MAR
-  , ("&ldquo;",   "&#8220;", "&#x201C;", "")               -- LEFT DOUBLE QUOTATION MARK
-  , ("&rdquo;",   "&#8221;", "&#x201D;", "")               -- RIGHT DOUBLE QUOTATION MARK
-  , ("&bdquo;",   "&#8222;", "&#x201E;", "")               -- DOUBLE LOW-9 QUOTATION MARK
-  , ("&dagger;",  "&#8224;", "&#x2020;", "dagger")         -- DAGGER
-  , ("&Dagger;",  "&#8225;", "&#x2021;", "dagger-dagger")  -- DOUBLE DAGGER
-  , ("&bull;",    "&#8226;", "&#x2022;", "")               -- BULLET
-  , ("&hellip;",  "&#8230;", "&#x2026;", "")               -- HORIZONTAL ELLIPSIS
-  , ("&sup;",     "&#8323;", "&#x2283;", "")               -- SUPERSET OF
-  ]
+-- | Substitutions of HTML-escaped text (entities and symbols).
 
--- | Substitutions of HTML symbols.
-htmlSymbolSubst ∷ [(HTMLSymbolDec, HTMLSymbolHex, Text)]
-htmlSymbolSubst =
-  [ ("&#8208;", "&#x2010;", "-")  -- HYPHEN
-  , ("&#8219;", "&#x201B;", "")   -- SINGLE HIGH-REVERSED-9 QUOTATION MARK
-  , ("&#8223;", "&#x201F;", "")   -- DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-  , ("&#8989;", "&#x231D;", "")   -- TOP RIGHT CORNER
+-- We use @noName@ when the HTML symbol has not an entity name.
+htmlNameSubst ∷ [(Text, Text)]
+htmlNameSubst =
+  [ (noName,      "!")   -- U+0021 EXCLAMATION MARK
+  , ("&quot;",    "\"")  -- U+0022 QUOTATION MARK
+  , (noName,      "#")   -- U+0023 NUMBER SIGN
+  , (noName,      "$")   -- U+0024 DOLLAR SIGN
+  , (noName,      "%")   -- U+0025 PERCENT SIGN
+  , ("&amp;",     "&")   -- 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
+  , ("&lt;",      "<")   -- U+003C LESS-THAN SIGN
+  , (noName,      "=")   -- U+003D EQUALS SIGN
+  , ("&gt;",      ">")   -- U+003E GREATER-THAN SIGN
+  , (noName,      "?")   -- U+003F QUESTION MARK
+  , (noName,      "@")   -- U+0040 COMMERCIAL AT
+  , ("&sup2;",    "²")   -- U+00B2 SUPERSCRIPT TWO
+  , ("&sup3;",    "³")   -- U+00B3 SUPERSCRIPT THREE
+  , ("&sup1;",    "¹")   -- U+00B9 SUPERSCRIPT ONE
+  , ("&Agrave;",  "À")   -- U+00C0
+  , ("&Aacute;",  "Á")   -- U+00C1
+  , ("&Acirc;",   "Â")   -- U+00C2
+  , ("&Atilde;",  "Ã")   -- U+00C3
+  , ("&Auml;",    "Ä")   -- U+00C4
+  , ("&Aring;",   "Å")   -- U+00C5
+  , ("&AElig;",   "Æ")   -- U+00C6
+  , ("&Ccedil;",  "Ç")   -- U+00C7
+  , ("&Egrave;",  "È")   -- U+00C8
+  , ("&Eacute;",  "É")   -- U+00C9
+  , ("&Ecirc;",   "Ê")   -- U+00CA
+  , ("&Euml;",    "Ë")   -- U+00CB
+  , ("&Igrave;",  "Ì")   -- U+00CC
+  , ("&Iacute;",  "Í")   -- U+00CD
+  , ("&Icirc;",   "Î")   -- U+00CE
+  , ("&Iuml;",    "Ï")   -- U+00CF
+  , ("&ETH;",     "Ð")   -- U+00D0
+  , ("&Ntilde;",  "Ñ")   -- U+00D1
+  , ("&Ograve;",  "Ò")   -- U+00D2
+  , ("&Oacute;",  "Ó")   -- U+00D3
+  , ("&Ocirc;",   "Ô")   -- U+00D4
+  , ("&Otilde;",  "Õ")   -- U+00D5
+  , ("&Ouml;",    "Ö")   -- U+00D6
+  , ("&times;",   "×")   -- U+00D7
+  , ("&Oslash;",  "Ø")   -- U+00D8
+  , ("&Ugrave;",  "Ù")   -- U+00D9
+  , ("&Uacute;",  "Ú")   -- U+00DA
+  , ("&Ucirc;",   "Û")   -- U+00DB
+  , ("&Uuml;",    "Ü")   -- U+00DC
+  , ("&Yacute;",  "Ý")   -- U+00DD
+  , ("&THORN;",   "Þ")   -- U+00DE
+  , ("&szlig;",   "ß")   -- U+00DF
+  , ("&agrave;",  "à")   -- U+00E0
+  , ("&aacute;",  "á")   -- U+00E1
+  , ("&acirc;",   "â")   -- U+00E2
+  , ("&atilde;",  "ã")   -- U+00E3
+  , ("&auml;",    "ä")   -- U+00E4
+  , ("&aring;",   "å")   -- U+00E5
+  , ("&aelig;",   "æ")   -- U+00E6
+  , ("&ccedil;",  "ç")   -- U+00E7
+  , ("&egrave;",  "è")   -- U+00E8
+  , ("&eacute;",  "é")   -- U+00E9
+  , ("&ecirc;",   "ê")   -- U+00EA
+  , ("&euml;",    "ë")   -- U+00EB
+  , ("&igrave;",  "ì")   -- U+00EC
+  , ("&iacute;",  "í")   -- U+00ED
+  , ("&icirc;",   "î")   -- U+00EE
+  , ("&iuml;",    "ï")   -- U+00EF
+  , ("&eth;",     "ð")   -- U+00F0
+  , ("&ntilde;",  "ñ")   -- U+00F1
+  , ("&ograve;",  "ò")   -- U+00F2
+  , ("&oacute;",  "ó")   -- U+00F3
+  , ("&ocirc;",   "ô")   -- U+00F4
+  , ("&otilde;",  "õ")   -- U+00F5
+  , ("&ouml;",    "ö")   -- U+00F6
+  , ("&divide;",  "÷")   -- U+00F7
+  , ("&oslash;",  "ø")   -- U+00F8
+  , ("&ugrave;",  "ù")   -- U+00F9
+  , ("&uacute;",  "ú")   -- U+00FA
+  , ("&ucirc;",   "û")   -- U+00FB
+  , ("&uuml;",    "ü")   -- U+00FC
+  , ("&yacute;",  "ý")   -- U+00FD
+  , ("&thorn;",   "þ")   -- U+00FE
+  , ("&yuml;",    "ÿ")   -- U+00FF
+  , (noName,      "ĕ")   -- U+0115
+  , ("&Imacr;",   "Ī")   -- U+012A
+  , ("&imacr;",   "ī")   -- U+012B
+  , (noName,      "ĭ")   -- U+012D
+  , ("&Sacute;",  "Ś")   -- U+015A
+  , ("&sacute;",  "ś")   -- U+015B
+  , ("&Scedil;",  "Ş")   -- U+015E
+  , ("&scedil;",  "ş")   -- U+015F
+  , ("&Scaron;",  "Š")   -- U+0160
+  , ("&scaron;",  "š")   -- U+0161
+  , ("&ubreve;",  "ŭ")   -- U+016D
+  , ("&Alpha;",   "Α")   -- U+0391
+  , ("&Beta;",    "Β")   -- U+0392
+  , ("&Gamma;",   "Γ")   -- U+0393
+  , ("&Delta;",   "Δ")   -- U+0394
+  , ("&Epsilon;", "Ε")   -- U+0395
+  , ("&Zeta;",    "Ζ")   -- U+0396
+  , ("&Eta;",     "Η")   -- U+0397
+  , ("&Theta;",   "θ")   -- U+0398
+  , ("&Iota;",    "Ι")   -- U+0399
+  , ("&Kappa;",   "Κ")   -- U+03AA
+  , ("&Lambda;",  "Λ")   -- U+03AB
+  , ("&Mu;",      "Μ")   -- U+03AC
+  , ("&Nu;",      "Ν")   -- U+03AD
+  , ("&Xi;",      "Ξ")   -- U+03AE
+  , ("&Omicron;", "Ο")   -- U+03AF
+  , ("&Pi;",      "Π")   -- U+03A0
+  , ("&Rho;",     "Ρ")   -- U+03A1
+  -- The code U+03A2 is reserved.
+  , ("&Sigma;",   "Σ")   -- U+03A3
+  , ("&Tau;",     "Τ")   -- U+03A4
+  , ("&Upsilon;", "Υ")   -- U+03A5
+  , ("&Phi;",     "Φ")   -- U+03A6
+  , ("&Chi;",     "Χ")   -- U+03A7
+  , ("&Psi;",     "Ψ")   -- U+03A8
+  , ("&Omega;",   "Ω")   -- U+03A9
+  , ("&alpha;",   "α")   -- U+03B1
+  , ("&beta;",    "β")   -- U+03B2
+  , ("&gamma;",   "γ")   -- U+03B3
+  , ("&delta;",   "δ")   -- U+03B4
+  , ("&epsilon;", "ε")   -- U+03B5
+  , ("&zeta;",    "ζ")   -- U+03B6
+  , ("&eta;",     "η")   -- U+03B7
+  , ("&theta;",   "θ")   -- U+03B8
+  , ("&iota;",    "ι")   -- U+03B9
+  , ("&kappa;",   "κ")   -- U+03BA
+  , ("&lambda;",  "λ")   -- U+03BB
+  , ("&mu;",      "μ")   -- U+03BC
+  , ("&nu;",      "ν")   -- U+03BD
+  , ("&xi;",      "ξ")   -- U+03BE
+  , ("&omicron;", "ο")   -- U+03BF
+  , ("&pi;",      "π")   -- U+03C0
+  , ("&rho;",     "ρ")   -- U+03C1
+  , ("&sigmaf;",  "ς")   -- U+03C2
+  , ("&sigma;",   "σ")   -- U+03C3
+  , ("&tau;",     "τ")   -- U+03C4
+  , ("&upsilon;", "υ")   -- U+03C5
+  , ("&phi;",     "φ")   -- U+03C6
+  , ("&chi;",     "χ")   -- U+03C7
+  , ("&psi;",     "ψ")   -- U+03C8
+  , ("&omega;",   "ω")   -- U+03C9
+  , (noName,      "‐")   -- U+2010
+  , ("&ndash;",   "–")   -- U+2013
+  , ("&mdash;",   "—")   -- U+2014
+  , ("&lsquo;",   "‘")   -- U+2018
+  , ("&rsquo;",   "’")   -- U+2019
+  , ("&sbquo;",   "‚")   -- U+201A
+  , (noName,      "‛")   -- U+201B
+  , ("&ldquo;",   "“")   -- U+201C
+  , ("&rdquo;",   "”")   -- U+201D
+  , ("&bdquo;",   "„")   -- U+201E
+  , (noName,      "‟")   -- U+201F
+  , ("&dagger;",  "†")   -- U+2020
+  , ("&Dagger;",  "‡")   -- U+2021
+  , ("&bull;",    "•")   -- U+2022
+  , ("&hellip;",  "…")   -- U+2026
+  , ("&forall;",  "∀")   -- U+2200
+  , ("&exist;",   "∃")   -- U+2203
+  , ("&sup;",     "⊃")   -- 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>&#x03C9;</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
-  , ("&#x02010;", "-")  -- U+2010 HYPHEN
   -- TODO (2017-07-17): Missing `;`.
   , ("&#8217",  "")     -- 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
   ]
