Adding first code drop
[demorecorder] / src / CdlParser.vala
diff --git a/src/CdlParser.vala b/src/CdlParser.vala
new file mode 100644 (file)
index 0000000..dd394e6
--- /dev/null
@@ -0,0 +1,70 @@
+/*  Demo Recorder for MAEMO 5
+*   Copyright (C) 2010 Dru Moore <usr@dru-id.co.uk>
+*   This program is free software; you can redistribute it and/or modify
+*   it under the terms of the GNU General Public License version 2,
+*   or (at your option) any later version, as published by the Free
+*   Software Foundation
+*
+*   This program 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 General Public License for more details
+*
+*   You should have received a copy of the GNU General Public
+*   License along with this program; if not, write to the
+*   Free Software Foundation, Inc.,
+*   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+namespace IdWorks {
+  
+  public static class CdlParser : Object {
+    
+    const unichar CHAR_DLM = ',';
+    const unichar CHAR_ESC = '\"';
+    const unichar CHAR_EOL = '\n';
+    
+    public static string[] ParseLine(string line) {
+      string[] values = {};
+      
+      bool in_esc = false;
+      
+      int pos = 0;
+      StringBuilder buffer = new StringBuilder();
+      unichar c;
+      
+      while ((c = line[pos]) != CHAR_EOL && !in_esc && pos < line.length) {
+        switch(c) {
+          case CHAR_ESC:
+            // if we are already escaped add to buffer
+            if (in_esc) {
+              buffer.append_unichar(c);
+              in_esc = false;
+            }
+            // else enter escape mode
+            else {
+              in_esc = true;
+            }
+            break;
+          case CHAR_DLM:
+            // add the buffer to list and clear the buffer
+            values += buffer.str;
+            buffer.truncate(0);
+            break;
+          default:
+            // normal char to add to buffer
+            buffer.append_unichar(c);
+            break;
+        }
+        ++pos;
+      }
+      // check for data left floating over
+      if (0 < buffer.len) values += buffer.str;
+      buffer.truncate(0);
+      buffer = null;
+      
+      return values;
+    }
+    
+  }
+  
+}