21#include "basicelement.h"
22#include "elementtype.h"
23#include "sequenceparser.h"
24#include "symboltable.h"
25#include "textelement.h"
28KFORMULA_NAMESPACE_BEGIN
31SequenceParser::SequenceParser(
const SymbolTable& t )
32 : tokenStart( 0 ), tokenEnd( 0 ), type( SEQUENCE ),
33 binOpAllowed( false ), table( t )
40 list.at( pos )->setElementType( type );
53 tokenStart = tokenEnd;
54 if ( tokenStart >= list.count() ) {
61 if ( type == SEPARATOR ) {
62 if ( tokenEnd < list.count() ) {
63 TQChar ch = getEndChar();
76 else if ( type == ORDINARY ) {
79 else if ( type == NUMBER ) {
82 if ( !binOpAllowed && ( type == BINOP ) ) {
85 binOpAllowed = ( type == ORDINARY ) || ( type == NUMBER ) || ( type == NAME ) ||
86 ( type == ELEMENT ) || ( type == BRACKET ) || ( type == INNER );
93void SequenceParser::readNumber()
97 if ( tokenEnd < list.count()-1 ) {
98 TQChar ch = getEndChar();
104 if ( ch.isNumber() ) {
114 if ( tokenEnd < list.count()-1 ) {
115 BasicElement* element = list.at(tokenEnd);
118 ( ( ch ==
'E' ) || ( ch ==
'e' ) ) ) {
123 if ( ( ( ch ==
'+' ) || ( ch ==
'-' ) ) &&
124 ( tokenEnd < list.count()-1 ) ) {
127 if ( ch.isNumber() ) {
135 else if ( ch.isNumber() ) {
147void SequenceParser::readDigits()
149 for ( ; tokenEnd < list.count(); tokenEnd++ ) {
150 TQChar ch = getEndChar();
151 if ( !ch.isNumber() ) {
158void SequenceParser::readText()
160 BasicElement* element = list.at( tokenStart );
161 TextElement* beginText =
static_cast<TextElement*
>( element );
166 char format = beginText->format();
168 for ( ; tokenEnd < list.count(); tokenEnd++ ) {
169 element = list.at( tokenEnd );
171 if ( ( ( tt != ORDINARY ) ||
176 if (
static_cast<TextElement*
>( element )->format() != format ) {
179 if (
static_cast<TextElement*
>( element )->isSymbol() ) {
185TQChar SequenceParser::getEndChar()
187 BasicElement* element = list.at( tokenEnd );
211 return new ComplexElementType(
this );
213 return new InnerElementType(
this );
215 return new OperatorType(
this );
217 return new RelationType(
this );
219 return new PunctuationType(
this );
221 return new BracketType(
this );
234 for ( uint i = tokenStart; i < tokenEnd; i++ ) {
241KFORMULA_NAMESPACE_END
Basis of every formula element.
virtual TQChar getCharacter() const
virtual TokenType getTokenType() const
A range of elements that make up a number.
void nextToken()
Reads the next token.
ElementType * parse(TQPtrList< BasicElement > &elements)
ElementType * getPrimitive()
void setElementType(uint pos, ElementType *type)
Tells the element about its new type.
The token that belongs to a sequence.
virtual TQChar getCharacter() const
bool isSymbol() const
Moves the cursor away from the given child.
A text element that doesn't belong to an name.