/* * * GDSII-Converter * Copyright (C) 2018 Mario Hüttel * * This file is part of GDSII-Converter. * * GDSII-Converter is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * GDSII-Converter 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 GDSII-Converter. If not, see . */ /** * @file mapping-parser.c * @brief Function to read a mapping file line and parse it. * @author Mario Hüttel */ /** * @addtogroup MainApplication * @{ */ #include "mapping-parser.h" int load_csv_line(GDataInputStream *stream, gboolean *export, char **name, int *layer, GdkRGBA *color) { int ret; gsize len; gchar *line; GRegex *regex; GMatchInfo *mi; char *match; if ((!export) || (!name) || (!layer) || (!color)) { ret = 1; goto ret_direct; } regex = g_regex_new("^(?[0-9]+),(?[0-9\\.]+),(?[0-9\\.]+),(?[0-9\\.]+),(?[0-9\\.]+),(?[01]),(?.*)$", 0, 0, NULL); line = g_data_input_stream_read_line(stream, &len, NULL, NULL); if (!line) { ret = -1; goto destroy_regex; } /* Match line in CSV */ g_regex_match(regex, line, 0, &mi); if (g_match_info_matches(mi)) { /* Line is valid */ match = g_match_info_fetch_named(mi, "layer"); *layer = (int)g_ascii_strtoll(match, NULL, 10); g_free(match); match = g_match_info_fetch_named(mi, "r"); color->red = g_ascii_strtod(match, NULL); g_free(match); match = g_match_info_fetch_named(mi, "g"); color->green = g_ascii_strtod(match, NULL); g_free(match); match = g_match_info_fetch_named(mi, "b"); color->blue = g_ascii_strtod(match, NULL); g_free(match); match = g_match_info_fetch_named(mi, "a"); color->alpha = g_ascii_strtod(match, NULL); g_free(match); match = g_match_info_fetch_named(mi, "export"); *export = ((!strcmp(match, "1")) ? TRUE : FALSE); g_free(match); match = g_match_info_fetch_named(mi, "name"); *name = match; ret = 0; } else { /* Line is malformatted */ printf("Could not recognize line in CSV as valid entry: %s\n", line); ret = 1; } g_match_info_free(mi); g_free(line); destroy_regex: g_regex_unref(regex); ret_direct: return ret; } /** @} */