parse lines that start with '#' as comments
This commit is contained in:
parent
2b1a11c69d
commit
93783c2a04
1 changed files with 40 additions and 30 deletions
|
@ -5,6 +5,7 @@
|
|||
static char *yyfilename;
|
||||
static int yylineno = 1;
|
||||
static gboolean haserror = FALSE;
|
||||
static gboolean comment = FALSE;
|
||||
static ConfigEntry entry = { NULL, -1 };
|
||||
|
||||
static void stringvalue();
|
||||
|
@ -26,6 +27,7 @@ assign {white}={white}
|
|||
{number}/{white}\n numbervalue();
|
||||
^{identifier}/{assign} identifier();
|
||||
\n newline();
|
||||
^# comment = TRUE;
|
||||
=
|
||||
[ \t]
|
||||
. haserror = TRUE;
|
||||
|
@ -34,49 +36,57 @@ assign {white}={white}
|
|||
|
||||
static void stringvalue()
|
||||
{
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||
entry.type = Config_String;
|
||||
entry.value.string = g_strdup(yytext+1); /* drop the left quote */
|
||||
if (entry.value.string[yyleng-2] != '"')
|
||||
printf("warning: improperly terminated string on line %d\n",
|
||||
yylineno);
|
||||
else
|
||||
entry.value.string[yyleng-2] = '\0';
|
||||
} else
|
||||
haserror = TRUE;
|
||||
if (!comment) {
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||
entry.type = Config_String;
|
||||
entry.value.string = g_strdup(yytext+1); /* drop the left quote */
|
||||
if (entry.value.string[yyleng-2] != '"')
|
||||
printf("warning: improperly terminated string on line %d\n",
|
||||
yylineno);
|
||||
else
|
||||
entry.value.string[yyleng-2] = '\0';
|
||||
} else
|
||||
haserror = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static void numbervalue()
|
||||
{
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||
entry.type = Config_Integer;
|
||||
entry.value.integer = atoi(yytext);
|
||||
} else
|
||||
haserror = TRUE;
|
||||
if (!comment) {
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type < 0) {
|
||||
entry.type = Config_Integer;
|
||||
entry.value.integer = atoi(yytext);
|
||||
} else
|
||||
haserror = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static void identifier()
|
||||
{
|
||||
entry.name = g_strdup(yytext);
|
||||
entry.type = -1;
|
||||
if (!comment) {
|
||||
entry.name = g_strdup(yytext);
|
||||
entry.type = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static void newline()
|
||||
{
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type >= 0) {
|
||||
if (!config_set(entry.name, entry.type, entry.value))
|
||||
g_warning("Invalid option in '%s': '%s'\n",
|
||||
yyfilename, entry.name);
|
||||
} else {
|
||||
printf("Parser error in '%s' on line %d\n", yyfilename, yylineno);
|
||||
}
|
||||
g_free(entry.name);
|
||||
entry.name = NULL;
|
||||
if (entry.type == Config_String)
|
||||
g_free(entry.value.string);
|
||||
entry.type = -1;
|
||||
if (!comment) {
|
||||
if (!haserror && entry.name != NULL && (signed)entry.type >= 0) {
|
||||
if (!config_set(entry.name, entry.type, entry.value))
|
||||
g_warning("Invalid option in '%s': '%s'\n",
|
||||
yyfilename, entry.name);
|
||||
} else {
|
||||
printf("Parser error in '%s' on line %d\n", yyfilename, yylineno);
|
||||
}
|
||||
g_free(entry.name);
|
||||
entry.name = NULL;
|
||||
if (entry.type == Config_String)
|
||||
g_free(entry.value.string);
|
||||
entry.type = -1;
|
||||
|
||||
haserror = FALSE;
|
||||
haserror = FALSE;
|
||||
}
|
||||
++yylineno;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue