summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp
authoralwin <alwin>2005-02-28 09:40:30 (UTC)
committer alwin <alwin>2005-02-28 09:40:30 (UTC)
commit2b64a84d39eeed5681d0ee5068c7d11a01527750 (patch) (side-by-side diff)
treec8693340dbc5ef5e2f9afa90b690829ddff2c4bd /noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp
parent61fa699140c5efbb6ba0bf2a62f7e8fbf62976be (diff)
downloadopie-2b64a84d39eeed5681d0ee5068c7d11a01527750.zip
opie-2b64a84d39eeed5681d0ee5068c7d11a01527750.tar.gz
opie-2b64a84d39eeed5681d0ee5068c7d11a01527750.tar.bz2
other keymapping tool - not working this moment, I have to check it out
- the reason is that the config file is somewhat easier to understand than from zkbapplet and has a nice config tool. Please don't put it into any repositories this moment.
Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp b/noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp
new file mode 100644
index 0000000..72c15f1
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/misc/StringParser.cpp
@@ -0,0 +1,72 @@
+#include "StringParser.h"
+
+#include <qregexp.h>
+
+QStringList StringParser::split(const QChar& sep, const QString& str,
+ bool allowEmptyEntries)
+{
+ QString line = str + sep;
+ QString quote;
+ QRegExp rxend;
+ QRegExp rxdbl;
+ int pos=0, len, idx=0;
+ QStringList list;
+ while(idx < (int)line.length()-1){
+ if(!quote.isEmpty()){
+ QString s;
+ while((pos = rxend.match(line, idx, &len)) != -1){
+ s += line.mid(idx, len+pos-idx-1);
+ idx = pos+len-1;
+ if(len % 2 == 0){
+ s.replace(rxdbl, quote);
+ list.append(s.left(s.length()-1));
+ idx++;
+ break;
+ }
+ }
+ quote = "";
+ } else if(line[idx] == '\"'){
+ rxend.setPattern(QString("\"+") + sep);
+ rxdbl.setPattern("\"\"");
+ quote = "\"";
+ idx++;
+ } else if(line[idx] == '\''){
+ rxend.setPattern(QString("\'+") + sep);
+ rxdbl.setPattern("\'\'");
+ quote = "\'";
+ idx++;
+ } else if(!allowEmptyEntries && line[idx] == sep){
+ idx++;
+ } else {
+ pos = line.find(sep, idx);
+ if(pos != -1){
+ const QString& s = line.mid(idx, pos-idx);
+ list.append(s);
+ idx = pos+1;
+ }
+ }
+ if(pos == -1) break;
+ }
+ return list;
+}
+
+QString StringParser::join(const QChar& sep, const QStringList& list)
+{
+ QString str;
+ QString s;
+ QStringList tmp;
+ QRegExp quote("\"");
+ for(QStringList::ConstIterator it=list.begin();
+ it!=list.end(); ++it){
+ s = *it;
+ if(s.find(sep) != -1
+ || s[0] == '\"'
+ || s[0] == '\''){
+ s.replace(quote, "\"\"");
+ tmp.append("\"" + s + "\"");
+ } else {
+ tmp.append(s);
+ }
+ }
+ return tmp.join(sep);
+}