@@ -3,13 +3,13 @@
3-----------------------------------------------------------------------------
3-----------------------------------------------------------------------------
5-- Module : Text.XML.Lens
5-- Module : Text.XML.Lens
6−-- Copyright : (C) 2013 Fumiaki Kinoshita
6+-- Copyright : (C) 2015 Fumiaki Kinoshita
7-- License : BSD-style (see the file LICENSE)
7-- License : BSD-style (see the file LICENSE)
9-- Maintainer : Fumiaki Kinoshita <fumiexcel@gmail.com>
9-- Maintainer : Fumiaki Kinoshita <fumiexcel@gmail.com>
10−-- Stability : experimental
10+-- Stability : provisional
11-- Portability : non-portable
11-- Portability : non-portable
12−-- Useful traversals inspired by XPath
12+--
13----------------------------------------------------------------------------
13----------------------------------------------------------------------------
14module Text.XML.Lens (
14module Text.XML.Lens (
15 -- * Lenses, traversals for 'Element'
15 -- * Lenses, traversals for 'Element'
@@ -62,6 +62,7 @@ import Control.Lens
62import Data.Text (Text)
62import Data.Text (Text)
63import Data.Map (Map)
63import Data.Map (Map)
64import Control.Applicative
64import Control.Applicative
65+import Data.CaseInsensitive as CI
66infixr 9 ./
67infixr 9 ./
@@ -153,14 +154,15 @@ entire :: Traversal' Element Element
153entire f e@(Element _ _ ns) = com <$> f e <*> traverse (_Element (entire f)) ns where
154entire f e@(Element _ _ ns) = com <$> f e <*> traverse (_Element (entire f)) ns where
154 com (Element n a _) = Element n a
155 com (Element n a _) = Element n a
156−-- | Traverse elements which has the specified *local* name.
157+-- | Traverse elements which has the specified *local* name (case-insensitive).
157−named :: Text -> Traversal' Element Element
158+named :: CI.CI Text -> Traversal' Element Element
158named n f s
159named n f s
159− | nameLocalName (elementName s) == n = f s
160+ | CI.mk (nameLocalName (elementName s)) == n = f s
160 | otherwise = pure s
161 | otherwise = pure s
163+-- | Old name for 'named'
162ell :: Text -> Traversal' Element Element
164ell :: Text -> Traversal' Element Element
163−ell = named
165+ell = named . CI.mk
165-- | Traverse elements which has the specified name.
167-- | Traverse elements which has the specified name.
166el :: Name -> Traversal' Element Element
168el :: Name -> Traversal' Element Element
@@ -182,10 +184,11 @@ text = nodes . traverse . _Content
182comment :: Traversal' Element Text
184comment :: Traversal' Element Text
183comment = nodes . traverse . _Comment
185comment = nodes . traverse . _Comment
187+-- | 'plate' traverses over its sub-elements.
185instance Plated Element where
188instance Plated Element where
186 plate = nodes . traverse . _Element
189 plate = nodes . traverse . _Element
188−-- | Combine two 'Traversal's just like XPath's slash.
191+-- | Combine two 'Traversal's just like XPath's slash. Identical to ('...').
191-- l ./ m ≡ l . 'plate' . m
194-- l ./ m ≡ l . 'plate' . m