-/* $Id: term_ascii.c,v 1.50 2015/10/12 00:08:16 schwarze Exp $ */
+/* $Id: term_ascii.c,v 1.54 2016/07/31 09:29:13 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
#include "manconf.h"
#include "main.h"
-static struct termp *ascii_init(enum termenc, const struct mchars *,
- const struct manoutput *);
+static struct termp *ascii_init(enum termenc, const struct manoutput *);
static int ascii_hspan(const struct termp *,
const struct roffsu *);
static size_t ascii_width(const struct termp *, int);
static struct termp *
-ascii_init(enum termenc enc, const struct mchars *mchars,
- const struct manoutput *outopts)
+ascii_init(enum termenc enc, const struct manoutput *outopts)
{
#if HAVE_WCHAR
char *v;
p = mandoc_calloc(1, sizeof(struct termp));
- p->symtab = mchars;
p->line = 1;
p->tabwidth = 5;
p->defrmargin = p->lastrmargin = 78;
#if HAVE_WCHAR
if (TERMENC_ASCII != enc) {
+
+ /*
+ * Do not change any of this to LC_ALL. It might break
+ * the formatting by subtly changing the behaviour of
+ * various functions, for example strftime(3). As a
+ * worst case, it might even cause buffer overflows.
+ */
+
v = TERMENC_LOCALE == enc ?
- setlocale(LC_ALL, "") :
- setlocale(LC_CTYPE, "en_US.UTF-8");
+ setlocale(LC_CTYPE, "") :
+ setlocale(LC_CTYPE, UTF8_LOCALE);
if (NULL != v && MB_CUR_MAX > 1) {
p->enc = enc;
p->advance = locale_advance;
}
void *
-ascii_alloc(const struct mchars *mchars, const struct manoutput *outopts)
+ascii_alloc(const struct manoutput *outopts)
{
- return ascii_init(TERMENC_ASCII, mchars, outopts);
+ return ascii_init(TERMENC_ASCII, outopts);
}
void *
-utf8_alloc(const struct mchars *mchars, const struct manoutput *outopts)
+utf8_alloc(const struct manoutput *outopts)
{
- return ascii_init(TERMENC_UTF8, mchars, outopts);
+ return ascii_init(TERMENC_UTF8, outopts);
}
void *
-locale_alloc(const struct mchars *mchars, const struct manoutput *outopts)
+locale_alloc(const struct manoutput *outopts)
{
- return ascii_init(TERMENC_LOCALE, mchars, outopts);
+ return ascii_init(TERMENC_LOCALE, outopts);
}
static void
}
void
-ascii_sepline(void *arg)
+terminal_sepline(void *arg)
{
struct termp *p;
size_t i;
p = (struct termp *)arg;
- p->line += 3;
- putchar('\n');
+ (*p->endline)(p);
for (i = 0; i < p->defrmargin; i++)
- putchar('-');
- putchar('\n');
- putchar('\n');
+ (*p->letter)(p, '-');
+ (*p->endline)(p);
+ (*p->endline)(p);
}
static size_t