groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Groff] bullets render as question marks


From: Ingo Schwarze
Subject: Re: [Groff] bullets render as question marks
Date: Mon, 30 Nov 2015 23:40:22 +0100
User-agent: Mutt/1.5.23 (2014-03-12)

Hi Aaron,

Aaron Davies wrote on Mon, Nov 30, 2015 at 03:04:20PM -0500:
> On Nov 30, 2015, at 12:52 PM, Ingo Schwarze <address@hidden> wrote:
>> Aaron Davies wrote on Mon, Nov 30, 2015 at 12:38:13PM -0500:

>>> \(bu bullets in man pages are rendering as question marks under
>>> default settings for me

>> * Which version of groff are you running?

> on RHEL 6.7, 1.18.1.4; on RHEL 5.11, 1.18.1.1

Oh wow.  Those are extremely old versions of groff.
I haven't seen versions that old in production since 2009.

Groff 1.19 came out in 2004, so what you are running is more than
a decade out of date.

> $ locale
> LANG=en_US.UTF-8
> LC_ALL=C
> LC_CTYPE="C"

Hmm, i missed that GNU nroff(1) doesn't call setlocale(3), but
calls locale(1) in a different way, and, failing that, inspects
the environment directly.  Can you send the output of the following,
too, to figure out which output device is actually running?

  $ locale charmap
  $ env | grep -e LC_ALL -e LC_CTYPE

I suspect that you are running in -Tascii mode, but i'm not 100%
sure yet, it could still be -Tutf8.

> $ echo '\(bu' | nroff | hexdump -C
> 00000000  3f 0a 0a 0a 0a 0a 0a 0a  0a 0a 0a 0a 0a 0a 0a 0a  |?...............|

So, your problem is probably not related to man(1) or to the terminal,
but groff is actually producing wrong output.

For -Tascii output, in modern groff, the \(bu character
is defined by this statement in tmac/tty.tmac:

  .fchar \[bu] \z+o

In the source code repository, that line is present since 2002-03-24.
The file is usually loaded by these lines in troffrc:

  .do ds troffrc!ascii tty.tmac
  .do if d troffrc!\*[.T] \
  .  do mso \*[troffrc!\*[.T]]

So, can you please look at your file tmac/troffrc (usually located
in /usr/local/share/groff/<version>/ or a similar place) whether
it indeed includes tty.tmac, and can you look into your tty.tmac
(in the same directory) whether and how it defines \[bu]?


You can also try specifying the device explicitly:

  $ echo '\(bu' | groff -Tascii | hexdump -C
  $ echo '\(bu' | groff -mtty -Tascii | hexdump -C
  $ echo '\(bu' | groff -Tutf8 | hexdump -C
  $ echo '\(bu' | groff -mtty -Tutf8 | hexdump -C

Which output do those commands produce?


For UTF-8 tty output, in modern groff, \(bu is defined by the
following line in src/libs/libgroff/glyphuni.cpp:

  { "bu", "2022" },

That line is unchanged in the source code repo since 2002-11-03.
So the UTF-8 modes should work in any case, even without -mtty,
even with your ancient version of groff.

> on RHEL 6.7:
> 
> $ grep ^NROFF /etc/man.config
> NROFF         /usr/bin/nroff -c -mandoc 2>/dev/null

That looks reasonable.

> on RHEL 5.11:
> 
> $ grep ^NROFF /etc/man.config
> NROFF         /usr/bin/nroff -c --legacy NROFF_OLD_CHARSET -mandoc 2>/dev/null

I don't know what "--legacy NROFF_OLD_CHARSET" is supposed to mean,
but since you see the problem on RHEL 6.7 as well, it's doesn't seem
likely to be the cause of the problem.

Yours,
  Ingo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]