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      TextLine : 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 #include <qvaluevector.h>
00031 
00040 class TextLine : public KShared
00041 {
00042   public:
00043     typedef KSharedPtr<TextLine> Ptr;
00044     typedef QValueVector<Ptr> List;
00045 
00046   public:
00051     TextLine ();
00052     ~TextLine ();
00053 
00057   public:
00061     inline uint length() const { return m_text.length(); }
00062 
00066     inline bool hlLineContinue () const { return m_flags & TextLine::flagHlContinue; }
00067 
00068     inline bool isVisible () const { return m_flags & TextLine::flagVisible; }
00069 
00070     inline bool isAutoWrapped () const { return m_flags & TextLine::flagAutoWrapped; }
00071 
00075     int firstChar() const;
00076 
00080     int lastChar() const;
00081 
00089     int nextNonSpaceChar(uint pos) const;
00090 
00098     int previousNonSpaceChar(uint pos) const;
00099 
00103     inline QChar getChar (uint pos) const
00104     {
00105       return m_text[pos];
00106     }
00107 
00111     inline const QChar *text() const { return m_text.unicode(); };
00112 
00113     inline uchar *attributes () const { return m_attributes.data(); }
00114 
00118     inline const QString& string() const { return m_text; };
00119 
00123     inline QString string(uint startCol, uint length) const { return m_text.mid(startCol, length); };
00124     inline QConstString constString(uint startCol, uint length) const { return QConstString(m_text.unicode() + startCol, length); };
00125 
00126     /*
00127       Gets a null terminated pointer to first non space char
00128     */
00129     const QChar *firstNonSpace() const;
00130 
00131     uint indentDepth (uint tabwidth) const;
00132 
00137     int cursorX(uint pos, uint tabChars) const;
00138 
00142     bool stringAtPos(uint pos, const QString& match) const;
00143 
00147     bool startingWith(const QString& match) const;
00148 
00152     bool endingWith(const QString& match) const;
00153 
00157     inline short *ctx () const { return m_ctx.data (); };
00158 
00162     inline bool ctxSize () const { return m_ctx.size (); };
00163 
00167     inline bool ctxEmpty () const { return m_ctx.isEmpty (); };
00168 
00169     bool searchText (uint startCol, const QString &text, uint *foundAtCol, uint *matchLen, bool casesensitive = true, bool backwards = false);
00170     bool searchText (uint startCol, const QRegExp &regexp, uint *foundAtCol, uint *matchLen, bool backwards = false);
00171 
00175     inline uchar attribute (uint pos) const
00176     {
00177       if (pos < m_text.length()) return m_attributes[pos];
00178       return 0;
00179     }
00180 
00184     inline const QString &textArray () const { return m_text; };
00185     inline const QMemArray<uchar> &attributesArray () const { return m_attributes; };
00186     inline const QMemArray<short> &ctxArray () const { return m_ctx; };
00187     inline const QMemArray<signed char> &foldingListArray () const { return m_foldingList; };
00188     inline const QMemArray<unsigned short> &indentationDepthArray () const { return m_indentationDepth; };
00189 
00193   public:
00197     void insertText (uint pos, uint insLen, const QChar *insText, uchar *insAttribs = 0);
00198     void removeText (uint pos, uint delLen);
00199 
00203     void append(const QChar *s, uint l);
00204 
00208     void truncate(uint newLen);
00209 
00213     QString withoutTrailingSpaces();
00214 
00218     inline void setHlLineContinue (bool cont)
00219     {
00220       if (cont) m_flags = m_flags | TextLine::flagHlContinue;
00221       else m_flags = m_flags & ~ TextLine::flagHlContinue;
00222     }
00223 
00224     inline void setVisible(bool val)
00225     {
00226       if (val) m_flags = m_flags | TextLine::flagVisible;
00227       else m_flags = m_flags & ~ TextLine::flagVisible;
00228     }
00229 
00230     inline void setAutoWrapped (bool wrapped)
00231     {
00232       if (wrapped) m_flags = m_flags | TextLine::flagAutoWrapped;
00233       else m_flags = m_flags & ~ TextLine::flagAutoWrapped;
00234     }
00235 
00239     void setAttribs(uchar attribute, uint start, uint end);
00240 
00244     inline void setContext(short *newctx, uint len)
00245     {
00246       m_ctx.duplicate (newctx, len);
00247     }
00248 
00249     inline void setFoldingList (QMemArray<signed char> &val)
00250     {
00251       m_foldingList=val;
00252       m_foldingList.detach();
00253     }
00254 
00255     inline void setIndentationDepth (QMemArray<unsigned short> &val)
00256     {
00257       m_indentationDepth = val;
00258       m_indentationDepth.detach();
00259     }
00260 
00264   public:
00268     uint dumpSize () const;
00269 
00274     char *dump (char *buf) const;
00275 
00280     char *restore (char *buf);
00281 
00282     enum Flags
00283     {
00284       flagNoOtherData = 0x1, // ONLY INTERNAL USE, NEVER EVER SET THAT !!!!
00285       flagHlContinue = 0x2,
00286       flagVisible = 0x4,
00287       flagAutoWrapped = 0x8
00288     };
00289 
00293   private:
00297     QString m_text;
00298     QMemArray<uchar> m_attributes;
00299 
00303     QMemArray<short> m_ctx;
00304     QMemArray<signed char> m_foldingList;
00305     QMemArray<unsigned short> m_indentationDepth;
00306 
00310     uchar m_flags;
00311 };
00312 
00313 #endif
KDE Logo
This file is part of the documentation for kate Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Sep 30 05:22:39 2004 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2003