]> git.cameronkatri.com Git - mandoc.git/commitdiff
Flip on printing `?' at Unicode codepoints in -Tascii, -Tpdf, and -Tps.
authorKristaps Dzonsons <kristaps@bsd.lv>
Tue, 17 May 2011 11:55:08 +0000 (11:55 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Tue, 17 May 2011 11:55:08 +0000 (11:55 +0000)
The reasoning behind printing SOMETHING at a Unicode codepoint is
because the input is not "wrong" (we suppress printing of "wrong"
things).  It's just that ASCII can't handle it.

term.c

diff --git a/term.c b/term.c
index 0ea561cb8959775e5d758599a441ae694c3543aa..bfedefb0ff31e718b8f5f80d5ce3ddd619853414 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/*     $Id: term.c,v 1.191 2011/05/15 22:29:50 kristaps Exp $ */
+/*     $Id: term.c,v 1.192 2011/05/17 11:55:08 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -451,6 +451,9 @@ term_word(struct termp *p, const char *word)
                        break;
 
                switch (esc) {
                        break;
 
                switch (esc) {
+               case (ESCAPE_UNICODE):
+                       encode(p, "?", 1);
+                       break;
                case (ESCAPE_NUMBERED):
                        if ('\0' != (c = mchars_num2char(seq, sz)))
                                encode(p, &c, 1);
                case (ESCAPE_NUMBERED):
                        if ('\0' != (c = mchars_num2char(seq, sz)))
                                encode(p, &c, 1);
@@ -584,6 +587,7 @@ term_strlen(const struct termp *p, const char *cp)
                for (i = 0; i < rsz; i++)
                        sz += (*p->width)(p, *cp++);
 
                for (i = 0; i < rsz; i++)
                        sz += (*p->width)(p, *cp++);
 
+               c = 0;
                switch (*cp) {
                case ('\\'):
                        cp++;
                switch (*cp) {
                case ('\\'):
                        cp++;
@@ -591,8 +595,12 @@ term_strlen(const struct termp *p, const char *cp)
                        switch (mandoc_escape(&cp, &seq, &ssz)) {
                        case (ESCAPE_ERROR):
                                return(sz);
                        switch (mandoc_escape(&cp, &seq, &ssz)) {
                        case (ESCAPE_ERROR):
                                return(sz);
+                       case (ESCAPE_UNICODE):
+                               c = '?';
+                               /* FALLTHROUGH */
                        case (ESCAPE_NUMBERED):
                        case (ESCAPE_NUMBERED):
-                               c = mchars_num2char(seq, ssz);
+                               if ('\0' != c)
+                                       c = mchars_num2char(seq, ssz);
                                if ('\0' != c)
                                        sz += (*p->width)(p, c);
                                break;
                                if ('\0' != c)
                                        sz += (*p->width)(p, c);
                                break;