module Codec.Epub.Parse.Util
( atQTag
, mbQTagText
, mbGetAttrValue
, mbGetQAttrValue
, notNullA
, text
, dcName
, opfName
, xmlName
)
where
import Control.Arrow.ListArrows
import Data.Tree.NTree.TypeDefs ( NTree )
import Text.XML.HXT.Arrow.XmlArrow
import Text.XML.HXT.DOM.TypeDefs
atQTag :: (ArrowXml a) => QName -> a (NTree XNode) XmlTree
atQTag tag = deep (isElem >>> hasQName tag)
text :: (ArrowXml a) => a (NTree XNode) String
text = getChildren >>> getText
notNullA :: (ArrowList a) => a [b] [b]
notNullA = isA $ not . null
mbQTagText :: (ArrowXml a) => QName -> a (NTree XNode) (Maybe String)
mbQTagText tag =
( atQTag tag >>>
text >>> notNullA >>^ Just )
`orElse`
(constA Nothing)
mbGetAttrValue :: (ArrowXml a) =>
String -> a XmlTree (Maybe String)
mbGetAttrValue n =
(getAttrValue n >>> notNullA >>^ Just)
`orElse` (constA Nothing)
mbGetQAttrValue :: (ArrowXml a) =>
QName -> a XmlTree (Maybe String)
mbGetQAttrValue qn =
(getQAttrValue qn >>> notNullA >>^ Just)
`orElse` (constA Nothing)
dcName :: String -> QName
dcName local = mkQName "dc" local "http://purl.org/dc/elements/1.1/"
opfName :: String -> QName
opfName local = mkQName "opf" local "http://www.idpf.org/2007/opf"
xmlName :: String -> QName
xmlName local = mkQName "xml" local "http://www.w3.org/XML/1998/namespace"