/* Display format types. */
#include <stdbool.h>
-#include <libpspp/str.h>
-#include <data/val-type.h>
+#include "data/val-type.h"
+#include "libpspp/str.h"
/* Format type categories.
bool fmt_from_io (int io, enum fmt_type *);
const char *fmt_date_template (enum fmt_type) PURE_FUNCTION;
+const char *fmt_gui_name (enum fmt_type);
\f
/* Format settings.
/* A prefix or suffix for a numeric output format. */
struct fmt_affix
{
- char *s; /* String contents of affix. */
+ char *s; /* String contents of affix, in UTF-8. */
+ int width; /* Display width in columns (see wcwidth()). */
};
/* A numeric output style. */
struct fmt_affix neg_suffix; /* Negative suffix. */
char decimal; /* Decimal point: '.' or ','. */
char grouping; /* Grouping character: ',', '.', or 0. */
+
+ /* A fmt_affix may require more bytes than its display width; for example,
+ U+00A5 (¥) is 3 bytes in UTF-8 but occupies only one display column.
+ This member is the sum of the number of bytes required by all of the
+ fmt_affix members in this struct, minus their display widths. Thus, it
+ can be used to size memory allocations: for example, the formatted
+ result of CCA20.5 requires no more than (20 + extra_bytes) bytes in
+ UTF-8. */
+ int extra_bytes;
};
int fmt_affix_width (const struct fmt_number_style *);