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 
00038 class KateTextLine : public KShared
00039 {
00040   public:
00044     typedef KSharedPtr<KateTextLine> Ptr;
00045 
00046   public:
00050     enum Flags
00051     {
00052       flagNoOtherData = 0x1, // ONLY INTERNAL USE, NEVER EVER SET THAT !!!!
00053       flagHlContinue = 0x2,
00054       flagVisible = 0x4,
00055       flagAutoWrapped = 0x8
00056     };
00057 
00058   public:
00064     KateTextLine ();
00065 
00069     ~KateTextLine ();
00070 
00074   public:
00079     inline uint length() const { return m_text.length(); }
00080 
00085     inline bool hlLineContinue () const { return m_flags & KateTextLine::flagHlContinue; }
00086 
00091     inline bool isVisible () const { return m_flags & KateTextLine::flagVisible; }
00092 
00097     inline bool isAutoWrapped () const { return m_flags & KateTextLine::flagAutoWrapped; }
00098 
00103     int firstChar() const;
00104 
00109     int lastChar() const;
00110 
00117     int nextNonSpaceChar(uint pos) const;
00118 
00125     int previousNonSpaceChar(uint pos) const;
00126 
00133     inline QChar getChar (uint pos) const { return m_text[pos]; }
00134 
00139     inline const QChar *text() const { return m_text.unicode(); }
00140 
00145     inline uchar *attributes () const { return m_attributes.data(); }
00146 
00151     inline const QString& string() const { return m_text; }
00152 
00159     inline QString string(uint startCol, uint length) const
00160     { return m_text.mid(startCol, length); }
00161 
00168     inline QConstString constString(uint startCol, uint length) const
00169     { return QConstString(m_text.unicode() + startCol, length); }
00170 
00175     const QChar *firstNonSpace() const;
00176 
00182     uint indentDepth (uint tabwidth) const;
00183 
00191     int cursorX(uint pos, uint tabChars) const;
00192 
00198     uint lengthWithTabs (uint tabChars) const;
00199 
00206     bool stringAtPos(uint pos, const QString& match) const;
00207 
00213     bool startingWith(const QString& match) const;
00214 
00220     bool endingWith(const QString& match) const;
00221 
00232     bool searchText (uint startCol, const QString &text,
00233                      uint *foundAtCol, uint *matchLen,
00234                      bool casesensitive = true,
00235                      bool backwards = false);
00236 
00246     bool searchText (uint startCol, const QRegExp &regexp,
00247                      uint *foundAtCol, uint *matchLen,
00248                      bool backwards = false);
00249 
00255     inline uchar attribute (uint pos) const
00256     {
00257       if (pos < m_attributes.size()) return m_attributes[pos];
00258       return 0;
00259     }
00260 
00265     inline const QMemArray<short> &ctxArray () const { return m_ctx; };
00266 
00271     inline const QMemArray<signed char> &foldingListArray () const { return m_foldingList; };
00272 
00277     inline const QMemArray<unsigned short> &indentationDepthArray () const { return m_indentationDepth; };
00278 
00286     void insertText (uint pos, uint insLen, const QChar *insText, uchar *insAttribs = 0);
00287 
00293     void removeText (uint pos, uint delLen);
00294 
00299     void truncate(uint newLen);
00300 
00305     inline void setHlLineContinue (bool cont)
00306     {
00307       if (cont) m_flags = m_flags | KateTextLine::flagHlContinue;
00308       else m_flags = m_flags & ~ KateTextLine::flagHlContinue;
00309     }
00310 
00315     inline void setVisible(bool val)
00316     {
00317       if (val) m_flags = m_flags | KateTextLine::flagVisible;
00318       else m_flags = m_flags & ~ KateTextLine::flagVisible;
00319     }
00320 
00325     inline void setAutoWrapped (bool wrapped)
00326     {
00327       if (wrapped) m_flags = m_flags | KateTextLine::flagAutoWrapped;
00328       else m_flags = m_flags & ~ KateTextLine::flagAutoWrapped;
00329     }
00330 
00337     void setAttribs(uchar attribute, uint start, uint end);
00338 
00343     inline void setContext (QMemArray<short> &val) { m_ctx.assign (val); }
00344 
00349     inline void setFoldingList (QMemArray<signed char> &val) { m_foldingList.assign (val); m_foldingList.detach(); }
00350 
00355     inline void setIndentationDepth (QMemArray<unsigned short> &val) { m_indentationDepth.assign (val); }
00356 
00360   public:
00366     inline uint dumpSize (bool withHighlighting) const
00367     {
00368       return ( 1
00369                + sizeof(uint)
00370                + (m_text.length() * sizeof(QChar))
00371                + ( withHighlighting ?
00372                      ( (3 * sizeof(uint))
00373                        + (m_text.length() * sizeof(uchar))
00374                        + (m_ctx.size() * sizeof(short))
00375                        + (m_foldingList.size() * sizeof(signed char))
00376                        + (m_indentationDepth.size() * sizeof(unsigned short))
00377                      ) : 0
00378                  )
00379              );
00380     }
00381 
00389     char *dump (char *buf, bool withHighlighting) const;
00390 
00397     char *restore (char *buf);
00398 
00402   private:
00406     QString m_text;
00407 
00411     QMemArray<uchar> m_attributes;
00412 
00416     QMemArray<short> m_ctx;
00417 
00421     QMemArray<signed char> m_foldingList;
00422 
00426     QMemArray<unsigned short> m_indentationDepth;
00427 
00431     uchar m_flags;
00432 };
00433 
00434 #endif
00435 
00436 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Sep 23 17:13:32 2004 by doxygen 1.3.8-20040913 written by Dimitri van Heesch, © 1997-2003