ref: 23c9c796ad136f6bac96e21f3add6fda8332ebb9
parent: 93fbb40f78a4b3d264c55907b9bb345bebf8d785
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat Apr 20 14:48:31 EDT 2013
dev: more consistent special glyph names
--- a/dev.c
+++ b/dev.c
@@ -123,8 +123,13 @@
struct glyph *dev_glyph(char *c, int fn)
{- struct glyph *g = font_find(fn_font[fn], c);
+ struct glyph *g;
int i;
+ if (c[0] == '\\' && c[1] == '\\')
+ c++;
+ if (c[0] == '\\' && c[1] == '(')+ c += 2;
+ g = font_find(fn_font[fn], c);
if (g)
return g;
for (i = 0; i < fn_n; i++)
--- a/out.c
+++ b/out.c
@@ -193,38 +193,40 @@
void out_line(char *s)
{struct glyph *g;
- char c[GNLEN * 2];
+ char c[GNLEN * 4];
char arg[ILNLEN];
while (*s) {s = utf8get(c, s);
if (c[0] == '\\') {- s = utf8get(c, s);
- if (c[0] == '(') {- s = utf8get(c, s);
+ s = utf8get(c + 1, s);
+ if (c[1] == '(') {+ s = utf8get(c + 2, s);
s = utf8get(c + strlen(c), s);
- } else if (strchr("DfhsvX", c[0])) {- s = escarg(s, arg, c[0]);
- if (c[0] == 'D') {+ } else if (c[1] == '\\') {+ c[1] = '\0';
+ } else if (strchr("DfhsvX", c[1])) {+ s = escarg(s, arg, c[1]);
+ if (c[1] == 'D') {out_draw(arg, NULL);
continue;
}
- if (c[0] == 'f') {+ if (c[1] == 'f') {out_ft(dev_font(arg));
continue;
}
- if (c[0] == 'h') {+ if (c[1] == 'h') { outnn("h%d", eval(arg, 0, 'm'));continue;
}
- if (c[0] == 's') {+ if (c[1] == 's') {out_ps(eval(arg, o_s, '\0'));
continue;
}
- if (c[0] == 'v') {+ if (c[1] == 'v') { outnn("v%d", eval(arg, 0, 'v'));continue;
}
- if (c[0] == 'X') {+ if (c[1] == 'X') { out("x X %s\n", arg);continue;
}
@@ -232,11 +234,10 @@
}
g = dev_glyph(c, o_f);
if (g) {- if (utf8len(c[0]) == strlen(c)) {+ if (utf8len(c[0]) == strlen(c))
outnn("c%s%s", c, c[1] ? "\n" : "");- } else {- out("C%s\n", c);- }
+ else
+ out("C%s\n", c[0] == '\\' && c[1] == '(' ? c + 2 : c);}
outnn("h%d", charwid(g ? g->wid : dev_spacewid(), o_s));}
--- a/ren.c
+++ b/ren.c
@@ -517,11 +517,11 @@
/* read one character and place it inside adj buffer */
static int ren_char(struct adj *adj, int (*next)(void), void (*back)(int))
{- char c[GNLEN * 2];
+ char c[GNLEN * 4];
char arg[ILNLEN];
char widbuf[16];
struct glyph *g;
- int esc = 0, n;
+ int n;
nextchar(c, next);
if (c[0] == ' ' || c[0] == '\n') {adj_put(adj, charwid(dev_spacewid(), n_s), c);
@@ -528,21 +528,20 @@
return 0;
}
if (c[0] == '\\') {- esc = 1;
- nextchar(c, next);
- if (c[0] == '(') {- int l = nextchar(c, next);
- l += nextchar(c + l, next);
- c[l] = '\0';
- } else if (strchr(" DdfhkrsuvwXx0^|{}", c[0])) {- if (c[0] == 'w') {+ nextchar(c + 1, next);
+ if (c[1] == '(') {+ int l = nextchar(c + 2, next);
+ l += nextchar(c + 2 + l, next);
+ c[2 + l] = '\0';
+ } else if (strchr(" DdfhkLlrsuvwXx0^|{}", c[1])) {+ if (c[1] == 'w') {n = ren_wid(next, back);
sprintf(widbuf, "%d", n);
in_push(widbuf, NULL);
return 0;
}
- escarg_ren(arg, c[0]);
- ren_cmd(adj, c[0], arg);
+ escarg_ren(arg, c[1]);
+ ren_cmd(adj, c[1], arg);
return 0;
}
}
@@ -555,12 +554,8 @@
adj_put(adj, 0, "\\f(%02d", n_f);
ren_f = n_f;
}
- if (utf8len(c[0]) == strlen(c))
- sprintf(arg, "%s%s", esc ? "\\" : "", c);
- else
- sprintf(arg, "\\(%s", c);
g = dev_glyph(c, n_f);
- adj_put(adj, charwid(g ? g->wid : dev_spacewid(), n_s), arg);
+ adj_put(adj, charwid(g ? g->wid : dev_spacewid(), n_s), c);
return g ? g->type : 0;
}
--
⑨