diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2015-01-21 20:33:25 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2015-01-21 20:33:25 +0000 |
commit | 1f42b16d7620434847b937d82a463bd7cbe63255 (patch) | |
tree | 4ee3ab1a6a2c6f5ee76f69a33d0b12a1aae40bf8 /term.c | |
parent | 28c98469ed60b736b7c70dc094a9d94197a1568f (diff) | |
download | mandoc-1f42b16d7620434847b937d82a463bd7cbe63255.tar.gz |
Rudimentary implementation of the roff(7) \o escape sequence (overstrike).
This is of some relevance because the pod2man(1) preamble abuses it
for the icelandic letter Thorn, instead of simply using \(TP and \(Tp.
Missing feature found by sthen@ in DateTime::Locale::is_IS(3p).
Diffstat (limited to 'term.c')
-rw-r--r-- | term.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -1,7 +1,7 @@ /* $Id$ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2010-2015 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 @@ -495,6 +495,17 @@ term_word(struct termp *p, const char *word) case ESCAPE_SKIPCHAR: p->flags |= TERMP_SKIPCHAR; continue; + case ESCAPE_OVERSTRIKE: + cp = seq + sz; + while (seq < cp) { + if (*seq == '\\') { + mandoc_escape(&seq, NULL, NULL); + continue; + } + encode1(p, *seq++); + if (seq < cp) + encode(p, "\b", 1); + } default: continue; } @@ -716,6 +727,20 @@ term_strlen(const struct termp *p, const char *cp) case ESCAPE_SKIPCHAR: skip = 1; continue; + case ESCAPE_OVERSTRIKE: + rsz = 0; + rhs = seq + ssz; + while (seq < rhs) { + if (*seq == '\\') { + mandoc_escape(&seq, NULL, NULL); + continue; + } + i = (*p->width)(p, *seq++); + if (rsz < i) + rsz = i; + } + sz += rsz; + continue; default: continue; } |