diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/font/vfovf.c')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/font/vfovf.c | 165 |
1 files changed, 92 insertions, 73 deletions
diff --git a/Build/source/texk/web2c/luatexdir/font/vfovf.c b/Build/source/texk/web2c/luatexdir/font/vfovf.c index b52596f68e3..2c84ce0554b 100644 --- a/Build/source/texk/web2c/luatexdir/font/vfovf.c +++ b/Build/source/texk/web2c/luatexdir/font/vfovf.c @@ -1,7 +1,7 @@ /* vfovf.c - + Copyright 1996-2006 Han The Thanh <thanh@pdftex.org> - Copyright 2006-2008 Taco Hoekwater <taco@luatex.org> + Copyright 2006-2009 Taco Hoekwater <taco@luatex.org> This file is part of LuaTeX. @@ -23,7 +23,8 @@ #include "luatexfont.h" static const char _svn_version[] = - "$Id: vfovf.c 2271 2009-04-12 23:42:21Z oneiros $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/vfovf.c $"; + "$Id: vfovf.c 2414 2009-06-03 12:57:01Z taco $ " + "$URL: http://foundry.supelec.fr/svn/luatex/tags/beta-0.40.2/source/texk/web2c/luatexdir/font/vfovf.c $"; /* this is a hack! */ #define font_max 5000 @@ -128,40 +129,52 @@ boolean auto_expand_vf(internal_font_number f); /* forward */ /* get a byte from\.{VF} file */ -#define vf_byte(a) { real_eight_bits vf_tmp_b; \ - if (vf_cur>=vf_size) { \ - pdftex_fail("unexpected eof on virtual font"); \ - } \ - vf_tmp_b = vf_buffer[vf_cur++] ; a = vf_tmp_b; } - +#define vf_byte(a) \ +{ \ + real_eight_bits vf_tmp_b; \ + if (vf_cur >= vf_size) { \ + pdftex_fail("unexpected eof on virtual font"); \ + } \ + vf_tmp_b = vf_buffer[vf_cur++]; \ + a = vf_tmp_b; \ +} -#define vf_replace_z() { \ - vf_alpha=16; \ - while (vf_z>=040000000) { \ - vf_z= vf_z / 2; \ - vf_alpha += vf_alpha; \ - } \ - vf_beta=256 / vf_alpha; \ - vf_alpha=vf_alpha*vf_z; } +#define vf_replace_z() \ +{ \ + vf_alpha = 16; \ + while (vf_z >= 040000000) { \ + vf_z = vf_z / 2; \ + vf_alpha += vf_alpha; \ + } \ + vf_beta = 256 / vf_alpha; \ + vf_alpha = vf_alpha * vf_z; \ +} /* read |k| bytes as an integer from \.{VF} file */ +/* beware: the vf_read() macro differs from vf_read() in vftovp.web for 1...3 byte words */ + +#define vf_read(k, l) \ +{ \ + integer itmp = 0, dtmp = k, jtmp = 0; \ + while (dtmp > 0) { \ + vf_byte(jtmp); \ + if ((dtmp == (integer) k) && jtmp > 127) \ + jtmp = jtmp - 256; \ + itmp = itmp * 256 + jtmp; \ + decr(dtmp); \ + } \ + l = itmp; \ +} -#define vf_read(k,l) { integer itmp = 0, dtmp = k, jtmp = 0; \ - while (dtmp > 0) { \ - vf_byte(jtmp); \ - if ((dtmp==(integer)k) && jtmp>127) \ - jtmp = jtmp - 256; \ - itmp = itmp*256 + jtmp; \ - decr(dtmp); \ - } \ - l = itmp; } - -#define vf_read_u(k,l) { unsigned int dtmp=k, itmp = 0, jtmp = 0; \ - while (dtmp-- > 0) { \ - vf_byte(jtmp); \ - itmp = itmp*256 + jtmp; \ - } \ - l = itmp; } +#define vf_read_u(k, l) \ +{ \ + unsigned int dtmp = k, itmp = 0, jtmp = 0; \ + while (dtmp-- > 0) { \ + vf_byte(jtmp); \ + itmp = itmp * 256 + jtmp; \ + } \ + l = itmp; \ +} void pdf_check_vf_cur_val(void) { @@ -220,7 +233,7 @@ vf_def_font(internal_font_number f, unsigned char *vf_buffer, integer * vf_cr) k = k * 256 + vf_buffer[(*vf_cr)]; (*vf_cr)++; - fs = sqxfw(k, font_size(f)); + fs = store_scaled_f(k, font_size(f)); k = vf_buffer[(*vf_cr)]; (*vf_cr)++; @@ -339,16 +352,20 @@ int open_vf_file(char *fn, unsigned char **vbuffer, integer * vsize) /* life is easier if all internal font commands are fnt4 and all character commands are set4 or put4 */ -#define append_fnt_set(k) { \ - assert(k>0) ; \ - append_packet(packet_font_code); \ - append_four(k); } +#define append_fnt_set(k) \ +{ \ + assert(k > 0); \ + append_packet(packet_font_code); \ + append_four(k); \ +} -#define append_four(k) { \ - append_packet((k&0xFF000000)>>24); \ - append_packet((k&0x00FF0000)>>16); \ - append_packet((k&0x0000FF00)>>8); \ - append_packet((k&0x000000FF)); } +#define append_four(k) \ +{ \ + append_packet((k & 0xFF000000) >> 24); \ + append_packet((k & 0x00FF0000) >> 16); \ + append_packet((k & 0x0000FF00) >> 8); \ + append_packet((k & 0x000000FF)); \ +} /* some of these things happen twice, adding a define is simplest */ @@ -364,14 +381,17 @@ int open_vf_file(char *fn, unsigned char **vbuffer, integer * vsize) print_string(font_name(f)); \ print_string(".vf ignored "); } } -#define test_dsize() { int read_tmp; vf_read(4,read_tmp); \ - if ((read_tmp / 16) != font_dsize(f)) { \ - print_nlp(); \ - print_string("design size mismatch in font "); \ - print_string(font_name(f)); \ - print_string(".vf ignored"); \ - } } - +#define test_dsize() \ +{ \ + int read_tmp; \ + vf_read(4, read_tmp); \ + if ((read_tmp / 16) != font_dsize(f)) { \ + print_nlp(); \ + print_string("design size mismatch in font "); \ + print_string(font_name(f)); \ + print_string(".vf ignored"); \ + } \ +} int count_packet_bytes(real_eight_bits * vf_buf, int cur_bute, int count) { @@ -703,7 +723,7 @@ void do_vf(internal_font_number f) save_cur_byte = vf_cur; vf_byte(cmd); while ((cmd >= fnt_def1) && (cmd <= (fnt_def1 + 3))) { - vf_read((cmd - fnt_def1 + 1), junk); + vf_read_u((cmd - fnt_def1 + 1), junk); vf_read(4, junk); vf_read(4, junk); vf_read(4, junk); @@ -745,21 +765,20 @@ void do_vf(internal_font_number f) bad_vf("invalid character code"); } vf_read(4, k); - tfm_width = sqxfw(k, font_size(f)); + tfm_width = store_scaled_f(k, font_size(f)); } else { packet_length = cmd; vf_byte(cc); if (!char_exists(f, cc)) { bad_vf("invalid character code"); } - vf_read(3, k); - tfm_width = sqxfw(k, font_size(f)); + vf_read_u(3, k); /* cf. vftovp.web, line 1028 */ + tfm_width = store_scaled_f(k, font_size(f)); } if (packet_length < 0) bad_vf("negative packet length"); if (tfm_width != char_width(f, cc)) { - /* precisely 'one off' errors are rampant */ - if (abs(tfm_width - char_width(f, cc)) > 1) { + if (tfm_width != char_width(f, cc)) { print_nlp(); print_string("character width mismatch in font "); print_string(font_name(f)); @@ -1126,7 +1145,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) vf_byte(cs.b3); vf_read(4, k); - fs = sqxfw(k, atsize); + fs = store_scaled_f(k, atsize); lua_pushstring(L, "size"); lua_pushnumber(L, fs); lua_rawset(L, -3); @@ -1172,7 +1191,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) } else { packet_length = cmd; vf_byte(cc); - vf_read(3, tfm_width); + vf_read_u(3, tfm_width); } if (packet_length < 0) lua_bad_vf("negative packet length"); @@ -1216,7 +1235,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case set_rule: vf_read(4, h); vf_read(4, v); - make_command2("rule", sqxfw(h, atsize), sqxfw(v, atsize), + make_command2("rule", store_scaled_f(h, atsize), store_scaled_f(v, atsize), k); packet_length -= 8; break; @@ -1224,7 +1243,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) vf_read(4, h); vf_read(4, v); make_command0("push", k); - make_command2("rule", sqxfw(h, atsize), sqxfw(v, atsize), + make_command2("rule", store_scaled_f(h, atsize), store_scaled_f(v, atsize), k); make_command0("pop", k); packet_length -= 8; @@ -1260,7 +1279,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case right3: case right4: vf_read((cmd - right1 + 1), i); - make_command1("right", sqxfw(i, atsize), k); + make_command1("right", store_scaled_f(i, atsize), k); packet_length -= (cmd - right1 + 1); break; case w1: @@ -1268,7 +1287,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case w3: case w4: vf_read((cmd - w1 + 1), w); - make_command1("right", sqxfw(w, atsize), k); + make_command1("right", store_scaled_f(w, atsize), k); packet_length -= (cmd - w1 + 1); break; case x1: @@ -1276,7 +1295,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case x3: case x4: vf_read((cmd - x1 + 1), x); - make_command1("right", sqxfw(x, atsize), k); + make_command1("right", store_scaled_f(x, atsize), k); packet_length -= (cmd - x1 + 1); break; case down1: @@ -1284,7 +1303,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case down3: case down4: vf_read((cmd - down1 + 1), i); - make_command1("down", sqxfw(i, atsize), k); + make_command1("down", store_scaled_f(i, atsize), k); packet_length -= (cmd - down1 + 1); break; case y1: @@ -1292,7 +1311,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case y3: case y4: vf_read((cmd - y1 + 1), y); - make_command1("down", sqxfw(y, atsize), k); + make_command1("down", store_scaled_f(y, atsize), k); packet_length -= (cmd - y1 + 1); break; case z1: @@ -1300,7 +1319,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) case z3: case z4: vf_read((cmd - z1 + 1), z); - make_command1("down", sqxfw(z, atsize), k); + make_command1("down", store_scaled_f(z, atsize), k); packet_length -= (cmd - z1 + 1); break; case xxx1: @@ -1325,16 +1344,16 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) free(s); break; case w0: - make_command1("right", sqxfw(w, atsize), k); + make_command1("right", store_scaled_f(w, atsize), k); break; case x0: - make_command1("right", sqxfw(x, atsize), k); + make_command1("right", store_scaled_f(x, atsize), k); break; case y0: - make_command1("down", sqxfw(y, atsize), k); + make_command1("down", store_scaled_f(y, atsize), k); break; case z0: - make_command1("down", sqxfw(z, atsize), k); + make_command1("down", store_scaled_f(z, atsize), k); break; case nop: break; @@ -1389,7 +1408,7 @@ int make_vf_table(lua_State * L, char *cnom, scaled atsize) } -/* This function is called from |do_vf|, and fixes up the virtual data +/* This function is called from |do_vf|, and fixes up the virtual data inside an auto-expanded virtual font */ boolean auto_expand_vf(internal_font_number f) @@ -1558,7 +1577,7 @@ letter_space_font(halfword u, internal_font_number f, integer e) vf_packet_base[k] = new_vf_packet(k); for (c=font_bc(k);c<=font_ec(k);c++) { - string_room(17); + string_room(17); append_fnt_set(f); append_packet(right1 + 3); append_packet(tmp_b0); |