@@ -86,38 +86,38 @@ inFilteredTrav deeper = traverseElems trav
8686
8787inElemTrav
8888 :: (Monad m, Foldable g, DomTraversable f)
89− => Name -- ^ Name of tag to traverse in
89+ => NameMatcher -- ^ 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 . el n)
94+ deeper = (DomPath [_nmShow n],) . toListOf (folded . nodes . folded . _Element . elMatchName n)
9595
9696-- | Runs parser inside first children element with given name
9797inElem
9898 :: (Monad m, Foldable g)
99− => Name
99+ => NameMatcher
100100 -> DomParserT Identity m a
101101 -> DomParserT g m a
102102inElem n = fmap runIdentity . inElemTrav n
103103
104104inElemAll
105105 :: (Monad m, Foldable g)
106− => Name
106+ => NameMatcher
107107 -> DomParserT Identity m a
108108 -> DomParserT g m [a]
109109inElemAll = inElemTrav
110110
111111inElemMay
112112 :: (Monad m, Foldable g)
113− => Name
113+ => NameMatcher
114114 -> DomParserT Identity m a
115115 -> DomParserT g m (Maybe a)
116116inElemMay = inElemTrav
117117
118118inElemNe
119119 :: (Monad m, Foldable g)
120− => Name
120+ => NameMatcher
121121 -> DomParserT Identity m a
122122 -> DomParserT g m (NonEmpty a)
123123inElemNe = inElemTrav
@@ -149,24 +149,24 @@ in given path.
149149divePath
150150 :: forall m g a
151151 . (Monad m, Foldable g)
152− => DomPath
152+ => [NameMatcher]
153153 -> DomParserT [] m a
154154 -> DomParserT g m a
155155divePath path = magnify $ to modElems
156156 where
157157 modElems
158158 = over pdElements (toListOf $ folded . diver)
159− . over pdPath (<> path)
159+ . over pdPath (<> DomPath (map _nmShow path))
160160 diver :: Fold Element Element
161− diver = foldr (.) id $ map toDive $ unDomPath path
162− toDive n = nodes . folded . _Element . el n
161+ diver = foldr (.) id $ map toDive path
162+ toDive n = nodes . folded . _Element . elMatchName n
163163
164164diveElem
165165 :: (Monad m, Foldable g)
166− => Name
166+ => NameMatcher
167167 -> DomParserT [] m a
168168 -> DomParserT g m a
169−diveElem p = divePath $ DomPath [p]
169+diveElem p = divePath [p]
170170
171171-- | Ignore arbitrary current element if it conforms to predicate.
172172ignoreElem
@@ -219,14 +219,14 @@ getCurrentName = view $ pdElements . to runIdentity . name
219219-- document's element name.
220220checkCurrentName
221221 :: (Monad m)
222− => Name
222+ => NameMatcher
223223 -> DomParserT Identity m ()
224224checkCurrentName n = do
225225 cn <- getCurrentName
226− unless (cn == n) $ do
226+ unless ((n ^. nmMatch) cn) $ do
227227 p <- view pdPath
228228 let pinit = if null (unDomPath p) then [] else init $ unDomPath p
229− throwError $ ParserErrors [PENotFound $ DomPath $ pinit ++ [n]]
229+ throwError $ ParserErrors [PENotFound $ DomPath $ pinit ++ [_nmShow n]]
230230 return ()
231231
232232-- | Get current content. If current element contains no content or
@@ -288,22 +288,28 @@ readContent = maybeReadContent $ readMaybe . T.unpack . T.strip
288288-- | Retuns map of attributes of current element
289289--
290290-- @since 1.0.0
291−getCurrentAttributes :: (Monad m) => DomParserT Identity m (M.Map Name Text)
291+getCurrentAttributes
292+ :: (Monad m)
293+ => DomParserT Identity m (M.Map Name Text)
292294getCurrentAttributes = view $ pdElements . to runIdentity . attrs
293295
294296-- | Returns element with given name or 'Nothing'
295297--
296298-- @since 1.0.0
297−getCurrentAttribute :: (Monad m) => Name -> DomParserT Identity m (Maybe Text)
299+getCurrentAttribute
300+ :: (Monad m)
301+ => NameMatcher
302+ -> DomParserT Identity m (Maybe Text)
298303getCurrentAttribute attrName
299− = preview $ pdElements . to runIdentity . attr attrName
304+ = preview $ pdElements . to runIdentity . attrs . to M.toList
305+ . traversed . filtered (views _1 (attrName ^. nmMatch)) . _2
300306
301307-- | Parses attribute with given name, throws error if attribute is not found.
302308--
303309-- @since 1.0.0
304310parseAttribute
305311 :: (Monad m)
306− => Name
312+ => NameMatcher
307313 -- ^ Attribute name
308314 -> (Text -> Either Text a)
309315 -- ^ Attribute content parser
@@ -318,7 +324,7 @@ parseAttribute attrName parser =
318324-- @since 1.0.0
319325parseAttributeMaybe
320326 :: (Monad m)
321− => Name
327+ => NameMatcher
322328 -- ^ Attribute name
323329 -> (Text -> Either Text a)
324330 -- ^ Attribute content parser