]> gitweb.michael.orlitzky.com - dead/halcyon.git/commitdiff
Add missing Html.hs from previous commit.
authorMichael Orlitzky <michael@orlitzky.com>
Wed, 10 Jul 2013 18:01:19 +0000 (14:01 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Wed, 10 Jul 2013 18:01:19 +0000 (14:01 -0400)
src/Html.hs [new file with mode: 0644]

diff --git a/src/Html.hs b/src/Html.hs
new file mode 100644 (file)
index 0000000..1c9a428
--- /dev/null
@@ -0,0 +1,34 @@
+module Html
+where
+
+import Test.HUnit
+import Text.HTML.TagSoup.Entity (lookupEntity)
+
+replace_entities :: String -> String
+replace_entities [] = []
+replace_entities ('&':xs) =
+  let (b, a) = break (== ';') xs in
+  case (lookupEntity b, a) of
+    (Just c, ';':as) ->  c  : replace_entities as
+    _                -> '&' : replace_entities xs
+replace_entities (x:xs) = x : replace_entities xs
+
+
+html_tests :: [Test]
+html_tests = [ test_replace_entities ]
+
+test_replace_entities :: Test
+test_replace_entities =
+    TestCase $ assertEqual description expected_text actual_text
+    where
+      description = "All entities are replaced correctly."
+      actual_text =
+        replace_entities $
+          "&quot;The moon is gay&#8230;&hellip;&quot; " ++
+          "said &lt;insert the current president of the " ++
+          "United States of America&gt;. &ldquo;It&#8217;s " ++
+          "OK&mdash;&ndash;he&#8217;s not a real doctor.&rdquo;"
+      expected_text =
+        "\"The moon is gay……\" said <insert " ++
+        "the current president of the United States of America>. " ++
+        "“It’s OK—–he’s not a real doctor.”"