-
-/* Find the grouping characters in CC_STRING and sets *GROUPING and *DECIMAL
- appropriately. Returns true if successful, false otherwise. */
-static bool
-find_cc_separators (const char *cc_string, char *decimal, char *grouping)
-{
- const char *sp;
- int comma_cnt, dot_cnt;
-
- /* Count commas and periods. There must be exactly three of
- one or the other, except that an apostrophe escapes a
- following comma or period. */
- comma_cnt = dot_cnt = 0;
- for (sp = cc_string; *sp; sp++)
- if (*sp == ',')
- comma_cnt++;
- else if (*sp == '.')
- dot_cnt++;
- else if (*sp == '\'' && (sp[1] == '.' || sp[1] == ',' || sp[1] == '\''))
- sp++;
-
- if ((comma_cnt == 3) == (dot_cnt == 3))
- return false;
-
- if (comma_cnt == 3)
- {
- *decimal = '.';
- *grouping = ',';
- }
- else
- {
- *decimal = ',';
- *grouping = '.';
- }
- return true;
-}
-
-/* Extracts a token from IN into a newly allocated string AFFIXP. Tokens are
- delimited by GROUPING. Returns the first character following the token. */
-static const char *
-extract_cc_token (const char *in, int grouping, char **affixp)
-{
- char *out;
-
- out = *affixp = xmalloc (strlen (in) + 1);
- for (; *in != '\0' && *in != grouping; in++)
- {
- if (*in == '\'' && in[1] == grouping)
- in++;
- *out++ = *in;
- }
- *out = '\0';
-
- if (*in == grouping)
- in++;
- return in;
-}
-