summaryrefslogtreecommitdiffstats
path: root/lib/kformula/kformuladefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kformula/kformuladefs.h')
-rw-r--r--lib/kformula/kformuladefs.h430
1 files changed, 430 insertions, 0 deletions
diff --git a/lib/kformula/kformuladefs.h b/lib/kformula/kformuladefs.h
new file mode 100644
index 00000000..d42d0b16
--- /dev/null
+++ b/lib/kformula/kformuladefs.h
@@ -0,0 +1,430 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Andrea Rizzi <rizzi@kde.org>
+ Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef FORMULADEFS_H
+#define FORMULADEFS_H
+
+#include <memory>
+
+#include <qpoint.h>
+#include <qrect.h>
+#include <qstring.h>
+
+#include <KoPoint.h>
+#include <KoRect.h>
+
+
+#define KFORMULA_NAMESPACE_BEGIN namespace KFormula {
+#define KFORMULA_NAMESPACE_END }
+
+KFORMULA_NAMESPACE_BEGIN
+
+const int DEBUGID = 40000;
+
+// to make kdDebug a litte more interessting...
+//#define TERM_RESET ""
+//#define TERM_ERROR ""
+
+/**
+ * The type to be used for points.
+ */
+typedef double pt;
+typedef KoPoint PtPoint;
+typedef KoRect PtRect;
+//typedef KoSize PtSize;
+
+/**
+ * Pixels. At any zoom level.
+ */
+typedef int pixel;
+typedef QPoint PixelPoint;
+typedef QRect PixelRect;
+//typedef QSize PixelSize;
+
+/**
+ * Layout Unit. That's the values we store to get
+ * wysiwyg right.
+ */
+typedef int luPt;
+typedef QPoint LuPtPoint;
+typedef QRect LuPtRect;
+typedef QSize LuPtSize;
+
+typedef int luPixel;
+typedef QPoint LuPixelPoint;
+typedef QRect LuPixelRect;
+typedef QSize LuPixelSize;
+
+
+/**
+ * The symbols that are supported by our artwork.
+ */
+enum SymbolType {
+ LeftSquareBracket = '[',
+ RightSquareBracket = ']',
+ LeftCurlyBracket = '{',
+ RightCurlyBracket = '}',
+ LeftCornerBracket = '<',
+ RightCornerBracket = '>',
+ LeftRoundBracket = '(',
+ RightRoundBracket = ')',
+ SlashBracket = '/',
+ BackSlashBracket = '\\',
+ LeftLineBracket = 256,
+ RightLineBracket,
+ EmptyBracket = 1000,
+ Integral,
+ Sum,
+ Product
+};
+
+
+/**
+ * Flag for cursor movement functions.
+ * Select means move selecting the text (usually Shift key)
+ * Word means move by whole words (usually Control key)
+ */
+enum MoveFlag { NormalMovement = 0, SelectMovement = 1, WordMovement = 2 };
+
+inline MoveFlag movementFlag( int state )
+{
+ int flag = NormalMovement;
+ if ( state & Qt::ControlButton )
+ flag |= WordMovement;
+ if ( state & Qt::ShiftButton )
+ flag |= SelectMovement;
+ return static_cast<MoveFlag>( flag );
+}
+
+
+
+/**
+ * TeX like char classes
+ */
+enum CharClass {
+ ORDINARY = 0,
+ BINOP = 1,
+ RELATION = 2,
+ PUNCTUATION = 3,
+
+ NUMBER, NAME, ELEMENT, INNER, BRACKET, SEQUENCE, SEPARATOR, END
+};
+
+typedef CharClass TokenType;
+
+
+// there are four bits needed to store this
+enum CharStyle {
+ normalChar,
+ boldChar,
+ italicChar,
+ boldItalicChar, // is required to be (boldChar | italicChar)!
+ //slantChar,
+ anyChar
+};
+
+
+enum CharFamily {
+ normalFamily,
+ scriptFamily,
+ frakturFamily,
+ doubleStruckFamily,
+ sansSerifFamily, // TODO: Currently unsupported
+ monospaceFamily, // TODO: Currently unsupported
+ anyFamily
+};
+
+enum TokenElementType {
+ identifierElement,
+ operatorElement,
+ numberElement,
+ textElement,
+ anyElement
+};
+
+/**
+ * The struct used to store static font data.
+ */
+struct InternFontTable {
+ short unicode;
+ QChar pos;
+ CharClass cl;
+ CharStyle style;
+};
+
+
+/**
+ * Wether we want to insert to the left of the cursor
+ * or right of it.
+ * The same for deletion.
+ */
+enum Direction { beforeCursor, afterCursor };
+
+/**
+ * The types of space we know.
+ */
+enum SpaceWidth { THIN, MEDIUM, THICK, QUAD, NEGTHIN };
+
+/**
+ * The types of MathML horizontal or vertical sizes we know
+ */
+enum SizeType {
+ NoSize,
+ AutoSize,
+ FitSize,
+ InfinitySize,
+ RelativeSize,
+ AbsoluteSize,
+ PixelSize,
+ NegativeVeryVeryThinMathSpace,
+ NegativeVeryThinMathSpace,
+ NegativeThinMathSpace,
+ NegativeMediumMathSpace,
+ NegativeThickMathSpace,
+ NegativeVeryThickMathSpace,
+ NegativeVeryVeryThickMathSpace,
+ VeryVeryThinMathSpace,
+ VeryThinMathSpace,
+ ThinMathSpace,
+ MediumMathSpace,
+ ThickMathSpace,
+ VeryThickMathSpace,
+ VeryVeryThickMathSpace
+};
+
+/**
+ * The types of horizontal align
+ */
+enum HorizontalAlign {
+ NoHorizontalAlign,
+ LeftHorizontalAlign,
+ CenterHorizontalAlign,
+ RightHorizontalAlign
+};
+
+/**
+ * Type of forms in operators
+ */
+enum FormType { NoForm, PrefixForm, InfixForm, PostfixForm };
+
+/**
+ * each index has its own number.
+ */
+enum IndexPosition {
+ upperLeftPos,
+ lowerLeftPos,
+ upperMiddlePos,
+ contentPos,
+ lowerMiddlePos,
+ upperRightPos,
+ lowerRightPos,
+ parentPos
+};
+
+
+class BasicElement;
+class FormulaCursor;
+
+/**
+ * A type that describes an index. You can get one of those
+ * for each index from an element that owns indexes.
+ *
+ * This type is used to work on indexes in a generic way.
+ */
+class ElementIndex {
+public:
+
+ virtual ~ElementIndex() { /*cerr << "ElementIndex destroyed.\n";*/ }
+
+ /**
+ * Moves the cursor inside the index. The index has to exist.
+ */
+ virtual void moveToIndex(FormulaCursor*, Direction) = 0;
+
+ /**
+ * Sets the cursor to point to the place where the index normaly
+ * is. These functions are only used if there is no such index and
+ * we want to insert them.
+ */
+ virtual void setToIndex(FormulaCursor*) = 0;
+
+ /**
+ * Tells whether we own those indexes.
+ */
+ virtual bool hasIndex() const = 0;
+
+ /**
+ * Tells to which element the index belongs.
+ */
+ virtual BasicElement* getElement() = 0;
+};
+
+typedef std::auto_ptr<ElementIndex> ElementIndexPtr;
+
+enum RequestID {
+ req_addBracket,
+ req_addOverline,
+ req_addUnderline,
+ req_addFraction,
+ req_addIndex,
+ req_addMatrix,
+ req_addMultiline,
+ req_addNameSequence,
+ req_addNewline,
+ req_addOneByTwoMatrix,
+ req_addRoot,
+ req_addSpace,
+ req_addSymbol,
+ req_addTabMark,
+ req_addText,
+ req_addTextChar,
+ req_addOperator,
+ req_addNumber,
+ req_addEmptyBox,
+ req_appendColumn,
+ req_appendRow,
+ req_compactExpression,
+ req_copy,
+ req_cut,
+ req_insertColumn,
+ req_insertRow,
+ req_makeGreek,
+ req_paste,
+ req_remove,
+ req_removeEnclosing,
+ req_removeColumn,
+ req_removeRow,
+ req_formatBold,
+ req_formatItalic,
+ req_formatFamily,
+ req_formatTokenElement
+};
+
+
+class Request {
+ RequestID id;
+public:
+ Request( RequestID _id ) : id( _id ) {}
+ virtual ~Request() {}
+ operator RequestID() const { return id;}
+};
+
+
+class BracketRequest : public Request {
+ SymbolType m_left, m_right;
+public:
+ BracketRequest( SymbolType l, SymbolType r ) : Request( req_addBracket ), m_left( l ), m_right( r ) {}
+ SymbolType left() const { return m_left; }
+ SymbolType right() const { return m_right; }
+};
+
+class SymbolRequest : public Request {
+ SymbolType m_type;
+public:
+ SymbolRequest( SymbolType t ) : Request( req_addSymbol ), m_type( t ) {}
+ SymbolType type() const { return m_type; }
+};
+
+class IndexRequest : public Request {
+ IndexPosition m_index;
+public:
+ IndexRequest( IndexPosition i ) : Request( req_addIndex ), m_index( i ) {}
+ IndexPosition index() const { return m_index; }
+};
+
+class SpaceRequest : public Request {
+ SpaceWidth m_space;
+public:
+ SpaceRequest( SpaceWidth s ) : Request( req_addSpace ), m_space( s ) {}
+ SpaceWidth space() const { return m_space; }
+};
+
+class DirectedRemove : public Request {
+ Direction m_direction;
+public:
+ DirectedRemove( RequestID id, Direction d ) : Request( id ), m_direction( d ) {}
+ Direction direction() const { return m_direction; }
+};
+
+class TextCharRequest : public Request {
+ QChar m_ch;
+ bool m_isSymbol;
+public:
+ TextCharRequest( QChar ch, bool isSymbol=false ) : Request( req_addTextChar ), m_ch( ch ), m_isSymbol( isSymbol ) {}
+ QChar ch() const { return m_ch; }
+ bool isSymbol() const { return m_isSymbol; }
+};
+
+class OperatorRequest: public Request {
+ QChar m_ch;
+public:
+ OperatorRequest( QChar ch ) : Request( req_addOperator ), m_ch( ch ) {}
+ QChar ch() const { return m_ch; }
+};
+
+class NumberRequest: public Request {
+ QChar m_ch;
+public:
+ NumberRequest( QChar ch ) : Request( req_addNumber ), m_ch( ch ) {}
+ QChar ch() const { return m_ch; }
+};
+
+class TextRequest : public Request {
+ QString m_text;
+public:
+ TextRequest( QString text ) : Request( req_addText ), m_text( text ) {}
+ QString text() const { return m_text; }
+};
+
+class MatrixRequest : public Request {
+ uint m_rows, m_columns;
+public:
+ MatrixRequest( uint rows, uint columns ) : Request( req_addMatrix ), m_rows( rows ), m_columns( columns ) {}
+ uint rows() const { return m_rows; }
+ uint columns() const { return m_columns; }
+};
+
+class CharStyleRequest : public Request {
+ bool m_bold;
+ bool m_italic;
+public:
+ CharStyleRequest( RequestID id, bool bold, bool italic ) : Request( id ), m_bold( bold ), m_italic( italic ) {}
+ bool bold() const { return m_bold; }
+ bool italic() const { return m_italic; }
+};
+
+class CharFamilyRequest : public Request {
+ CharFamily m_charFamily;
+public:
+ CharFamilyRequest( CharFamily cf ) : Request( req_formatFamily ), m_charFamily( cf ) {}
+ CharFamily charFamily() const { return m_charFamily; }
+};
+
+class TokenElementRequest : public Request {
+ TokenElementType m_tokenElement;
+public:
+ TokenElementRequest( TokenElementType te ) : Request( req_formatTokenElement ), m_tokenElement( te ) {}
+ TokenElementType tokenElement() const { return m_tokenElement; }
+};
+
+
+KFORMULA_NAMESPACE_END
+
+#endif // FORMULADEFS_H