/* PSPP - a program for statistical analysis.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2010, 2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <config.h>
-#include "format-guesser.h"
+#include "data/format-guesser.h"
#include <stdlib.h>
#include <string.h>
-#include "c-ctype.h"
-#include "minmax.h"
-#include "xalloc.h"
+#include "data/format.h"
+#include "data/settings.h"
+#include "libpspp/assertion.h"
+#include "libpspp/str.h"
-#include <data/format.h>
-#include <data/settings.h>
-#include <libpspp/assertion.h>
-#include <libpspp/str.h>
+#include "gl/c-ctype.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
/* A token in which potential date or time fields are broken.
/* www */
{ FMT_WKDAY, 1, {DT_WEEKDAY} },
- /* mmm */
- { FMT_MONTH, 1, {DT_MONTH} },
+ /* mmm
+
+ We require a spelled-out English month so that
+ single-character Roman numerals like "i" and "x" don't get
+ detected as months. The latter is particularly common in
+ the password field of /etc/passwd-like files. */
+ { FMT_MONTH, 1, {DT_ENGLISH_MONTH} },
};
/* Number of recognized date syntax formats. */
int c;
/* Skip leading "$" and optional following white space. */
- has_dollar = ss_match_char (&s, '$');
+ has_dollar = ss_match_byte (&s, '$');
if (has_dollar)
ss_ltrim (&s, ss_cstr (CC_SPACES));
/* Skip optional sign. */
- ss_match_char_in (&s, ss_cstr ("+-"));
+ ss_match_byte_in (&s, ss_cstr ("+-"));
/* Skip digits punctuated by commas and dots. We don't know
whether the decimal point is a comma or a dot, so for now we
}
/* Skip the optional exponent. */
- has_exp = ss_match_char_in (&s, ss_cstr ("eEdD")) != EOF;
- has_exp_sign = ss_match_char_in (&s, ss_cstr ("-+")) != EOF;
+ has_exp = ss_match_byte_in (&s, ss_cstr ("eEdD")) != EOF;
+ has_exp_sign = ss_match_byte_in (&s, ss_cstr ("-+")) != EOF;
if (has_exp_sign)
- ss_match_char (&s, ' ');
+ ss_match_byte (&s, ' ');
exp_digits = ss_ltrim (&s, ss_cstr (CC_DIGITS));
if ((has_exp || has_exp_sign) && !exp_digits)
{
}
/* Skip optional '%'. */
- has_percent = ss_match_char (&s, '%');
+ has_percent = ss_match_byte (&s, '%');
if (has_dollar && has_percent)
{
/* A valid number cannot have both '$' and '%'. */
ss_advance (s, 1);
token = recognize_identifier_token (s);
if (token)
- ss_match_char_in (s, ss_cstr (CC_SPACES));
+ ss_match_byte_in (s, ss_cstr (CC_SPACES));
else
token = DT_DELIM | DT_SPACE;
return token;
size_t digit_cnt = ss_get_long (s, &value);
enum date_token token = 0;
- if (ss_match_char (s, settings_get_decimal_char (FMT_F))
+ if (ss_match_byte (s, settings_get_decimal_char (FMT_F))
&& tokens_seen & DT_COLON
&& value <= 59)
{