xmlhtml-0.2.3: XML parser and renderer with HTML 5 quirks mode

Safe HaskellNone

Text.XmlHtml.Cursor

Contents

Description

A zipper for navigating and modifying XML trees. This is nearly the same exposed interface as the xml package in Text.XML.Light.Cursor, with modifications as needed to adapt to different types.

Synopsis

Cursor type

data Cursor Source

A zipper for XML document forests.

Instances

Conversion to and from cursors

fromNode :: Node -> CursorSource

Builds a Cursor for navigating a tree. That is, a forest with a single root Node.

fromNodes :: [Node] -> Maybe CursorSource

Builds a Cursor for navigating a forest with the given list of roots. The cursor is initially positioned at the left-most node. Gives Nothing if the list is empty.

topNode :: Cursor -> NodeSource

Retrieves the root node containing the current cursor position.

topNodes :: Cursor -> [Node]Source

Retrieves the entire forest of Nodes corresponding to a Cursor.

current :: Cursor -> NodeSource

Retrieves the current node of a Cursor

siblings :: Cursor -> [Node]Source

Retrieves a list of the Nodes at the same level as the current position of a cursor, including the current node.

Cursor navigation

parent :: Cursor -> Maybe CursorSource

Navigates a Cursor to its parent in the document.

root :: Cursor -> CursorSource

Navigates a Cursor up through parents to reach the root level.

getChild :: Int -> Cursor -> Maybe CursorSource

Navigates a Cursor down to the indicated child index.

firstChild :: Cursor -> Maybe CursorSource

Navigates a Cursor down to its first child.

lastChild :: Cursor -> Maybe CursorSource

Navigates a Cursor down to its last child.

left :: Cursor -> Maybe CursorSource

Moves a Cursor to its left sibling.

right :: Cursor -> Maybe CursorSource

Moves a Cursor to its right sibling.

nextDF :: Cursor -> Maybe CursorSource

Moves a Cursor to the next node encountered in a depth-first search. If it has children, this is equivalent to firstChild. Otherwise, if it has a right sibling, then this is equivalent to right. Otherwise, the cursor moves to the first right sibling of one of its parents.

Search

findChild :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource

Navigates a Cursor to the first child that matches the predicate.

findLeft :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource

Navigates a Cursor to the nearest left sibling that matches a predicate.

findRight :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource

Navigates a Cursor to the nearest right sibling that matches a predicate.

findRec :: (Cursor -> Bool) -> Cursor -> Maybe CursorSource

Does a depth-first search for a descendant matching the predicate. This can match the current cursor position.

Node classification

isRoot :: Cursor -> BoolSource

Determines if the Cursor is at a root node.

isFirst :: Cursor -> BoolSource

Determines if the Cursor is at a first child.

isLast :: Cursor -> BoolSource

Determines if the Cursor is at a last child.

isLeaf :: Cursor -> BoolSource

Determines if the Cursor is at a leaf node.

isChild :: Cursor -> BoolSource

Determines if the Cursor is at a child node (i.e., if it has a parent).

hasChildren :: Cursor -> BoolSource

Determines if the Cursor is at a non-leaf node (i.e., if it has children).

getNodeIndex :: Cursor -> IntSource

Gets the index of the Cursor among its siblings.

Updates

setNode :: Node -> Cursor -> CursorSource

Replaces the current node.

modifyNode :: (Node -> Node) -> Cursor -> CursorSource

Modifies the current node by applying a function.

modifyNodeM :: Functor m => (Node -> m Node) -> Cursor -> m CursorSource

Modifies the current node by applying an action in some functor.

Insertions

insertLeft :: Node -> Cursor -> CursorSource

Inserts a new Node to the left of the current position.

insertRight :: Node -> Cursor -> CursorSource

Inserts a new Node to the right of the current position.

insertManyLeft :: [Node] -> Cursor -> CursorSource

Inserts a list of new Nodes to the left of the current position.

insertManyRight :: [Node] -> Cursor -> CursorSource

Inserts a list of new Nodes to the right of the current position.

insertFirstChild :: Node -> Cursor -> Maybe CursorSource

Inserts a Node as the first child of the current element.

insertLastChild :: Node -> Cursor -> Maybe CursorSource

Inserts a Node as the last child of the current element.

insertManyFirstChild :: [Node] -> Cursor -> Maybe CursorSource

Inserts a list of Nodes as the first children of the current element.

insertManyLastChild :: [Node] -> Cursor -> Maybe CursorSource

Inserts a list of Nodes as the last children of the current element.

insertGoLeft :: Node -> Cursor -> CursorSource

Inserts a new Node to the left of the current position, and moves left to the new node.

insertGoRight :: Node -> Cursor -> CursorSource

Inserts a new Node to the right of the current position, and moves right to the new node.

Deletions

removeLeft :: Cursor -> Maybe (Node, Cursor)Source

Removes the Node to the left of the current position, if any.

removeRight :: Cursor -> Maybe (Node, Cursor)Source

Removes the Node to the right of the current position, if any.

removeGoLeft :: Cursor -> Maybe CursorSource

Removes the current Node, and moves the Cursor to its left sibling, if any.

removeGoRight :: Cursor -> Maybe CursorSource

Removes the current Node, and moves the Cursor to its right sibling, if any.

removeGoUp :: Cursor -> Maybe CursorSource

Removes the current Node, and moves the Cursor to its parent, if any.