]> git.cameronkatri.com Git - mandoc.git/blobdiff - term.c
In the validators, translate obsolete macro aliases (Lp, Ot, LP, P)
[mandoc.git] / term.c
diff --git a/term.c b/term.c
index 71fd73d5d81f8355a7d4b4449deb5afd08023015..264d0896ad3b4e8586eba93f7d1c410895ec3406 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,7 +1,7 @@
-/*     $Id: term.c,v 1.272 2017/06/14 18:23:37 schwarze Exp $ */
+/*     $Id: term.c,v 1.276 2018/10/25 01:32:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2018 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -129,7 +129,7 @@ term_flushln(struct termp *p)
            p->maxrmargin - p->viscol - vbl : 0;
        vis = vend = 0;
 
-       if ((p->flags && TERMP_MULTICOL) == 0)
+       if ((p->flags & TERMP_MULTICOL) == 0)
                p->tcol->col = 0;
        while (p->tcol->col < p->tcol->lastcol) {
 
@@ -510,6 +510,7 @@ term_word(struct termp *p, const char *word)
                        term_fontrepl(p, TERMFONT_BI);
                        continue;
                case ESCAPE_FONT:
+               case ESCAPE_FONTCW:
                case ESCAPE_FONTROMAN:
                        term_fontrepl(p, TERMFONT_NONE);
                        continue;
@@ -525,10 +526,25 @@ term_word(struct termp *p, const char *word)
                        else if (*word == '\0')
                                p->flags |= (TERMP_NOSPACE | TERMP_NONEWLINE);
                        continue;
+               case ESCAPE_DEVICE:
+                       if (p->type == TERMTYPE_PDF)
+                               encode(p, "pdf", 3);
+                       else if (p->type == TERMTYPE_PS)
+                               encode(p, "ps", 2);
+                       else if (p->enc == TERMENC_ASCII)
+                               encode(p, "ascii", 5);
+                       else
+                               encode(p, "utf8", 4);
+                       continue;
                case ESCAPE_HORIZ:
+                       if (*seq == '|') {
+                               seq++;
+                               uc = -p->col;
+                       } else
+                               uc = 0;
                        if (a2roffsu(seq, &su, SCALE_EM) == NULL)
                                continue;
-                       uc = term_hen(p, &su);
+                       uc += term_hen(p, &su);
                        if (uc > 0)
                                while (uc-- > 0)
                                        bufferc(p, ASCII_NBRSP);
@@ -855,6 +871,21 @@ term_strlen(const struct termp *p, const char *cp)
                                                sz += cond_width(p, uc, &skip);
                                }
                                continue;
+                       case ESCAPE_DEVICE:
+                               if (p->type == TERMTYPE_PDF) {
+                                       rhs = "pdf";
+                                       rsz = 3;
+                               } else if (p->type == TERMTYPE_PS) {
+                                       rhs = "ps";
+                                       rsz = 2;
+                               } else if (p->enc == TERMENC_ASCII) {
+                                       rhs = "ascii";
+                                       rsz = 5;
+                               } else {
+                                       rhs = "utf8";
+                                       rsz = 4;
+                               }
+                               break;
                        case ESCAPE_SKIPCHAR:
                                skip = 1;
                                continue;