packages feed

yuuko-2010.1.23: src/Text/HTML/Yuuko.hs

module Text.HTML.Yuuko where

import Text.XML.HXT.Arrow
import qualified Text.XML.HXT.Arrow.XPathSimple as XS
import System.IO.Unsafe

in_html :: [(String, String)]
in_html = [(a_parse_html, v_1)]

in_xml :: [(String, String)]
in_xml = [(a_ignore_none_xml_contents, v_1)]

yuuko :: String -> String -> [String]
yuuko = yuuko_base in_html show_tree

yuuko_xml :: String -> String -> [String]
yuuko_xml = yuuko_base in_xml show_tree

yuuko_for_text :: String -> String -> [String]
yuuko_for_text = yuuko_base in_html getText

show_tree :: IOStateArrow () XmlTree String
show_tree = writeDocumentToString write_args
  where
    write_args = 
      [ (a_no_xml_pi, v_0)
      , (a_output_xml, v_0)
      ]

yuuko_base :: [(String, String)] -> (IOStateArrow () XmlTree String) -> String -> String -> [String]
yuuko_base args formatter expr s = unsafePerformIO $
  runX process

  where
    read_args = 
      [ (a_validate, v_0)
      , (a_issue_warnings, v_0)
      ]
      ++ args
    
    process =
          readString read_args s
      >>> XS.getXPathTreesInDoc expr
      >>> formatter