summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-09-21 16:06:12 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-09-21 16:06:12 -0700
commit307dc6d027483475d22cc1c58f21d6700e754afb (patch)
tree160c013547857c21c3359fdd098731018d9689d4
parent674f76e3df365a6768c485590acc95233d49f139 (diff)
downloadman-307dc6d027483475d22cc1c58f21d6700e754afb.tar.gz
man-307dc6d027483475d22cc1c58f21d6700e754afb.tar.bz2
man-307dc6d027483475d22cc1c58f21d6700e754afb.zip
Support four letter font names; fix font '5'.
-rw-r--r--man2html/man2html.c63
1 files changed, 34 insertions, 29 deletions
diff --git a/man2html/man2html.c b/man2html/man2html.c
index 32513dc..b2ff5b3 100644
--- a/man2html/man2html.c
+++ b/man2html/man2html.c
@@ -493,27 +493,37 @@ char *switchfont[25] = { "" , FC0 FO1, FC0 FO2, FC0 FO3, FC0 FO4,
static char *
change_to_font(int nr)
{
- int i;
- switch (nr) {
- case '0': nr++;
- case '1': case '2': case '3': case '4':
- nr = nr-'1'; break;
- case V('C','W'): case V('C','R'): nr=3; break;
- case V('C','O'): case V('C','I'): nr=4; break;
- case 'L': nr=3; break;
- case 'B': nr=2; break;
- case 'I': nr=1; break;
- case 0: case 1: case 2: case 3:
- break;
- case 'P': case 'R':
- default: nr=0; break;
- }
+ int i;
+ switch (nr) {
+ case '0':
+ nr++;
+ case '1': case '2': case '3': case '4': case '5':
+ nr -= '1';
+ break;
+ case V(' ', '0'):
+ nr++;
+ case V('1',' '): case V('2',' '): case V('3',' '):
+ case V('4',' '): case V('5',' '):
+ nr = nr / 256 - '1';
+ break;
+ case V('C','W'): case V('C','R'): nr=3; break;
+ case V('C','O'): case V('C','I'): nr=4; break;
+ case 'L': nr=3; break;
+ case 'B': nr=2; break;
+ case 'I': nr=1; break;
+ case 0: case 1: case 2: case 3: case 4:
+ break;
+ case 'P': case 'R':
+ default:
+ nr=0;
+ break;
+ }
- assert (nr >= 0 && nr < NFONTS);
+ assert (nr >= 0 && nr < NFONTS);
- i= current_font*NFONTS+nr;
- current_font=nr;
- return switchfont[i];
+ i= current_font*NFONTS+nr;
+ current_font=nr;
+ return switchfont[i];
}
static char sizebuf[200];
@@ -643,22 +653,17 @@ scan_escape(char *c) {
case 'f':
c++;
if (*c=='\\') {
+ int se = skip_escape;
+ skip_escape = 1;
c++;
c=scan_escape(c);
c--;
i=intresult;
+ skip_escape = se;
} else if (*c == '[' || *c == '(') {
c++;
- if (*c == ']' || *c == ')') {
- i = 0;
- } else if (c[1] == ']' || c[1] == ')') {
- i = *c++;
- } else if (c[2] == ']' || c[2] == ')') {
- i=c[0]*256+c[1];
- c += 2;
- } else {
- abort();
- }
+ i = str_to_code(c, ")]");
+ c += strcspn(c, ")]");
} else {
i=*c;
}