xml-1.3.10: A simple XML library.

Portabilityportable
Stabilityprovisional
MaintainerIavor S. Diatchki <diatchki@galois.com>

Text.XML.Light.Cursor

Contents

Description

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.

Synopsis

Documentation

data Tag Source

Constructors

Tag 

Instances

data Cursor Source

The position of a piece of content in an XML document.

Constructors

Cur 

Fields

current :: Content

The currently selected content.

lefts :: [Content]

Siblings on the left, closest first.

rights :: [Content]

Siblings on the right, closest first.

parents :: Path

The contexts of the parent elements of this location.

Instances

type Path = [([Content], Tag, [Content])]Source

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.

toForest :: Cursor -> [Content]Source

Computes the forest containing this location.

toTree :: Cursor -> ContentSource

Computes the tree containing this location.

Moving around

parent :: Cursor -> Maybe CursorSource

The parent of the given location.

root :: Cursor -> CursorSource

The top-most parent of the given location.

getChild :: Int -> Cursor -> Maybe CursorSource

The child with the given index (starting from 0).

firstChild :: Cursor -> Maybe CursorSource

The first child of the given location.

lastChild :: Cursor -> Maybe CursorSource

The last child of the given location.

left :: Cursor -> Maybe CursorSource

The left sibling of the given location.

right :: Cursor -> Maybe CursorSource

The right sibling 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

isRoot :: Cursor -> BoolSource

Are we at the top of the document?

isFirst :: Cursor -> BoolSource

Are we at the left end of the the document?

isLast :: Cursor -> BoolSource

Are we at the right end of the document?

isLeaf :: Cursor -> BoolSource

Are we at the bottom of the document?

isChild :: Cursor -> BoolSource

Do we have a parent?

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.

modifyContent :: (Content -> Content) -> Cursor -> CursorSource

Modify 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.