X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2FCdlParser.vala;fp=src%2FCdlParser.vala;h=dd394e6b56820d4b471c1a766b9131c1468e95b3;hb=804630a4e0d41b182d8540f2aec69cf25ca0acfd;hp=0000000000000000000000000000000000000000;hpb=753fb925588aeeacdd74a163672acf2bf362a99e;p=demorecorder diff --git a/src/CdlParser.vala b/src/CdlParser.vala new file mode 100644 index 0000000..dd394e6 --- /dev/null +++ b/src/CdlParser.vala @@ -0,0 +1,70 @@ +/* Demo Recorder for MAEMO 5 +* Copyright (C) 2010 Dru Moore +* 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; + } + + } + +}