/**************************************************************************** ** $Id: KoComplexText.h 484817 2005-12-02 00:53:59Z dfaure $ ** ** Internal header file. ** ** Created : ** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of the kernel module of the TQt GUI Toolkit. ** ** This file may be distributed under the terms of the Q Public License ** as defined by Trolltech AS of Norway and appearing in the file ** LICENSE.TQPL included in the packaging of this file. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** Licensees holding valid TQt Enterprise Edition or TQt Professional Edition ** licenses may use this file in accordance with the TQt Commercial License ** Agreement provided with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ** information about TQt Commercial License Agreements. ** See http://www.trolltech.com/qpl/ for TQPL licensing information. ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef TQCOMPLEXTEXT_H #define TQCOMPLEXTEXT_H // // W A R N I N G // ------------- // // This file is not part of the TQt API. It exists for the convenience // of TQt Remote Control. This header file may change from version to // version without notice, or even be removed. // // We mean it. // // #ifndef TQT_H #include #include #include #include #include #include #endif // TQT_H #ifndef TQT_NO_COMPLEXTEXT // bidi helper classes. Internal to TQt struct TQ_EXPORT KoBidiStatus { KoBidiStatus() { eor = TQChar::DirON; lastStrong = TQChar::DirON; last = TQChar:: DirON; } TQChar::Direction eor; TQChar::Direction lastStrong; TQChar::Direction last; }; struct TQ_EXPORT KoBidiContext : public TQShared { // ### ref and deref parent? KoBidiContext( uchar level, TQChar::Direction embedding, KoBidiContext *parent = 0, bool override = FALSE ); ~KoBidiContext(); unsigned char level; bool override : 1; TQChar::Direction dir : 5; KoBidiContext *parent; }; struct TQ_EXPORT KoBidiControl { KoBidiControl() { context = 0; } KoBidiControl( KoBidiContext *c, KoBidiStatus s) { context = c; if( context ) context->ref(); status = s; } ~KoBidiControl() { if ( context && context->deref() ) delete context; } void setContext( KoBidiContext *c ) { if ( context == c ) return; if ( context && context->deref() ) delete context; context = c; context->ref(); } KoBidiContext *context; KoBidiStatus status; }; struct TQ_EXPORT KoTextRun { KoTextRun(int _start, int _stop, KoBidiContext *context, TQChar::Direction dir); int start; int stop; // explicit + implicit levels here uchar level; }; class TQ_EXPORT KoComplexText { public: enum Shape { XIsolated, XFinal, XInitial, XMedial }; static Shape glyphVariant( const TQString &str, int pos); static Shape glyphVariantLogical( const TQString &str, int pos); static TQString shapedString( const TQString &str, int from = 0, int len = -1, TQPainter::TextDirection dir = TQPainter::Auto, const TQFontMetrics *fm = 0); static TQChar shapedCharacter(const TQString &str, int pos, const TQFontMetrics *fm = 0); // positions non spacing marks relative to the base character at position pos. //static TQPointArray positionMarks( TQFontPrivate *f, const TQString &str, int pos, TQRect *boundingRect = 0 ); static TQPtrList *bidiReorderLine( KoBidiControl *control, const TQString &str, int start, int len, TQChar::Direction basicDir = TQChar::DirON ); static TQString bidiReorderString( const TQString &str, TQChar::Direction basicDir = TQChar::DirON ); }; #endif //TQT_NO_COMPLEXTEXT #endif