--- /dev/null
+/* 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;
+ }
+
+ }
+
+}