LibreOffice Module starmath (master) 1
Public Member Functions | Private Attributes | List of all members
SmCaretPosGraphBuildingVisitor Class Referencefinal

A visitor for building a SmCaretPosGraph. More...

#include <visitors.hxx>

Inheritance diagram for SmCaretPosGraphBuildingVisitor:
[legend]
Collaboration diagram for SmCaretPosGraphBuildingVisitor:
[legend]

Public Member Functions

 SmCaretPosGraphBuildingVisitor (SmNode *pRootNode)
 Builds a caret position graph for pRootNode. More...
 
virtual ~SmCaretPosGraphBuildingVisitor ()
 
void Visit (SmTableNode *pNode) override
 Build SmCaretPosGraph for SmTableNode This method covers cases where SmTableNode is used in a binom or stack, the special case where it is used as root node for the entire formula is handled in the constructor. More...
 
void Visit (SmBraceNode *pNode) override
 Build SmCaretPosGraph for SmBraceNode. More...
 
void Visit (SmBracebodyNode *pNode) override
 Build SmCaretPosGraph for SmBracebodyNode Acts as an SmExpressionNode. More...
 
void Visit (SmOperNode *pNode) override
 Build caret position for SmOperNode. More...
 
void Visit (SmAlignNode *pNode) override
 Build SmCaretPosGraph for SmAlignNode Acts as an SmExpressionNode, as it only has one child this okay. More...
 
void Visit (SmAttributeNode *pNode) override
 Build SmCaretPosGraph for SmAttributeNode. More...
 
void Visit (SmFontNode *pNode) override
 
void Visit (SmUnHorNode *pNode) override
 
void Visit (SmBinHorNode *pNode) override
 
void Visit (SmBinVerNode *pNode) override
 Build SmCaretPosGraph for SmBinVerNode. More...
 
void Visit (SmBinDiagonalNode *pNode) override
 Build SmCaretPosGraph for SmBinDiagonalNode. More...
 
void Visit (SmSubSupNode *pNode) override
 Build SmCaretPosGraph for SmSubSupNode. More...
 
void Visit (SmMatrixNode *pNode) override
 
void Visit (SmPlaceNode *pNode) override
 Build SmCaretPosGraph for SmPlaceNode Consider this a single character. More...
 
void Visit (SmTextNode *pNode) override
 Build SmCaretPosGraph for SmTextNode. More...
 
void Visit (SmSpecialNode *pNode) override
 
void Visit (SmGlyphSpecialNode *pNode) override
 
void Visit (SmMathSymbolNode *pNode) override
 
void Visit (SmBlankNode *pNode) override
 Build SmCaretPosGraph for SmBlankNode Consider this a single character, as it is only a blank space. More...
 
void Visit (SmErrorNode *pNode) override
 SmErrorNode is context dependent metadata, it can't be selected. More...
 
void Visit (SmLineNode *pNode) override
 
void Visit (SmExpressionNode *pNode) override
 
void Visit (SmPolyLineNode *pNode) override
 
void Visit (SmRootNode *pNode) override
 Build SmCaretPosGraph for SmRootNode. More...
 
void Visit (SmRootSymbolNode *pNode) override
 
void Visit (SmRectangleNode *pNode) override
 
void Visit (SmVerticalBraceNode *pNode) override
 Build SmCaretPosGraph for SmVerticalBraceNode. More...
 
SmCaretPosGraphtakeGraph ()
 
virtual void Visit (SmTableNode *pNode)=0
 
virtual void Visit (SmBraceNode *pNode)=0
 
virtual void Visit (SmBracebodyNode *pNode)=0
 
virtual void Visit (SmOperNode *pNode)=0
 
virtual void Visit (SmAlignNode *pNode)=0
 
virtual void Visit (SmAttributeNode *pNode)=0
 
virtual void Visit (SmFontNode *pNode)=0
 
virtual void Visit (SmUnHorNode *pNode)=0
 
