Portability | portable |
---|---|
Stability | provisional |
Maintainer | Iavor S. Diatchki <diatchki@galois.com> |
Safe Haskell | Safe-Inferred |
XML cursors for working XML content withing the context of an XML document. This implementation is based on the general tree zipper written by Krasimir Angelov and Iavor S. Diatchki.
- data Tag = Tag {}
- getTag :: Element -> Tag
- setTag :: Tag -> Element -> Element
- fromTag :: Tag -> [Content] -> Element
- data Cursor = Cur {}
- type Path = [([Content], Tag, [Content])]
- fromContent :: Content -> Cursor
- fromElement :: Element -> Cursor
- fromForest :: [Content] -> Maybe Cursor
- toForest :: Cursor -> [Content]
- toTree :: Cursor -> Content
- parent :: Cursor -> Maybe Cursor
- root :: Cursor -> Cursor
- getChild :: Int -> Cursor -> Maybe Cursor
- firstChild :: Cursor -> Maybe Cursor
- lastChild :: Cursor -> Maybe Cursor
- left :: Cursor -> Maybe Cursor
- right :: Cursor -> Maybe Cursor
- nextDF :: Cursor -> Maybe Cursor
- findChild :: (Cursor -> Bool) -> Cursor -> Maybe Cursor
- findLeft :: (Cursor -> Bool) -> Cursor -> Maybe Cursor
- findRight :: (Cursor -> Bool) -> Cursor -> Maybe Cursor
- findRec :: (Cursor -> Bool) -> Cursor -> Maybe Cursor
- isRoot :: Cursor -> Bool
- isFirst :: Cursor -> Bool
- isLast :: Cursor -> Bool
- isLeaf :: Cursor -> Bool
- isChild :: Cursor -> Bool
- hasChildren :: Cursor -> Bool
- getNodeIndex :: Cursor -> Int
- setContent :: Content -> Cursor -> Cursor
- modifyContent :: (Content -> Content) -> Cursor -> Cursor
- modifyContentM :: Monad m => (Content -> m Content) -> Cursor -> m Cursor
- insertLeft :: Content -> Cursor -> Cursor
- insertRight :: Content -> Cursor -> Cursor
- insertGoLeft :: Content -> Cursor -> Cursor
- insertGoRight :: Content -> Cursor -> Cursor
- removeLeft :: Cursor -> Maybe (Content, Cursor)
- removeRight :: Cursor -> Maybe (Content, Cursor)
- removeGoLeft :: Cursor -> Maybe Cursor
- removeGoRight :: Cursor -> Maybe Cursor
- removeGoUp :: Cursor -> Maybe Cursor
Documentation
The position of a piece of content in an XML document.
Conversions
fromContent :: Content -> CursorSource
A cursor for the given content.
fromElement :: Element -> CursorSource
A cursor for the given element.
fromForest :: [Content] -> Maybe CursorSource
The location of the first tree in a forest.
Moving around
firstChild :: Cursor -> Maybe CursorSource
The first child of the given location.
nextDF :: Cursor -> Maybe CursorSource
The next position in a left-to-right depth-first traversal of a document: either the first child, right sibling, or the right sibling of a parent that has one.
Searching
findChild :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource
The first child that satisfies a predicate.
findLeft :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource
Find the next left sibling that satisfies a predicate.
findRight :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource
Find the next right sibling that satisfies a predicate.
findRec :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource
Perform a depth first search for a descendant that satisfies the given predicate.
Node classification
hasChildren :: Cursor -> BoolSource
Do we have children?
getNodeIndex :: Cursor -> IntSource
Get the node index inside the sequence of children
Updates
setContent :: Content -> Cursor -> CursorSource
Change the current content.
modifyContentM :: Monad m => (Content -> m Content) -> Cursor -> m CursorSource
Modify the current content, allowing for an effect.
Inserting content
insertLeft :: Content -> Cursor -> CursorSource
Insert content to the left of the current position.
insertRight :: Content -> Cursor -> CursorSource
Insert content to the right of the current position.
insertGoLeft :: Content -> Cursor -> CursorSource
Insert content to the left of the current position. The new content becomes the current position.
insertGoRight :: Content -> Cursor -> CursorSource
Insert content to the right of the current position. The new content becomes the current position.
Removing content
removeLeft :: Cursor -> Maybe (Content, Cursor)Source
Remove the content on the left of the current position, if any.
removeRight :: Cursor -> Maybe (Content, Cursor)Source
Remove the content on the right of the current position, if any.
removeGoLeft :: Cursor -> Maybe CursorSource
Remove the current element. The new position is the one on the left.
removeGoRight :: Cursor -> Maybe CursorSource
Remove the current element. The new position is the one on the right.
removeGoUp :: Cursor -> Maybe CursorSource
Remove the current element. The new position is the parent of the old position.