kate Library API Documentation

katetextline.h

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2001-2003 Christoph Cullmann <cullmann@kde.org> 00003 Copyright (C) 2002 Joseph Wenninger <jowenn@kde.org> 00004 00005 Based on: 00006 KateTextLine : Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de> 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Library General Public 00010 License version 2 as published by the Free Software Foundation. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00020 Boston, MA 02111-1307, USA. 00021 */ 00022 00023 #ifndef __KATE_TEXTLINE_H__ 00024 #define __KATE_TEXTLINE_H__ 00025 00026 #include <ksharedptr.h> 00027 00028 #include <qmemarray.h> 00029 #include <qstring.h> 00030 00031 class KateRenderer; 00032 class QTextStream; 00033 00041 class KateTextLine : public KShared 00042 { 00043 public: 00047 typedef KSharedPtr<KateTextLine> Ptr; 00048 00049 public: 00053 enum Flags 00054 { 00055 flagNoOtherData = 0x1, // ONLY INTERNAL USE, NEVER EVER SET THAT !!!! 00056 flagHlContinue = 0x2, 00057 flagAutoWrapped = 0x4, 00058 flagFoldingColumnsOutdated=0x8 00059 }; 00060 00061 public: 00067 KateTextLine (); 00068 00072 ~KateTextLine (); 00073 00077 public: 00081 inline void setFoldingColumnsOutdated(bool set) { if (set) m_flags |= KateTextLine::flagFoldingColumnsOutdated; else m_flags&= 00082 (~KateTextLine::flagFoldingColumnsOutdated);} 00083 00088 inline bool foldingColumnsOutdated() { return m_flags & KateTextLine::flagFoldingColumnsOutdated; } 00089 00090 00095 inline uint length() const { return m_text.length(); } 00096 00101 inline bool hlLineContinue () const { return m_flags & KateTextLine::flagHlContinue; } 00102 00107 inline bool isAutoWrapped () const { return m_flags & KateTextLine::flagAutoWrapped; } 00108 00113 int firstChar() const; 00114 00119 int lastChar() const; 00120 00127 int nextNonSpaceChar(uint pos) const; 00128 00135 int previousNonSpaceChar(uint pos) const; 00136 00143 inline QChar getChar (uint pos) const { return m_text[pos]; } 00144 00149 inline const QChar *text() const { return m_text.unicode(); } 00150 00165 inline uchar *attributes () const { return m_attributes.data(); } 00166 00171 inline const QString& string() const { return m_text; } 00172 00179 inline QString string(uint startCol, uint length) const 00180 { return m_text.mid(startCol, length); } 00181 00194 void stringAsHtml(uint startCol, uint length, KateRenderer *renderer, QTextStream *outputStream) const; 00195 00205 void stringAsHtml(KateRenderer *renderer, QTextStream *outputStream) const 00206 { stringAsHtml(0,m_text.length(),renderer, outputStream);} 00207 00212 const QChar *firstNonSpace() const; 00213 00219 uint indentDepth (uint tabwidth) const; 00220 00228 int cursorX(uint pos, uint tabChars) const; 00229 00235 uint lengthWithTabs (uint tabChars) const; 00236 00243 bool stringAtPos(uint pos, const QString& match) const; 00244 00250 bool startingWith(const QString& match) const; 00251 00257 bool endingWith(const QString& match) const; 00258 00269 bool searchText (uint startCol, const QString &text, 00270 uint *foundAtCol, uint *matchLen, 00271 bool casesensitive = true, 00272 bool backwards = false); 00273 00283 bool searchText (uint startCol, const QRegExp &regexp, 00284 uint *foundAtCol, uint *matchLen, 00285 bool backwards = false); 00286 00295 inline uchar attribute (uint pos) const 00296 { 00297 if (pos < m_attributes.size()) return m_attributes[pos]; 00298 return 0; 00299 } 00300 00305 inline const QMemArray<short> &ctxArray () const { return m_ctx; }; 00306 00311 inline const QMemArray<uint> &foldingListArray () const { return m_foldingList; }; 00312 00317 inline const QMemArray<unsigned short> &indentationDepthArray () const { return m_indentationDepth; }; 00318 00326 void insertText (uint pos, uint insLen, const QChar *insText, uchar *insAttribs = 0); 00327 00333 void removeText (uint pos, uint delLen); 00334 00339 void truncate(uint newLen); 00340 00345 inline void setHlLineContinue (bool cont) 00346 { 00347 if (cont) m_flags = m_flags | KateTextLine::flagHlContinue; 00348 else m_flags = m_flags & ~ KateTextLine::flagHlContinue; 00349 } 00350 00355 inline void setAutoWrapped (bool wrapped) 00356 { 00357 if (wrapped) m_flags = m_flags | KateTextLine::flagAutoWrapped; 00358 else m_flags = m_flags & ~ KateTextLine::flagAutoWrapped; 00359 } 00360 00365 inline void setContext (QMemArray<short> &val) { m_ctx.assign (val); } 00366 00371 inline void setFoldingList (QMemArray<uint> &val) { m_foldingList.assign (val); m_foldingList.detach(); } 00372 00377 inline void setIndentationDepth (QMemArray<unsigned short> &val) { m_indentationDepth.assign (val); } 00378 00382 public: 00388 inline uint dumpSize (bool withHighlighting) const 00389 { 00390 return ( 1 00391 + sizeof(uint) 00392 + (m_text.length() * sizeof(QChar)) 00393 + ( withHighlighting ? 00394 ( (3 * sizeof(uint)) 00395 + (m_text.length() * sizeof(uchar)) 00396 + (m_ctx.size() * sizeof(short)) 00397 + (m_foldingList.size() * sizeof(uint)) 00398 + (m_indentationDepth.size() * sizeof(unsigned short)) 00399 ) : 0 00400 ) 00401 ); 00402 } 00403 00411 char *dump (char *buf, bool withHighlighting) const; 00412 00419 char *restore (char *buf); 00420 00424 private: 00428 QString m_text; 00429 00435 QMemArray<uchar> m_attributes; 00436 00440 QMemArray<short> m_ctx; 00441 00445 QMemArray<uint> m_foldingList; 00446 00450 QMemArray<unsigned short> m_indentationDepth; 00451 00455 uchar m_flags; 00456 }; 00457 00458 #endif 00459 00460 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 23:40:02 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003