Rich text editing api. These allow you to manipulate the meta data of the current element and add new elements. They will modify the current selection if there is one and will splice one in if needed.
Text search api. They manipulate the selection and/or caret.
exact = true means return null if no match. otherwise, get the closest one that makes sense for a mouse click.
Plain text editing api. These work at the current caret inside the selected inline element.
Caret movement api These should give the user a logical result based on what they see on screen... thus they locate predominately by *pixels* not char index. (These will generally coincide with monospace fonts tho!)
Call this if the inputs change. It will reflow everything
Selection API. See also: caret movement.