summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/omegafonts/parse_ofm.c
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2010-01-08 15:04:43 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2010-01-08 15:04:43 +0000
commit4b4eef55581b13870b9c50a659869b08eab3115f (patch)
treec7dcc5c291270e4347bf4d13affebba15487159b /Build/source/texk/web2c/omegafonts/parse_ofm.c
parentef3d3d2a405439fbfb04894c5185025dcd0a7f46 (diff)
texk/web2c/omegafonts: several bug fixes and additional test cases
git-svn-id: svn://tug.org/texlive/trunk@16640 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/omegafonts/parse_ofm.c')
-rw-r--r--Build/source/texk/web2c/omegafonts/parse_ofm.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/Build/source/texk/web2c/omegafonts/parse_ofm.c b/Build/source/texk/web2c/omegafonts/parse_ofm.c
index 82eb53b2237..fc22024233b 100644
--- a/Build/source/texk/web2c/omegafonts/parse_ofm.c
+++ b/Build/source/texk/web2c/omegafonts/parse_ofm.c
@@ -103,7 +103,7 @@ parse_ofm(boolean read_ovf)
void
ofm_organize(void)
{
- unsigned char_ptr,copies,i,j;
+ unsigned copies,i;
ofm_on = false; ofm_level = OFM_NOLEVEL; lf = 0; lh = 0;
nco = 0; ncw = 0; npc = 0;
@@ -139,7 +139,7 @@ ofm_organize(void)
case OFM_TFM: { start_pos = 2; check_sum_pos = 24; break; }
case OFM_LEVEL0: { start_pos = 8; check_sum_pos = 56; break; }
case OFM_LEVEL1: { start_pos = 8; check_sum_pos = 116; break; }
- default: { fatal_error_1("OFMLEVEL %d not supported", ofm_level-1);
+ default: { fatal_error_1("OFMLEVEL %d not supported", ofm_level-OFM_LEVEL0);
break; }
}
design_size_pos = check_sum_pos+4;
@@ -281,24 +281,38 @@ ofm_organize(void)
break;
}
case OFM_LEVEL1: {
- char_ptr = 4*char_base;
+ char_start = 4*char_base;
i = bc;
while (i<=ec) {
init_character(i,NULL);
- copies = 1+256*ofm[char_ptr+8]+ofm[char_ptr+9];
- for (j=1; j<=copies; j++) {
- char_start = char_ptr;
- i++;
- }
- char_ptr = char_ptr + bytes_per_entry;
+ current_character->index_indices[C_WD] =
+ ((ofm[char_start] & 0xff) << 8) |
+ (ofm[char_start+1] & 0xff);
+ current_character->index_indices[C_HT] =
+ ofm[char_start+2] & 0xff;
+ current_character->index_indices[C_DP] =
+ ofm[char_start+3] & 0xff;
+ current_character->index_indices[C_IC] =
+ ofm[char_start+4] & 0xff;
+ current_character->tag =
+ ofm[char_start+5] & 0x3;
+ if (current_character->tag == TAG_LIG) no_labels++;
+ current_character->remainder =
+ ((ofm[char_start+6] & 0xff) << 8) |
+ (ofm[char_start+7] & 0xff);
+ copies = 256*ofm[char_start+8]+ofm[char_start+9];
+ /* Handle character params */
+ copy_characters(i, copies);
+ i += copies + 1;
+ char_start += bytes_per_entry;
}
- if (char_ptr != (4*(char_base+ncw)))
+ if (char_start != (4*(char_base+ncw)))
fatal_error_0("Length of char info table does not "
"correspond to specification");
break;
}
default: {
- fatal_error_1("Inappropriate font level (%d)", ofm_level-1);
+ fatal_error_1("Inappropriate font level (%d)", ofm_level-OFM_LEVEL0);
}
}
width_base = char_base+ncw;
@@ -306,17 +320,9 @@ ofm_organize(void)
depth_base = height_base+nh;
italic_base = depth_base+nd;
lig_kern_base = italic_base+ni;
- if (ofm_level==OFM_TFM) {
- kern_base = lig_kern_base+nl;
- } else {
- kern_base = lig_kern_base+2*nl;
- }
+ kern_base = lig_kern_base+ncl;
exten_base = kern_base+nk;
- if (ofm_level==OFM_TFM) {
- param_base = exten_base+ne-1;
- } else {
- param_base = exten_base+2*ne-1;
- }
+ param_base = exten_base+nce-1;
}
void