| version 1.17, 2002/05/30 22:29:45 |
version 1.18, 2002/06/23 10:48:46 |
|
|
| |
|
| /* Default properties {{{ */ |
/* Default properties {{{ */ |
| char *cfg_default_properties[CFG_N_PROPS][4] = { |
char *cfg_default_properties[CFG_N_PROPS][4] = { |
| { NULL, NULL, NULL, NULL }, /* CFG_LINE_STOP_STRING */ |
/* CFG_LINE_STOP_STRING */ { NULL, NULL, NULL, NULL }, |
| { "-", NULL, NULL, NULL }, /* CFG_LINE_SHORT_OPTION_PREFIX */ |
/* CFG_LINE_SHORT_OPTION_PREFIX */ { "-", NULL, NULL, NULL }, |
| { "--", NULL, NULL, NULL }, /* CFG_LINE_LONG_OPTION_PREFIX */ |
/* CFG_LINE_LONG_OPTION_PREFIX */ { "--", NULL, NULL, NULL }, |
| { "=", NULL, NULL, NULL }, /* CFG_LINE_OPTION_ARG_SEPARATOR */ |
/* CFG_LINE_OPTION_ARG_SEPARATOR */ { "=", NULL, NULL, NULL }, |
| { " ", ",", ";", NULL }, /* CFG_LINE_MULTI_VALS_SEPARATOR */ |
/* CFG_LINE_MULTI_VALS_SEPARATOR */ { ",", ";", NULL, NULL }, |
| { "\"", "'", NULL, NULL }, /* CFG_QUOTE_PREFIX */ |
/* CFG_LINE_MULTI_VALS_LEFTOVER_SEPARATOR */ { NULL, NULL, NULL, NULL }, |
| { "\"", "'", NULL, NULL }, /* CFG_QUOTE_POSTFIX */ |
/* CFG_LINE_QUOTE_PREFIX */ { NULL, NULL, NULL, NULL }, |
| { NULL, NULL, NULL, NULL }, /* CFG_FILE_STOP_PREFIX */ |
/* CFG_LINE_QUOTE_POSTFIX */ { NULL, NULL, NULL, NULL }, |
| { "#", ";", NULL, NULL }, /* CFG_FILE_COMMENT_PREFIX */ |
/* CFG_FILE_STOP_PREFIX */ { NULL, NULL, NULL, NULL }, |
| { "\\", NULL, NULL, NULL }, /* CFG_FILE_MULTI_LINE_POSTFIX */ |
/* CFG_FILE_COMMENT_PREFIX */ { "#", ";", NULL, NULL }, |
| { "=", NULL, NULL, NULL }, /* CFG_FILE_OPTION_ARG_SEPARATOR */ |
/* CFG_FILE_MULTI_LINE_POSTFIX */ { "\\", NULL, NULL, NULL }, |
| { " ", ",", ";", NULL } /* CFG_FILE_MULTI_VALS_SEPARATOR */ |
/* CFG_FILE_OPTION_ARG_SEPARATOR */ { "=", NULL, NULL, NULL }, |
| }; /* }}} */ |
/* CFG_FILE_MULTI_VALS_SEPARATOR */ { ",", ";", " ", NULL }, |
| |
/* CFG_FILE_MULTI_VALS_LEFTOVER_SEPARATOR */ { " ", NULL, NULL, NULL }, |
| |
/* CFG_FILE_QUOTE_PREFIX */ { "\"", "'", NULL, NULL }, |
| |
/* CFG_FILE_QUOTE_POSTFIX */ { "\"", "'", NULL, NULL }, |
| |
}; /* }}} */ |
| |
|
| /* |
/* |
| * Static functions for strdyn manipulation |
* Static functions for strdyn manipulation |
| Line 66 strdyn_array_add(where, str) |
|
| Line 70 strdyn_array_add(where, str) |
|
| |
|
| *where = strdyn_add(*where, str); |
*where = strdyn_add(*where, str); |
| |
|
| return *where == NULL ? 0 : 1; |
return *where != NULL; |
| } /* }}} */ |
} /* }}} */ |
| |
|
| static int |
static int |
| Line 77 strdyn_array_remove(where, str) |
|
| Line 81 strdyn_array_remove(where, str) |
|
| if (*where != NULL) |
if (*where != NULL) |
| *where = strdyn_remove_str_all(*where, str); |
*where = strdyn_remove_str_all(*where, str); |
| |
|
| return *where == NULL ? 0 : 1; |
return *where != NULL; |
| } /* }}} */ |
} /* }}} */ |
| |
|
| |
|
| Line 130 cfg_get_context_flags(con) |
|
| Line 134 cfg_get_context_flags(con) |
|
| * Functions for multi values separator manipulation. |
* Functions for multi values separator manipulation. |
| */ |
*/ |
| |
|
| #define cfg_normal_property_type(type) (type >= 0 && type < CFG_N_PROPS) |
#define cfg_normal_property_type(type) ((type) >= 0 && (type) < CFG_N_PROPS) |
| #define cfg_virtual_property_type(type) (type > CFG_N_PROPS) |
#define cfg_virtual_property_type(type) ((type) > CFG_N_PROPS) |
| |
|
| void |
void |
| cfg_clear_property(con, type) |
cfg_clear_property(con, type) |
| Line 142 cfg_clear_property(con, type) |
|
| Line 146 cfg_clear_property(con, type) |
|
| strdyn_array_clear(&(con->prop[type])); |
strdyn_array_clear(&(con->prop[type])); |
| } |
} |
| else if (cfg_virtual_property_type(type)) { |
else if (cfg_virtual_property_type(type)) { |
| /* TODO */ |
switch (type) { |
| |
default: /* unknown special property; do nothing */ |
| |
break; |
| |
case CFG_QUOTE: |
| |
cfg_clear_property(con, CFG_LINE_QUOTE); |
| |
cfg_clear_property(con, CFG_FILE_QUOTE); |
| |
break; |
| |
case CFG_LINE_QUOTE: |
| |
cfg_clear_property(con, CFG_LINE_QUOTE_PREFIX); |
| |
cfg_clear_property(con, CFG_LINE_QUOTE_POSTFIX); |
| |
break; |
| |
case CFG_FILE_QUOTE: |
| |
cfg_clear_property(con, CFG_FILE_QUOTE_PREFIX); |
| |
cfg_clear_property(con, CFG_FILE_QUOTE_POSTFIX); |
| |
break; |
| |
case CFG_QUOTE_PREFIX: |
| |
cfg_clear_property(con, CFG_LINE_QUOTE_PREFIX); |
| |
cfg_clear_property(con, CFG_FILE_QUOTE_PREFIX); |
| |
break; |
| |
case CFG_QUOTE_POSTFIX: |
| |
cfg_clear_property(con, CFG_LINE_QUOTE_POSTFIX); |
| |
cfg_clear_property(con, CFG_FILE_QUOTE_POSTFIX); |
| |
break; |
| |
case CFG_MULTI_VALS_SEPARATOR: |
| |
cfg_clear_property(con, CFG_LINE_MULTI_VALS_SEPARATOR); |
| |
cfg_clear_property(con, CFG_FILE_MULTI_VALS_SEPARATOR); |
| |
break; |
| |
case CFG_LINE_MULTI_VALS_SEPARATOR: |
| |
cfg_clear_property(con, CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR); |
| |
cfg_clear_property(con, CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR); |
| |
break; |
| |
case CFG_FILE_MULTI_VALS_SEPARATOR: |
| |
cfg_clear_property(con, CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR); |
| |
cfg_clear_property(con, CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR); |
| |
break; |
| |
case CFG_NORMAL_MULTI_VALS_SEPARATOR: |
| |
cfg_clear_property(con, CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR); |
| |
cfg_clear_property(con, CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR); |
| |
break; |
| |
case CFG_LEFTOVER_MULTI_VALS_SEPARATOR: |
| |
cfg_clear_property(con, CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR); |
| |
cfg_clear_property(con, CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR); |
| |
break; |
| |
case CFG_OPTION_ARG_SEPARATOR: |
| |
cfg_clear_property(con, CFG_LINE_OPTION_ARG_SEPARATOR); |
| |
cfg_clear_property(con, CFG_FILE_OPTION_ARG_SEPARATOR); |
| |
break; |
| |
} |
| } |
} |
| } /* }}} */ |
} /* }}} */ |
| |
|
| Line 156 cfg_add_property(con, type, str) |
|
| Line 207 cfg_add_property(con, type, str) |
|
| return strdyn_array_add(&(con->prop[type]), str); |
return strdyn_array_add(&(con->prop[type]), str); |
| } |
} |
| else if (cfg_virtual_property_type(type)) { |
else if (cfg_virtual_property_type(type)) { |
| /* TODO */ |
register int ret = 1; |
| |
switch (type) { |
| |
default: /* unknown special property; do nothing */ |
| |
ret = 0; |
| |
break; |
| |
case CFG_QUOTE: |
| |
ret &= cfg_add_property(con, CFG_LINE_QUOTE, str); |
| |
ret &= cfg_add_property(con, CFG_FILE_QUOTE, str); |
| |
break; |
| |
case CFG_LINE_QUOTE: |
| |
ret &= cfg_add_property(con, CFG_LINE_QUOTE_PREFIX, str); |
| |
ret &= cfg_add_property(con, CFG_LINE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_FILE_QUOTE: |
| |
ret &= cfg_add_property(con, CFG_FILE_QUOTE_PREFIX, str); |
| |
ret &= cfg_add_property(con, CFG_FILE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_QUOTE_PREFIX: |
| |
ret &= cfg_add_property(con, CFG_LINE_QUOTE_PREFIX, str); |
| |
ret &= cfg_add_property(con, CFG_FILE_QUOTE_PREFIX, str); |
| |
break; |
| |
case CFG_QUOTE_POSTFIX: |
| |
ret &= cfg_add_property(con, CFG_LINE_QUOTE_POSTFIX, str); |
| |
ret &= cfg_add_property(con, CFG_FILE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_LINE_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_FILE_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_NORMAL_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_LEFTOVER_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_OPTION_ARG_SEPARATOR: |
| |
ret &= cfg_add_property(con, |
| |
CFG_LINE_OPTION_ARG_SEPARATOR, str); |
| |
ret &= cfg_add_property(con, |
| |
CFG_FILE_OPTION_ARG_SEPARATOR, str); |
| |
break; |
| |
} |
| |
|
| |
return ret; |
| } |
} |
| |
|
| return 0; /* failure */ |
return 0; /* failure */ |
| Line 172 cfg_remove_property(con, type, str) |
|
| Line 286 cfg_remove_property(con, type, str) |
|
| return strdyn_array_remove(&(con->prop[type]), str); |
return strdyn_array_remove(&(con->prop[type]), str); |
| } |
} |
| else if (cfg_virtual_property_type(type)) { |
else if (cfg_virtual_property_type(type)) { |
| /* TODO */ |
register int ret = 1; |
| |
switch (type) { |
| |
default: /* unknown special property; do nothing */ |
| |
ret = 0; |
| |
break; |
| |
case CFG_QUOTE: |
| |
ret &= cfg_remove_property(con, CFG_LINE_QUOTE, str); |
| |
ret &= cfg_remove_property(con, CFG_FILE_QUOTE, str); |
| |
break; |
| |
case CFG_LINE_QUOTE: |
| |
ret &= cfg_remove_property(con, CFG_LINE_QUOTE_PREFIX, str); |
| |
ret &= cfg_remove_property(con, CFG_LINE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_FILE_QUOTE: |
| |
ret &= cfg_remove_property(con, CFG_FILE_QUOTE_PREFIX, str); |
| |
ret &= cfg_remove_property(con, CFG_FILE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_QUOTE_PREFIX: |
| |
ret &= cfg_remove_property(con, CFG_LINE_QUOTE_PREFIX, str); |
| |
ret &= cfg_remove_property(con, CFG_FILE_QUOTE_PREFIX, str); |
| |
break; |
| |
case CFG_QUOTE_POSTFIX: |
| |
ret &= cfg_remove_property(con, CFG_LINE_QUOTE_POSTFIX, str); |
| |
ret &= cfg_remove_property(con, CFG_FILE_QUOTE_POSTFIX, str); |
| |
break; |
| |
case CFG_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_LINE_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_FILE_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_NORMAL_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_NORMAL_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_LEFTOVER_MULTI_VALS_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_LEFTOVER_MULTI_VALS_SEPARATOR, str); |
| |
break; |
| |
case CFG_OPTION_ARG_SEPARATOR: |
| |
ret &= cfg_remove_property(con, |
| |
CFG_LINE_OPTION_ARG_SEPARATOR, str); |
| |
ret &= cfg_remove_property(con, |
| |
CFG_FILE_OPTION_ARG_SEPARATOR, str); |
| |
break; |
| |
} |
| |
|
| |
return ret; |
| } |
} |
| |
|
| return 0; /* failure */ |
return 0; /* failure */ |
| } /* }}} */ |
} /* }}} */ |
| |
|
| #if 0 |
|
| void |
|
| cfg_clear_multi_vals_separator(con) |
|
| const CFG_CONTEXT con; |
|
| { |
|
| cfg_clear_cmdline_multi_vals_separator(con); |
|
| cfg_clear_cfgfile_multi_vals_separator(con); |
|
| } |
|
| |
|
| int |
|
| cfg_add_multi_vals_separator(con, str) |
|
| const CFG_CONTEXT con; |
|
| char *str; |
|
| { |
|
| return cfg_add_cmdline_multi_vals_separator(con, str) |
|
| && cfg_add_cfgfile_multi_vals_separator(con, str); |
|
| } |
|
| |
|
| int |
|
| cfg_remove_multi_vals_separator(con, str) |
|
| const CFG_CONTEXT con; |
|
| char *str; |
|
| { |
|
| return cfg_remove_cmdline_multi_vals_separator(con, str) |
|
| && cfg_remove_cfgfile_multi_vals_separator(con, str); |
|
| } |
|
| |
|
| /* |
|
| * Functions for option argument separator manipulation. |
|
| */ |
|
| |
|
| void |
|
| cfg_clear_option_arg_separator(con) |
|
| const CFG_CONTEXT con; |
|
| { |
|
| cfg_clear_cmdline_option_arg_separator(con); |
|
| cfg_clear_cfgfile_option_arg_separator(con); |
|
| } |
|
| |
|
| int |
|
| cfg_add_option_arg_separator(con, str) |
|
| const CFG_CONTEXT con; |
|
| char *str; |
|
| { |
|
| return cfg_add_cmdline_option_arg_separator(con, str) |
|
| && cfg_add_cfgfile_option_arg_separator(con, str); |
|
| } |
|
| |
|
| int |
|
| cfg_remove_option_arg_separator(con, str) |
|
| const CFG_CONTEXT con; |
|
| char *str; |
|
| { |
|
| return cfg_remove_cmdline_option_arg_separator(con, str) |
|
| && cfg_remove_cfgfile_option_arg_separator(con, str); |
|
| } |
|
| |
|
| /* |
|
| * Functions for quotations string manipulation. |
|
| */ |
|
| |
|
| void |
|
| cfg_clear_quote_strings(con) |
|
| const CFG_CONTEXT con; |
|
| { |
|
| __cfg_clear_strdyn_array(&con->quote_prefix); |
|
| __cfg_clear_strdyn_array(&con->quote_postfix); |
|
| } |
|
| |
|
| int |
|
| cfg_add_quote_strings(con, prefix, postfix) |
|
| const CFG_CONTEXT con; |
|
| char *prefix; |
|
| char *postfix; |
|
| { |
|
| return __cfg_add_strdyn_array(&con->quote_prefix, prefix) |
|
| && __cfg_add_strdyn_array(&con->quote_postfix, postfix); |
|
| } |
|
| |
|
| int |
|
| cfg_remove_quote_strings(con, prefix, postfix) |
|
| const CFG_CONTEXT con; |
|
| char *prefix; |
|
| char *postfix; |
|
| { |
|
| return __cfg_remove_strdyn_array(&con->quote_prefix, prefix) |
|
| && __cfg_remove_strdyn_array(&con->quote_postfix, postfix); |
|
| } |
|
| |
|
| #endif |
|
| |
|
| /* Modeline for ViM {{{ |
/* Modeline for ViM {{{ |
| * vim:set ts=4: |
* vim:set ts=4: |
| * vim600:fdm=marker fdl=0 fdc=0: |
* vim600:fdm=marker fdl=0 fdc=0: |