virtual void Visit (SmBinHorNode *pNode)=0
 
virtual void Visit (SmBinVerNode *pNode)=0
 
virtual void Visit (SmBinDiagonalNode *pNode)=0
 
virtual void Visit (SmSubSupNode *pNode)=0
 
virtual void Visit (SmMatrixNode *pNode)=0
 
virtual void Visit (SmPlaceNode *pNode)=0
 
virtual void Visit (SmTextNode *pNode)=0
 
virtual void Visit (SmSpecialNode *pNode)=0
 
virtual void Visit (SmGlyphSpecialNode *pNode)=0
 
virtual void Visit (SmMathSymbolNode *pNode)=0
 
virtual void Visit (SmBlankNode *pNode)=0
 
virtual void Visit (SmErrorNode *pNode)=0
 
virtual void Visit (SmLineNode *pNode)=0
 
virtual void Visit (SmExpressionNode *pNode)=0
 
virtual void Visit (SmPolyLineNode *pNode)=0
 
virtual void Visit (SmRootNode *pNode)=0
 
virtual void Visit (SmRootSymbolNode *pNode)=0
 
virtual void Visit (SmRectangleNode *pNode)=0
 
virtual void Visit (SmVerticalBraceNode *pNode)=0
 

Private Attributes

SmCaretPosGraphEntrympRightMost
 
std::unique_ptr< SmCaretPosGraphmpGraph
 

Additional Inherited Members

- Protected Member Functions inherited from SmVisitor
 ~SmVisitor ()
 

Detailed Description

A visitor for building a SmCaretPosGraph.

Visit invariant: Each pNode, except SmExpressionNode, SmBinHorNode and a few others, constitutes an entry in a line. Consider the line entry "H", this entry creates one carat position, here denoted by | in "H|".

Parameter variables: The following variables are used to transfer parameters into calls and results out of calls. pRightMost : SmCaretPosGraphEntry*

Prior to a Visit call: pRightMost: A pointer to right most position in front of the current line entry.

After a Visit call: pRightMost: A pointer to the right most position in the called line entry, if no there's no caret positions in called line entry don't change this variable.

Definition at line 334 of file visitors.hxx.

Constructor & Destructor Documentation

◆ SmCaretPosGraphBuildingVisitor()

SmCaretPosGraphBuildingVisitor::SmCaretPosGraphBuildingVisitor ( SmNode pRootNode)
explicit

Builds a caret position graph for pRootNode.

Definition at line 759 of file visitors.cxx.

References SmNode::Accept(), SmNode::GetType(), mpGraph, mpRightMost, SAL_WARN_IF, and Table.

◆ ~SmCaretPosGraphBuildingVisitor()

SmCaretPosGraphBuildingVisitor::~SmCaretPosGraphBuildingVisitor ( )
virtual

Definition at line 781 of file visitors.cxx.

Member Function Documentation

◆ takeGraph()

SmCaretPosGraph * SmCaretPosGraphBuildingVisitor::takeGraph ( )
inline

Definition at line 367 of file visitors.hxx.

References mpGraph.

◆ Visit() [1/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmAlignNode pNode)
overridevirtual

Build SmCaretPosGraph for SmAlignNode Acts as an SmExpressionNode, as it only has one child this okay.

Implements SmVisitor.

Definition at line 1287 of file visitors.cxx.

◆ Visit() [2/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmAttributeNode pNode)
overridevirtual

Build SmCaretPosGraph for SmAttributeNode.

Lines in an SmAttributeNode:

css::uno::Reference< css::i18n::XExtendedTransliteration > Body

There's a body and an attribute, the construction is used for "widehat A", where "A" is the body and "^" is the attribute ( note GetScaleMode( ) on SmAttributeNode tells how the attribute should be scaled ).

Implements SmVisitor.

Definition at line 1438 of file visitors.cxx.

References SmNode::Accept(), SmAttributeNode::Attribute(), SmAttributeNode::Body(), left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [3/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBinDiagonalNode pNode)
overridevirtual

Build SmCaretPosGraph for SmBinDiagonalNode.

Lines in an SmBinDiagonalNode:

A /
/
/ B
const sal_uInt8 A

Where A and B are lines.

Used in formulas such as "A wideslash B"

Implements SmVisitor.

Definition at line 1151 of file visitors.cxx.

References A, B, SmStructureNode::GetSubNode(), left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [4/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBinHorNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1190 of file visitors.cxx.

◆ Visit() [5/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBinVerNode pNode)
overridevirtual

Build SmCaretPosGraph for SmBinVerNode.

Lines in an SmBinVerNode:

A
-----
B

Graph over these, where "left" is before the SmBinVerNode and "right" is after:

Implements SmVisitor.

Definition at line 1054 of file visitors.cxx.

References SmNode::Accept(), SmStructureNode::GetSubNode(), left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [6/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBlankNode pNode)
overridevirtual

Build SmCaretPosGraph for SmBlankNode Consider this a single character, as it is only a blank space.

Implements SmVisitor.

Definition at line 1381 of file visitors.cxx.

References mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [7/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBracebodyNode pNode)
overridevirtual

Build SmCaretPosGraph for SmBracebodyNode Acts as an SmExpressionNode.

Below is an example of a formula tree that has multiple children for SmBracebodyNode

Implements SmVisitor.

Definition at line 1271 of file visitors.cxx.

References mpGraph, mpRightMost, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [8/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmBraceNode pNode)
overridevirtual

Build SmCaretPosGraph for SmBraceNode.

Lines in an SmBraceNode:

| |
| B |
| |

B: Body

Graph over these, where "left" is before the SmBraceNode and "right" is after:

Implements SmVisitor.

Definition at line 1406 of file visitors.cxx.

References SmNode::Accept(), SmBraceNode::Body(), Bracebody, SmNode::GetType(), left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [9/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmErrorNode pNode)
overridevirtual

SmErrorNode is context dependent metadata, it can't be selected.

Remarks
There's no point in deleting, copying and/or moving an instance of SmErrorNode as it may not exist in another context! Thus there are no positions to select an SmErrorNode.

Implements SmVisitor.

Definition at line 1374 of file visitors.cxx.

◆ Visit() [10/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmExpressionNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1210 of file visitors.cxx.

◆ Visit() [11/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmFontNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1220 of file visitors.cxx.

◆ Visit() [12/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmGlyphSpecialNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1484 of file visitors.cxx.

References mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [13/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmLineNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 785 of file visitors.cxx.

◆ Visit() [14/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmMathSymbolNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1490 of file visitors.cxx.

References mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [15/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmMatrixNode pNode)
overridevirtual

◆ Visit() [16/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmOperNode pNode)
overridevirtual

Build caret position for SmOperNode.

If first child is an SmSubSupNode we will ignore its body, as this body is a SmMathSymbol, for SUM, INT or similar that shouldn't be subject to modification. If first child is not a SmSubSupNode, ignore it completely as it is a SmMathSymbol.

The child positions in a SmOperNode, where H is symbol, e.g. int, sum or similar:

LSUP H H RSUP BBB BB BBB B B
H H B B B B B B B B
HHHH BBB B B B B B
H H B B B B B B B
LSUB H H RSUB BBB BB BBB B
FROM
@ LSUB
Definition: node.hxx:1536
@ RSUP
Definition: node.hxx:1536
@ RSUB
Definition: node.hxx:1536
@ LSUP
Definition: node.hxx:1536
TO

Notice, CSUP, etc. are actually grandchildren, but inorder to ignore H, these are visited from here. If they are present, that is if pOper is an instance of SmSubSupNode.

Graph over these, where "left" is before the SmOperNode and "right" is after:

Implements SmVisitor.

Definition at line 931 of file visitors.cxx.

References SmNode::Accept(), CSUB, CSUP, SmStructureNode::GetSubNode(), SmSubSupNode::GetSubSup(), SmNode::GetType(), left, LSUB, LSUP, mpGraph, mpRightMost, right, RSUB, RSUP, SmCaretPosGraphEntry::SetRight(), and SubSup.

◆ Visit() [17/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmPlaceNode pNode)
overridevirtual

Build SmCaretPosGraph for SmPlaceNode Consider this a single character.

Implements SmVisitor.

Definition at line 1361 of file visitors.cxx.

References mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [18/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmPolyLineNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1506 of file visitors.cxx.

◆ Visit() [19/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmRectangleNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1502 of file visitors.cxx.

◆ Visit() [20/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmRootNode pNode)
overridevirtual

Build SmCaretPosGraph for SmRootNode.

Lines in an SmRootNode:

_________
A/
\/ B

A: pExtra ( optional, can be NULL ), B: pBody

Graph over these, where "left" is before the SmRootNode and "right" is after:

Implements SmVisitor.

Definition at line 1318 of file visitors.cxx.

References SmNode::Accept(), SmStructureNode::GetSubNode(), left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [21/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmRootSymbolNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1497 of file visitors.cxx.

◆ Visit() [22/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmSpecialNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1478 of file visitors.cxx.

References mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [23/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmSubSupNode pNode)
overridevirtual

Build SmCaretPosGraph for SmSubSupNode.

The child positions in a SubSupNode, where H is the body:

H H
HHHH
H H
@ CSUB
Definition: node.hxx:1536
@ CSUP
Definition: node.hxx:1536

Graph over these, where "left" is before the SmSubSupNode and "right" is after:

Implements SmVisitor.

Definition at line 849 of file visitors.cxx.

References SmNode::Accept(), CSUB, CSUP, SmSubSupNode::GetBody(), SmSubSupNode::GetSubSup(), left, LSUB, LSUP, mpGraph, mpRightMost, right, RSUB, RSUP, SAL_WARN_IF, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [24/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmTableNode pNode)
overridevirtual

Build SmCaretPosGraph for SmTableNode This method covers cases where SmTableNode is used in a binom or stack, the special case where it is used as root node for the entire formula is handled in the constructor.

Implements SmVisitor.

Definition at line 799 of file visitors.cxx.

References left, mpGraph, mpRightMost, right, and SmCaretPosGraphEntry::SetRight().

◆ Visit() [25/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmTextNode pNode)
overridevirtual

Build SmCaretPosGraph for SmTextNode.

Lines in an SmTextNode:

A B C
#define C

Where A B and C are characters in the text.

Graph over these, where "left" is before the SmTextNode and "right" is after:

Notice that C and right is the same position here.

Implements SmVisitor.

Definition at line 1024 of file visitors.cxx.

References SmTextNode::GetText(), i, mpGraph, mpRightMost, SAL_WARN_IF, SmCaretPosGraphEntry::SetRight(), and size.

◆ Visit() [26/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmUnHorNode pNode)
overridevirtual

Implements SmVisitor.

Definition at line 1199 of file visitors.cxx.

◆ Visit() [27/27]

void SmCaretPosGraphBuildingVisitor::Visit ( SmVerticalBraceNode pNode)
overridevirtual

Member Data Documentation

◆ mpGraph

std::unique_ptr<SmCaretPosGraph> SmCaretPosGraphBuildingVisitor::mpGraph
private

Definition at line 373 of file visitors.hxx.

Referenced by SmCaretPosGraphBuildingVisitor(), takeGraph(), and Visit().

◆ mpRightMost

SmCaretPosGraphEntry* SmCaretPosGraphBuildingVisitor::mpRightMost
private

Definition at line 372 of file visitors.hxx.

Referenced by SmCaretPosGraphBuildingVisitor(), and Visit().


The documentation for this class was generated from the following files: