/* PSPP - a program for statistical analysis.
- Copyright (C) 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2009, 2010, 2011, 2012 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
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`"
"abcdefghijklmnopqrstuvwxyz{|}~");
- struct substring out, cr, lf;
+ struct substring out, cr, lf, space;
bool ok;
memset (e, 0, sizeof *e);
cr = recode_substring_pool (name, "UTF-8", ss_cstr ("\r"), NULL);
lf = recode_substring_pool (name, "UTF-8", ss_cstr ("\n"), NULL);
- ok = cr.length >= 1 && cr.length <= MAX_UNIT && cr.length == lf.length;
+ space = recode_substring_pool (name, "UTF-8", ss_cstr (" "), NULL);
+ ok = (cr.length >= 1
+ && cr.length <= MAX_UNIT
+ && cr.length == lf.length
+ && cr.length == space.length);
if (!ok)
{
fprintf (stderr, "warning: encoding `%s' is not supported.\n", name);
ss_dealloc (&cr);
ss_dealloc (&lf);
+ ss_dealloc (&space);
ss_alloc_substring (&cr, ss_cstr ("\r"));
ss_alloc_substring (&lf, ss_cstr ("\n"));
+ ss_alloc_substring (&space, ss_cstr (" "));
}
e->unit = cr.length;
memcpy (e->cr, cr.string, e->unit);
memcpy (e->lf, lf.string, e->unit);
+ memcpy (e->space, space.string, e->unit);
ss_dealloc (&cr);
ss_dealloc (&lf);
+ ss_dealloc (&space);
out = recode_substring_pool ("UTF-8", name, in, NULL);
e->is_ascii_compatible = ss_equals (in, out);
ss_dealloc (&out);
+ if (!e->is_ascii_compatible && e->unit == 1)
+ {
+ out = recode_substring_pool ("UTF-8", name, ss_cstr ("A"), NULL);
+ e->is_ebcdic_compatible = (out.length == 1
+ && (uint8_t) out.string[0] == 0xc1);
+ ss_dealloc (&out);
+ }
+ else
+ e->is_ebcdic_compatible = false;
+
return ok;
}
return e.is_ascii_compatible;
}
+bool
+is_encoding_ebcdic_compatible (const char *encoding)
+{
+ struct encoding_info e;
+
+ get_encoding_info (&e, encoding);
+ return e.is_ebcdic_compatible;
+}
+
/* Returns true if iconv can convert ENCODING to and from UTF-8,
otherwise false. */
bool