diff src/logparser.cpp @ 370:b9c153e00e84

Move source files to src/
author Chris Cannam
date Thu, 24 Mar 2011 10:27:51 +0000
parents logparser.cpp@8fd71f570884
children 005633eed862
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/logparser.cpp	Thu Mar 24 10:27:51 2011 +0000
@@ -0,0 +1,54 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    EasyMercurial
+
+    Based on HgExplorer by Jari Korhonen
+    Copyright (c) 2010 Jari Korhonen
+    Copyright (c) 2011 Chris Cannam
+    Copyright (c) 2011 Queen Mary, University of London
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "logparser.h"
+
+#include "debug.h"
+
+#include <QStringList>
+#include <QRegExp>
+
+LogParser::LogParser(QString text, QString separator) :
+    m_text(text), m_sep(separator)
+{
+    m_text.replace("\r\n", "\n");
+}
+
+QStringList LogParser::split()
+{
+    return m_text.split("\n\n", QString::SkipEmptyParts);
+}
+
+LogList LogParser::parse()
+{
+    LogList results;
+    QRegExp re(QString("^(\\w+)\\s*%1\\s+([^\\s].*)$").arg(m_sep));
+    QStringList entries = split();
+    foreach (QString entry, entries) {
+        LogEntry dictionary;
+        QStringList lines = entry.split('\n');
+        foreach (QString line, lines) {
+            if (re.indexIn(line) == 0) {
+                QString key = re.cap(1);
+                QString value = re.cap(2);
+                dictionary[key.trimmed()] = value;
+            }
+        }
+        results.push_back(dictionary);
+    }
+    return results;
+}