]> gitweb.michael.orlitzky.com - dead/lwn-epub.git/blobdiff - src/LWN/XHTML.hs
Replace double newlines with "<br /><br />" in <pre> tags.
[dead/lwn-epub.git] / src / LWN / XHTML.hs
index a2f103fa0d83b7ae433f239036e02456eb6e08f3..f1a91c249b41608e764f15ca7e8922f06afa2a7c 100644 (file)
@@ -9,14 +9,15 @@ module LWN.XHTML (
   parse_lwn,
   preprocess,
   remove_byline,
+  remove_full_story_paragraphs,
   remove_title,
   to_xhtml,
   to_xml,
   xml_from_contents)
 where
 
+import Data.String.Utils (replace)
 import Text.HandsomeSoup (css)
-import Text.Regex.Posix ((=~))
 import Text.XML.HXT.Core (
   (>>>),
   (/>),
@@ -25,6 +26,7 @@ import Text.XML.HXT.Core (
   SysConfigList,
   XmlTree,
   changeAttrValue,
+  changeText,
   deep,
   getAttrValue,
   hasAttrValue,
@@ -84,12 +86,32 @@ preprocess =
   remove_comment_links
   >>>
   replace_links_with_spans
+  >>>
+  replace_double_newline_in_pre
 
 
 is_link :: (ArrowXml a) => a XmlTree XmlTree
 is_link =
   isElem >>> hasName "a"
 
+is_pre :: (ArrowXml a) => a XmlTree XmlTree
+is_pre =
+  isElem
+  >>>
+  hasName "pre"
+
+replace_double_newline_in_pre :: (ArrowXml a) => a XmlTree XmlTree
+replace_double_newline_in_pre =
+  processTopDown $ fix_it `when` is_pre
+  where
+    fix_it :: (ArrowXml a) => a XmlTree XmlTree
+    fix_it =
+      changeText $ replace "\n\n" "<br /><br />"
+
+remove_full_story_paragraphs  :: (ArrowXml a) => a XmlTree XmlTree
+remove_full_story_paragraphs =
+  processTopDown $ none `when` full_story_paragraph
+
 
 remove_comment_links  :: (ArrowXml a) => a XmlTree XmlTree
 remove_comment_links =
@@ -163,7 +185,7 @@ full_story_link =
   hasName "a"
   >>>
   ifA
-    (this /> hasText (=~ "Full Story"))
+    (this /> hasText (== "Full Story"))
     this
     none