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

Safe HaskellNone
LanguageHaskell98

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 -> Cursor Source

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

fromNodes :: [Node] -> Maybe Cursor Source

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 -> Node Source

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 -> Node Source

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 Cursor Source

Navigates a Cursor to its parent in the document.

root :: Cursor -> Cursor Source

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

getChild :: Int -> Cursor -> Maybe Cursor Source

Navigates a Cursor down to the indicated child index.

firstChild :: Cursor -> Maybe Cursor Source

Navigates a Cursor down to its first child.

lastChild :: Cursor -> Maybe Cursor Source

Navigates a Cursor down to its last child.

left :: Cursor -> Maybe Cursor Source

Moves a Cursor to its left sibling.

right :: Cursor -> Maybe Cursor Source

Moves a Cursor to its right sibling.

nextDF :: Cursor -> Maybe Cursor Source

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 Cursor Source

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

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

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

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

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

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

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

Node classification

isRoot :: Cursor -> Bool Source

Determines if the Cursor is at a root node.

isFirst :: Cursor -> Bool Source

Determines if the Cursor is at a first child.

isLast :: Cursor -> Bool Source

Determines if the Cursor is at a last child.

isLeaf :: Cursor -> Bool Source

Determines if the Cursor is at a leaf node.

isChild :: Cursor -> Bool Source

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

hasChildren :: Cursor -> Bool Source

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

getNodeIndex :: Cursor -> Int Source

Gets the index of the Cursor among its siblings.

Updates

setNode :: Node -> Cursor -> Cursor Source

Replaces the current node.

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

Modifies the current node by applying a function.

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

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

Insertions

insertLeft :: Node -> Cursor -> Cursor Source

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

insertRight :: Node -> Cursor -> Cursor Source

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

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

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

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

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

insertFirstChild :: Node -> Cursor -> Maybe Cursor Source

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

insertLastChild :: Node -> Cursor -> Maybe Cursor Source

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

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

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

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

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

insertGoLeft :: Node -> Cursor -> Cursor Source

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

insertGoRight :: Node -> Cursor -> Cursor Source

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 Cursor Source

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

removeGoRight :: Cursor -> Maybe Cursor Source

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

removeGoUp :: Cursor -> Maybe Cursor Source

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