git.iko.soy/typeable/dom-parser
on master help sign in
Upd: use Name instead of Text for names
commit7aa37c964f231660dbeec5da364cdf67dc626fe3 authorAlexey Uimanov <s9gf4ult@gmail.com> dateTue 3 Jan 2017, 19:20 (10 years ago) parent6849254
4 files changed+26−24
src/Text/XML/DOM/Parser/Class.hs+5−1 src/Text/XML/DOM/Parser/Combinators.hs+15−17 src/Text/XML/DOM/Parser/Types.hs+5−5 test/Main.hs+1−1
src/Text/XML/DOM/Parser/Class.hs+5−1
@@ -165,7 +165,11 @@ voidFromDom :: (Monad m) => DomParserT Identity m Void
165165voidFromDom = empty
166166
167167class FromAttribute a where
168− fromAttribute :: Text -> Either Text a
168+ fromAttribute
169+ :: Text
170+ -- ^ Attribute contents to parse
171+ -> Either Text a
172+ -- ^ Either error message or result
169173
170174instance FromAttribute () where
171175 fromAttribute _ = Right ()
src/Text/XML/DOM/Parser/Combinators.hs+15−17
@@ -86,38 +86,38 @@ inFilteredTrav deeper = traverseElems trav
8686
8787inElemTrav
8888 :: (Monad m, Foldable g, DomTraversable f)
89− => Text
89+ => Name -- ^ Name of tag to traverse in
9090 -> DomParserT Identity m a
9191 -> DomParserT g m (f a)
9292inElemTrav n = inFilteredTrav deeper
9393 where
94− deeper = (DomPath [n],) . toListOf (folded . nodes . folded . _Element . ell n)
94+ deeper = (DomPath [n],) . toListOf (folded . nodes . folded . _Element . el n)
9595
9696-- | Runs parser inside first children element with given name
9797inElem
9898 :: (Monad m, Foldable g)
99− => Text
99+ => Name
100100 -> DomParserT Identity m a
101101 -> DomParserT g m a
102102inElem n = fmap runIdentity . inElemTrav n
103103
104104inElemAll
105105 :: (Monad m, Foldable g)
106− => Text
106+ => Name
107107 -> DomParserT Identity m a
108108 -> DomParserT g m [a]
109109inElemAll = inElemTrav
110110
111111inElemMay
112112 :: (Monad m, Foldable g)
113− => Text
113+ => Name
114114 -> DomParserT Identity m a
115115 -> DomParserT g m (Maybe a)
116116inElemMay = inElemTrav
117117
118118inElemNe
119119 :: (Monad m, Foldable g)
120− => Text
120+ => Name
121121 -> DomParserT Identity m a
122122 -> DomParserT g m (NonEmpty a)
123123inElemNe = inElemTrav
@@ -159,11 +159,11 @@ divePath path = magnify $ to modElems
159159 . over pdPath (<> path)
160160 diver :: Fold Element Element
161161 diver = foldr (.) id $ map toDive $ unDomPath path
162− toDive n = nodes . folded . _Element . ell n
162+ toDive n = nodes . folded . _Element . el n
163163
164164diveElem
165165 :: (Monad m, Foldable g)
166− => Text
166+ => Name
167167 -> DomParserT [] m a
168168 -> DomParserT g m a
169169diveElem p = divePath $ DomPath [p]
@@ -211,15 +211,15 @@ ignoreBlank = ignoreElem test
211211-- | Returns name of current element.
212212--
213213-- @since 1.0.0
214−getCurrentName :: (Monad m) => DomParserT Identity m Text
215−getCurrentName = view $ pdElements . to runIdentity . localName
214+getCurrentName :: (Monad m) => DomParserT Identity m Name
215+getCurrentName = view $ pdElements . to runIdentity . name
216216
217217-- | If name of current tag differs from first argument throws 'PENotFound' with
218218-- tag name replaced in last path's segment. Useful for checking root
219219-- document's element name.
220220checkCurrentName
221221 :: (Monad m)
222− => Text
222+ => Name
223223 -> DomParserT Identity m ()
224224checkCurrentName n = do
225225 cn <- getCurrentName
@@ -294,18 +294,16 @@ getCurrentAttributes = view $ pdElements . to runIdentity . attrs
294294-- | Returns element with given name or 'Nothing'
295295--
296296-- @since 1.0.0
297−getCurrentAttribute :: (Monad m) => Text -> DomParserT Identity m (Maybe Text)
298−getCurrentAttribute attrName'
297+getCurrentAttribute :: (Monad m) => Name -> DomParserT Identity m (Maybe Text)
298+getCurrentAttribute attrName
299299 = preview $ pdElements . to runIdentity . attr attrName
300− where
301− attrName = Name attrName' Nothing Nothing
302300
303301-- | Parses attribute with given name, throws error if attribute is not found.
304302--
305303-- @since 1.0.0
306304parseAttribute
307305 :: (Monad m)
308− => Text
306+ => Name
309307 -- ^ Attribute name
310308 -> (Text -> Either Text a)
311309 -- ^ Attribute content parser
@@ -320,7 +318,7 @@ parseAttribute attrName parser =
320318-- @since 1.0.0
321319parseAttributeMaybe
322320 :: (Monad m)
323− => Text
321+ => Name
324322 -- ^ Attribute name
325323 -> (Text -> Either Text a)
326324 -- ^ Attribute content parser
src/Text/XML/DOM/Parser/Types.hs+5−5
@@ -33,8 +33,8 @@ import Text.XML
3333import Text.XML.Lens
3434
3535newtype DomPath = DomPath
36− { unDomPath :: [Text]
37− } deriving (Eq, Ord, Show, Read, Monoid)
36+ { unDomPath :: [Name]
37+ } deriving (Eq, Ord, Show, Monoid)
3838
3939-- | DOM parser error description.
4040data ParserError
@@ -51,7 +51,7 @@ data ParserError
5151
5252 -- | Could not parse attribute
5353 | PEAttributeWrongFormat
54− { _peAttributeName :: Text
54+ { _peAttributeName :: Name
5555 , _peDetails :: Text
5656 , _pePath :: DomPath
5757 }
@@ -63,7 +63,7 @@ data ParserError
6363
6464 -- | Expected attribute but not found
6565 | PEAttributeNotFound
66− { _peAttributeName :: Text
66+ { _peAttributeName :: Name
6767 , _pePath :: DomPath
6868 }
6969
@@ -122,7 +122,7 @@ runDomParserT
122122runDomParserT doc par =
123123 let pd = ParserData
124124 { _pdElements = doc ^. root . to pure
125− , _pdPath = DomPath [doc ^. root . localName]
125+ , _pdPath = DomPath [doc ^. root . name]
126126 }
127127 in runExceptT $ runReaderT par pd
128128
test/Main.hs+1−1
@@ -33,7 +33,7 @@ testStructureAttributes = do
3333 int <- parseAttribute "int" readContent
3434 bool <- parseAttribute "bool" readBool
3535 return $ TestStructure
36− { tsName = name
36+ { tsName = nameLocalName name
3737 , tsInts = [int]
3838 , tsBools = pure bool }
3939