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