/*************************************************************************** copyright : (C) 2006 by David Nolden email : david.nolden.kdevelop@art-master.de ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef __TYPEDECORATION_H__ #define __TYPEDECORATION_H__ class TypeDecoration { public: TypeDecoration() { } ///Removes the decoration from the given string TypeDecoration( TQString& str ) { init( str ); } ~TypeDecoration() {} ///Removes the decoration from the assigned TypeDecoration& operator = ( TQString& str ) { clear(); init( str ); return *this; } TQString apply( const TQString& str ) const { TQString ret = str; if ( !ret.startsWith( m_decoration_front ) ) ret = m_decoration_front + ret; if ( !ret.endsWith( m_decoration_back ) ) ret = ret + m_decoration_back; return ret; } void operator += ( const TypeDecoration& rhs ) { if ( !m_decoration_front.contains( rhs.m_decoration_front ) ) m_decoration_front += rhs.m_decoration_front; if ( !m_decoration_back.contains( rhs.m_decoration_back ) ) m_decoration_back += rhs.m_decoration_back; } void clear() { m_decoration_front = TQString(); m_decoration_back = TQString(); } void prepend( const TQString& str ) { m_decoration_front = str + m_decoration_front; } /*bool smaller( const TypeDecoration& rhs ) const { } int depth() const { }*/ private: void init( TQString& str ) { str = str.stripWhiteSpace(); static const TQString cnst = "const"; static const TQString ref = "&"; if ( str.startsWith( cnst ) ) { str.remove( 0, cnst.length() ); if( str.isEmpty() || ( !str[0].isLetterOrNumber() && str[0] != '_' ) ) { m_decoration_front += cnst + " "; str = str.stripWhiteSpace(); } else { str = cnst + str; ///The const was not alone } } if( str.endsWith( cnst ) ) { str.remove( str.length() - cnst.length(), cnst.length() ); if( str.isEmpty() || ( !str[str.length()-1].isLetterOrNumber() && str[str.length()-1] != '_' ) ) { m_decoration_back = (m_decoration_back + " " + cnst); str = str.stripWhiteSpace(); } else { str = str + cnst; ///The const was not alone } } if ( str.endsWith( ref ) ) { m_decoration_back = ref + m_decoration_back; str = str.remove( str.length() - ref.length(), ref.length() ).stripWhiteSpace(); if( str.endsWith( cnst ) ) { str.remove( str.length() - cnst.length(), cnst.length() ); if( str.isEmpty() || ( !str[str.length()-1].isLetterOrNumber() && str[str.length()-1] != '_' ) ) { m_decoration_back = m_decoration_back + " " + cnst; str = str.stripWhiteSpace(); } else { str = str + cnst; ///The const was not alone } } } } TQString m_decoration_front, m_decoration_back; }; #endif // kate: indent-mode csands; tab-width 4;