summaryrefslogtreecommitdiffstats
path: root/kregexpeditor/textrangeregexp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kregexpeditor/textrangeregexp.cpp')
-rw-r--r--kregexpeditor/textrangeregexp.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/kregexpeditor/textrangeregexp.cpp b/kregexpeditor/textrangeregexp.cpp
new file mode 100644
index 0000000..73c2923
--- /dev/null
+++ b/kregexpeditor/textrangeregexp.cpp
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2002-2003 Jesper K. Pedersen <blackie@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+#ifdef QT_ONLY
+ #include "compat.h"
+#else
+ #include <klocale.h>
+ #include <kmessagebox.h>
+#endif
+
+#include "textrangeregexp.h"
+#include "regexpconverter.h"
+
+TextRangeRegExp::TextRangeRegExp( bool selected ) : RegExp( selected ),
+ _negate(false), _digit(false), _nonDigit(false), _space(false), _nonSpace(false), _wordChar(false), _nonWordChar(false)
+{
+}
+
+TextRangeRegExp::~TextRangeRegExp()
+{
+}
+
+
+void TextRangeRegExp::addCharacter( QString str )
+{
+ _chars.append( str );
+}
+
+void TextRangeRegExp::addRange(QString from, QString to)
+{
+ _ranges.append( new StringPair( from, to ) );
+}
+
+bool TextRangeRegExp::check( ErrorMap&, bool, bool )
+{
+ return false;
+}
+
+QDomNode TextRangeRegExp::toXml( QDomDocument* doc ) const
+{
+ QDomElement top = doc->createElement( QString::fromLocal8Bit( "TextRange" ) );
+
+ if ( _negate )
+ top.setAttribute( QString::fromLocal8Bit("negate"), true );
+ if ( _digit )
+ top.setAttribute( QString::fromLocal8Bit("digit"), true );
+ if ( _nonDigit )
+ top.setAttribute( QString::fromLocal8Bit("nonDigit"), true );
+ if ( _space )
+ top.setAttribute( QString::fromLocal8Bit("space"), true );
+ if ( _nonSpace )
+ top.setAttribute( QString::fromLocal8Bit("nonSpace"), true );
+ if ( _wordChar )
+ top.setAttribute( QString::fromLocal8Bit("wordChar"), true );
+ if ( _nonWordChar )
+ top.setAttribute( QString::fromLocal8Bit("nonWordChar"), true );
+
+ for ( QStringList::ConstIterator it = _chars.begin(); it != _chars.end(); ++it ) {
+ QDomElement elm = doc->createElement( QString::fromLocal8Bit( "Character" ) );
+ elm.setAttribute( QString::fromLocal8Bit( "char" ), *it );
+ top.appendChild( elm );
+ }
+
+ for ( QPtrListIterator<StringPair> it2(_ranges); *it2; ++it2 ) {
+ QDomElement elm = doc->createElement( QString::fromLocal8Bit( "Range" ) );
+ elm.setAttribute( QString::fromLocal8Bit( "from" ), (*it2)->first() );
+ elm.setAttribute( QString::fromLocal8Bit( "to" ), (*it2)->second() );
+ top.appendChild( elm );
+ }
+ return top;
+}
+
+bool TextRangeRegExp::load( QDomElement top, const QString& /*version*/ )
+{
+ Q_ASSERT( top.tagName() == QString::fromLocal8Bit( "TextRange" ) );
+ QString str;
+ QString one = QString::fromLocal8Bit("1");
+ QString zero = QString::fromLocal8Bit("0");
+
+ str = top.attribute( QString::fromLocal8Bit("negate"), zero );
+ _negate = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("digit"), zero );
+ _digit = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("nonDigit"), zero );
+ _nonDigit = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("space"), zero );
+ _space = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("nonSpace"), zero );
+ _nonSpace = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("wordChar"), zero );
+ _wordChar = ( str == one );
+
+ str = top.attribute( QString::fromLocal8Bit("nonWordChar"), zero );
+ _nonWordChar = ( str == one );
+
+ for ( QDomNode node = top.firstChild(); !node.isNull(); node = node.nextSibling() ) {
+ if ( !node.isElement() )
+ continue; // Skip comments.
+ QDomElement child = node.toElement();
+
+ if ( child.tagName() == QString::fromLocal8Bit( "Character" ) ) {
+ QString ch = child.attribute( QString::fromLocal8Bit( "char" ) );
+ addCharacter( ch );
+ }
+ else if ( child.tagName() == QString::fromLocal8Bit( "Range" ) ) {
+ QString from = child.attribute( QString::fromLocal8Bit( "from" ) );
+ QString to = child.attribute( QString::fromLocal8Bit( "to" ) );
+ addRange( from, to );
+ }
+ else {
+ KMessageBox::sorry( 0, i18n("<p>Invalid sub element to element <b>TextRange</b>. Tag was <b>%1</b></p>").arg(child.tagName()),
+ i18n("Error While Loading From XML File") ) ;
+ return false;
+ }
+ }
+ return true;
+}
+
+bool TextRangeRegExp::operator==( const RegExp& other ) const
+{
+ return ( RegExpConverter::current()->toStr( const_cast<TextRangeRegExp*>( this ), false ) ==
+ RegExpConverter::current()->toStr( const_cast<RegExp*>( &other ), false ) );
+}
+