diff options
author | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
---|---|---|
committer | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
commit | c6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch) | |
tree | 1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/web2c/eptexdir/fam256.ch | |
parent | 07ee7222e389b0777456b427a55c22d0e6ffd267 (diff) |
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/eptexdir/fam256.ch')
-rw-r--r-- | Build/source/texk/web2c/eptexdir/fam256.ch | 1537 |
1 files changed, 0 insertions, 1537 deletions
diff --git a/Build/source/texk/web2c/eptexdir/fam256.ch b/Build/source/texk/web2c/eptexdir/fam256.ch deleted file mode 100644 index 583c5b8d21a..00000000000 --- a/Build/source/texk/web2c/eptexdir/fam256.ch +++ /dev/null @@ -1,1537 +0,0 @@ -% fam256.ch -% (C) 2009--2017 by Hironori Kitagawa. -% -% This patch is derived from om16bit.ch and omfi.ch (both in Omega). -% (Omega is copyright by John Plaice and Yannis Haralambous.) -% -%----------------------------------------------- -@x -@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; - if you change this, you should also change |iinf_hyphen_size|.} -@y -@d hyph_prime=607 {another prime for hashing \.{\\hyphenation} exceptions; - if you change this, you should also change |iinf_hyphen_size|.} -@d text_size=0 {size code for the largest size in a family} -@d script_size=256 {size code for the medium size in a family} -@d script_script_size=512 {size code for the smallest size in a family} -@z -%----------------------------------------------- -@x -@d not_found4=49 {like |not_found|, when there's more than four} -@y -@d not_found4=49 {like |not_found|, when there's more than four} -@d not_found5=50 {like |not_found|, when there's more than five} -@z -%----------------------------------------------- -@x -specifies the order of infinity to which glue setting applies (|normal|, -|fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -@y -specifies the order of infinity to which glue setting applies (|normal|, -|sfi|, |fil|, |fill|, or |filll|). The |subtype| field is not used in \TeX. -@z -%----------------------------------------------- -@x -orders of infinity (|normal|, |fil|, |fill|, or |filll|) -@y -orders of infinity (|normal|, |sfi|, |fil|, |fill|, or |filll|) -@z -%----------------------------------------------- -@x -@d fil=1 {first-order infinity} -@d fill=2 {second-order infinity} -@d filll=3 {third-order infinity} -@y -@d sfi=1 {first-order infinity} -@d fil=2 {second-order infinity} -@d fill=3 {third-order infinity} -@d filll=4 {fourth-order infinity} -@z -%----------------------------------------------- -@x -@!glue_ord=normal..filll; {infinity to the 0, 1, 2, or 3 power} -@y -@!glue_ord=normal..filll; {infinity to the 0, 1, 2, 3, or 4 power} -@z -%----------------------------------------------- -@x -@d fil_glue==zero_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} -@y -@d sfi_glue==zero_glue+glue_spec_size {\.{0pt plus 1fi minus 0pt}} -@d fil_glue==sfi_glue+glue_spec_size {\.{0pt plus 1fil minus 0pt}} -@z -%----------------------------------------------- -@x -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ -@y -stretch(sfi_glue):=unity; stretch_order(sfi_glue):=sfi;@/ -stretch(fil_glue):=unity; stretch_order(fil_glue):=fil;@/ -stretch(fill_glue):=unity; stretch_order(fill_glue):=fill;@/ -@z -%----------------------------------------------- -@x - begin print("fil"); - while order>fil do -@y - begin print("fi"); - while order>sfi do -@z -%----------------------------------------------- -@x -@d last_item=math_given+1 {most recent item ( \.{\\lastpenalty}, -@y -@d omath_given=math_given+1 {math code defined by \.{\\omathchardef}} -@d last_item=omath_given+1 {most recent item ( \.{\\lastpenalty}, -@z -%----------------------------------------------- -@x -@d math_font_base=cur_font_loc+1 {table of 48 math font numbers} -@d cur_jfont_loc=math_font_base+48 -@y -@d math_font_base=cur_font_loc+1 {table of 768 math font numbers} -@d cur_jfont_loc=math_font_base+768 -@z -%----------------------------------------------- -@x -@d var_code==@'70000 {math code meaning ``use the current family''} -@y -@d var_code==@"70000 {math code meaning ``use the current family''} -@z -%----------------------------------------------- -@x -for k:=math_font_base to math_font_base+47 do eqtb[k]:=eqtb[cur_font_loc]; -@y -for k:=math_font_base to math_font_base+767 do eqtb[k]:=eqtb[cur_font_loc]; -@z -%----------------------------------------------- -@x -begin if n=cur_font_loc then print("current font") -else if n<math_font_base+16 then - begin print_esc("textfont"); print_int(n-math_font_base); - end -else if n<math_font_base+32 then - begin print_esc("scriptfont"); print_int(n-math_font_base-16); - end -else begin print_esc("scriptscriptfont"); print_int(n-math_font_base-32); -@y -begin if n=cur_font_loc then print("current font") -else if n<math_font_base+script_size then - begin print_esc("textfont"); print_int(n-math_font_base); - end -else if n<math_font_base+script_script_size then - begin print_esc("scriptfont"); print_int(n-math_font_base-script_size); - end -else begin print_esc("scriptscriptfont"); - print_int(n-math_font_base-script_script_size); -@z -%----------------------------------------------- -@x -@d del_code(#)==eqtb[del_code_base+#].int -@y -@d del_code(#)==eqtb[del_code_base+#].int -@d del_code1(#)==getintone(eqtb[del_code_base+#]) -@z -%----------------------------------------------- -@x -for k:=0 to 255 do del_code(k):=-1; -del_code("."):=0; {this null delimiter is used in error recovery} -@y -for k:=0 to 255 do - begin del_code(k):=-1; setintone(eqtb[del_code_base+k],-1); - end; -del_code("."):=0; setintone(eqtb[del_code_base+"."],0); - {this null delimiter is used in error recovery} -@z -%----------------------------------------------- -@x -primitive("delimiter",delim_num,0);@/ -@!@:delimiter_}{\.{\\delimiter} primitive@> -@y -primitive("delimiter",delim_num,0);@/ -@!@:delimiter_}{\.{\\delimiter} primitive@> -primitive("odelimiter",delim_num,1);@/ -@!@:delimiter_}{\.{\\odelimiter} primitive@> -@z -%----------------------------------------------- -@x -primitive("mathaccent",math_accent,0);@/ -@!@:math_accent_}{\.{\\mathaccent} primitive@> -primitive("mathchar",math_char_num,0);@/ -@!@:math_char_}{\.{\\mathchar} primitive@> -@y -primitive("mathaccent",math_accent,0);@/ -@!@:math_accent_}{\.{\\mathaccent} primitive@> -primitive("mathchar",math_char_num,0);@/ -@!@:math_char_}{\.{\\mathchar} primitive@> -primitive("omathaccent",math_accent,1);@/ -@!@:math_accent_}{\.{\\omathaccent} primitive@> -primitive("omathchar",math_char_num,1);@/ -@!@:math_char_}{\.{\\omathchar} primitive@> -@z -%----------------------------------------------- -@x -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -@y -primitive("radical",radical,0);@/ -@!@:radical_}{\.{\\radical} primitive@> -primitive("oradical",radical,1);@/ -@!@:radical_}{\.{\\oradical} primitive@> -@z -%----------------------------------------------- -@x -delim_num: print_esc("delimiter"); -@y -delim_num: if chr_code=0 then print_esc("delimiter") - else print_esc("odelimiter"); -@z -@x -math_accent: print_esc("mathaccent"); -math_char_num: print_esc("mathchar"); -@y -math_accent: if chr_code=0 then print_esc("mathaccent") - else print_esc("omathaccent"); -math_char_num: if chr_code=0 then print_esc("mathchar") - else print_esc("omathchar"); -@z -@x -radical: print_esc("radical"); -@y -radical: if chr_code=0 then print_esc("radical") - else print_esc("oradical"); -@z -%----------------------------------------------- -@x -@p procedure eq_word_define(@!p:pointer;@!w:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; -assign_trace(p,"into")@;@/ -exit:end; -@y -@p procedure eq_word_define(@!p:pointer;@!w:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; -assign_trace(p,"into")@;@/ -exit:end; -@# -procedure del_eq_word_define(@!p:pointer;@!w,wone:integer); -label exit; -begin if eTeX_ex and(eqtb[p].int=w)and(getintone(eqtb[p])=wone) then - begin assign_trace(p,"reassigning")@;@/ - return; - end; -assign_trace(p,"changing")@;@/ -if xeq_level[p]<>cur_level then - begin eq_save(p,xeq_level[p]); xeq_level[p]:=cur_level; - end; -eqtb[p].int:=w; setintone(eqtb[p],wone); -assign_trace(p,"into")@;@/ -exit:end; -@z -%----------------------------------------------- -@x -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@y -procedure geq_word_define(@!p:pointer;@!w:integer); {global |eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@# -procedure del_geq_word_define(@!p:pointer;@!w,wone:integer); - {global |del_eq_word_define|} -begin assign_trace(p,"globally changing")@;@/ -begin eqtb[p].int:=w; setintone(eqtb[p],wone); xeq_level[p]:=level_one; -end; -assign_trace(p,"into")@;@/ -end; -@z -%----------------------------------------------- -@x -@d tok_val=5 {token lists} - -@<Glob...@>= -@!cur_val:integer; {value returned by numeric scanners} -@y -@d tok_val=5 {token lists} - -@<Glob...@>= -@!cur_val:integer; {value returned by numeric scanners} -@!cur_val1:integer; -@z -%----------------------------------------------- -@x -char_given,math_given: scanned_result(cur_chr)(int_val); -@y -omath_given, -char_given,math_given: scanned_result(cur_chr)(int_val); -@z -%----------------------------------------------- -@x -@ @<Fetch a character code from some table@>= -begin -if m=math_code_base then - begin scan_ascii_num; - scanned_result(ho(math_code(cur_val)))(int_val); end -@y -@ @<Fetch a character code from some table@>= -begin -if m=math_code_base then begin - scan_ascii_num; cur_val1:=ho(math_code(cur_val)); - if ((cur_val1 div @"10000)>8) or - (((cur_val1 mod @"10000) div @"100)>15) then - begin print_err("Extended mathchar used as mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and ""7FFF.")@/ - ("I changed this one to zero."); int_error(cur_val1); - scanned_result(0)(int_val) - end; - cur_val1:=(cur_val1 div @"10000)*@"1000+cur_val1 mod @"1000; - scanned_result(cur_val1)(int_val); - end -else if m=(math_code_base+128) then begin - scan_ascii_num; cur_val1:=ho(math_code(cur_val)); - cur_val:=(cur_val1 div @"10000) * @"1000000 - +((cur_val1 div @"100) mod @"100) * @"10000 - +(cur_val1 mod @"100); - scanned_result(cur_val)(int_val); - end -else if m=del_code_base then begin - scan_ascii_num; cur_val1:=del_code(cur_val); cur_val:=del_code1(cur_val); - if ((cur_val1 div @"100) mod @"100 >= 16) or (cur_val>=@"1000) then - begin print_err("Extended delimiter code used as delcode"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); error; - scanned_result(0)(int_val); - end - else if cur_val1<0 then - scanned_result(cur_val)(int_val) - else - scanned_result(cur_val1*@"1000+cur_val)(int_val); - end -else if m=(del_code_base+128) then begin - { Aleph seems \.{\\odelcode} always returns $-1$.} - scan_ascii_num; scanned_result(-1)(int_val); - end -@z -%----------------------------------------------- -@x -procedure scan_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>15) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 15,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>15) then - begin print_err("Bad number"); -@.Bad number@> - help2("Since I expected to read a number between 0 and 15,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@# -procedure scan_big_four_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>255) then - begin print_err("Bad number"); -@.Bad register code@> - help2("Since I expected to read a number between 0 and 255,")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@z -%----------------------------------------------- -@x -procedure scan_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -cur_val:=((cur_val div @"1000) * @"10000)+(cur_val mod @"1000); -end; -@# -procedure scan_real_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'77777) then - begin print_err("Bad mathchar"); -@.Bad mathchar@> - help2("A mathchar number must be between 0 and 32767.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@# -procedure scan_big_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@"7FFFFFF) then - begin print_err("Bad extended mathchar"); -@.Bad mathchar@> - help2("An extended mathchar number must be between 0 and ""7FFFFFF.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -{ e-pTeX doesn't support 65536 characters for math font. } -cur_val:=((cur_val div @"10000) * @"100)+(cur_val mod @"100); -end; -@# -procedure scan_omega_fifteen_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@"7FFFFFF) then - begin print_err("Bad extended mathchar"); -@.Bad mathchar@> - help2("An extended mathchar number must be between 0 and ""7FFFFFF.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@z -%----------------------------------------------- -@x -procedure scan_twenty_seven_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -end; -@y -procedure scan_twenty_seven_bit_int; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter code must be between 0 and 2^{27}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -cur_val1 := cur_val mod @"1000; cur_val := cur_val div @"1000; -cur_val := ((cur_val div @"1000) * @"10000) + (cur_val mod @"1000); -end; -@# -procedure scan_fifty_one_bit_int; -var iiii:integer; -begin scan_int; -if (cur_val<0)or(cur_val>@'777777777) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> - help2("A numeric delimiter (first part) must be between 0 and 2^{27}-1.") - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -iiii:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); -scan_int; -if (cur_val<0)or(cur_val>@"FFFFFF) then - begin print_err("Bad delimiter code"); -@.Bad delimiter code@> -help2("A numeric delimiter (second part) must be between 0 and 2^{24}-1.")@/ - ("I changed this one to zero."); int_error(cur_val); cur_val:=0; - end; -{ e-pTeX doesn't support 65536 characters for math font. } -cur_val1:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); -cur_val:=iiii; -end; -@z -%----------------------------------------------- -@x -@<Scan for \(f)\.{fil} units...@>= -if scan_keyword("fil") then -@.fil@> - begin cur_order:=fil; -@y -@<Scan for \(f)\.{fil} units...@>= -if scan_keyword("fi") then -@.fil@> - begin cur_order:=sfi; -@z -%----------------------------------------------- -@x -else if cur_cmd=def_family then - begin m:=cur_chr; scan_four_bit_int; f:=equiv(m+cur_val); -@y -else if cur_cmd=def_family then - begin m:=cur_chr; scan_big_four_bit_int; f:=equiv(m+cur_val); -@z -%----------------------------------------------- -@x -total_stretch[normal]:=0; total_shrink[normal]:=0; -@y -total_stretch[normal]:=0; total_shrink[normal]:=0; -total_stretch[sfi]:=0; total_shrink[sfi]:=0; -@z -%----------------------------------------------- -@x -else if total_stretch[fil]<>0 then o:=fil -@y -else if total_stretch[fil]<>0 then o:=fil -else if total_stretch[sfi]<>0 then o:=sfi -@z -%----------------------------------------------- -@x -else if total_shrink[fil]<>0 then o:=fil -@y -else if total_shrink[fil]<>0 then o:=fil -else if total_shrink[sfi]<>0 then o:=sfi -@z -%----------------------------------------------- -@x -\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of -the sixteen font families, and |character(q)| is the number of a character -@y -\yskip\hang|math_type(q)=math_char| means that |fam(q)| refers to one of -the 256 font families, and |character(q)| is the number of a character -@z -%----------------------------------------------- -@x -procedure print_fam_and_char(@!p:pointer;@!t:small_number); -@y -procedure print_fam_and_char(@!p:pointer;@!t:integer); -@z -%----------------------------------------------- -@x -other font information. A size code, which is a multiple of 16, is added to a -family number to get an index into the table of internal font numbers -for each combination of family and size. (Be alert: Size codes get -larger as the type gets smaller.) - -@d text_size=0 {size code for the largest size in a family} -@d script_size=16 {size code for the medium size in a family} -@d script_script_size=32 {size code for the smallest size in a family} -@y -other font information. A size code, which is a multiple of 256, is added to a -family number to get an index into the table of internal font numbers -for each combination of family and size. (Be alert: Size codes get -larger as the type gets smaller.) -@z -%----------------------------------------------- -@x -else cur_size:=16*((cur_style-text_style) div 2); -@y -else cur_size:=script_size*((cur_style-text_style) div 2); -@z -%----------------------------------------------- -@x -function var_delimiter(@!d:pointer;@!s:small_number;@!v:scaled):pointer; -@y -function var_delimiter(@!d:pointer;@!s:integer;@!v:scaled):pointer; -@z -%----------------------------------------------- -@x -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: small_number; {runs through font family members} -@y -@!hd: eight_bits; {height-depth byte} -@!r: four_quarters; {extensible pieces} -@!z: integer; {runs through font family members} -@z -%----------------------------------------------- -@x - begin z:=z+s+16; - repeat z:=z-16; g:=fam_fnt(z); -@y - begin z:=z+s+script_size; - repeat z:=z-script_size; g:=fam_fnt(z); -@z -%----------------------------------------------- -@x - until z<16; -@y - until z<script_size; -@z -%----------------------------------------------- -@x -@!cur_mlist:pointer; {beginning of mlist to be translated} -@!cur_style:small_number; {style code at current place in the list} -@!cur_size:small_number; {size code corresponding to |cur_style|} -@y -@!cur_mlist:pointer; {beginning of mlist to be translated} -@!cur_style:small_number; {style code at current place in the list} -@!cur_size:integer; {size code corresponding to |cur_style|} -@z -%----------------------------------------------- -@x -@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} -@!pen:integer; {a penalty to be inserted} -@!s:small_number; {the size of a noad to be deleted} -@y -@!p,@!x,@!y,@!z: pointer; {temporary registers for list construction} -@!pen:integer; {a penalty to be inserted} -@!s:integer; {the size of a noad to be deleted} -@z -%----------------------------------------------- -@x -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:small_number; {subsidiary size code} -@y -procedure make_scripts(@!q:pointer;@!delta:scaled); -var p,@!x,@!y,@!z:pointer; {temporary registers for box construction} -@!shift_up,@!shift_down,@!clr:scaled; {dimensions in the calculation} -@!t:integer; {subsidiary size code} -@z -%----------------------------------------------- -@x -contains six scaled numbers, since it must record the net change in glue -stretchability with respect to all orders of infinity. The natural width -difference appears in |mem[q+1].sc|; the stretch differences in units of -pt, fil, fill, and filll appear in |mem[q+2..q+5].sc|; and the shrink difference -appears in |mem[q+6].sc|. The |subtype| field of a delta node is not used. - -@d delta_node_size=7 {number of words in a delta node} -@y -contains seven scaled numbers, since it must record the net change in glue -stretchability with respect to all orders of infinity. The natural width -difference appears in |mem[q+1].sc|; the stretch differences in units of -pt, sfi, fil, fill, and filll appear in |mem[q+2..q+6].sc|; and the shrink -difference appears in |mem[q+7].sc|. The |subtype| field of a delta node -is not used. - -@d delta_node_size=8 {number of words in a delta node} -@z -%----------------------------------------------- -@x -@ As the algorithm runs, it maintains a set of six delta-like registers -for the length of the line following the first active breakpoint to the -current position in the given hlist. When it makes a pass through the -active list, it also maintains a similar set of six registers for the -@y -@ As the algorithm runs, it maintains a set of seven delta-like registers -for the length of the line following the first active breakpoint to the -current position in the given hlist. When it makes a pass through the -active list, it also maintains a similar set of seven registers for the -@z -%----------------------------------------------- -@x -k:=1 to 6 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we -want to do this without the overhead of |for| loops. The |do_all_six| -macro makes such six-tuples convenient. - -@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6) -@y -k:=1 to 7 do cur_active_width[k]:=cur_active_width[k]+mem[q+k].sc|};$$ and we -want to do this without the overhead of |for| loops. The |do_all_six| -macro makes such seven-tuples convenient. - -@d do_all_six(#)==#(1);#(2);#(3);#(4);#(5);#(6);#(7) -@z -%----------------------------------------------- -@x -@!active_width:array[1..6] of scaled; - {distance from first active node to~|cur_p|} -@!cur_active_width:array[1..6] of scaled; {distance from current active node} -@!background:array[1..6] of scaled; {length of an ``empty'' line} -@!break_width:array[1..6] of scaled; {length being computed after current break} -@y -@!active_width:array[1..7] of scaled; - {distance from first active node to~|cur_p|} -@!cur_active_width:array[1..7] of scaled; {distance from current active node} -@!background:array[1..7] of scaled; {length of an ``empty'' line} -@!break_width:array[1..7] of scaled; {length being computed after current break} -@z -%----------------------------------------------- -@x -background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ -background[2+stretch_order(q)]:=stretch(q);@/ -background[2+stretch_order(r)]:=@|background[2+stretch_order(r)]+stretch(r);@/ -background[6]:=shrink(q)+shrink(r); -@y -background[2]:=0; background[3]:=0; background[4]:=0; background[5]:=0;@/ -background[6]:=0;@/ -background[2+stretch_order(q)]:=stretch(q);@/ -background[2+stretch_order(r)]:=@|background[2+stretch_order(r)]+stretch(r);@/ -background[7]:=shrink(q)+shrink(r); -@z -%----------------------------------------------- -@x - break_width[6]:=break_width[6]-shrink(cur_kanji_skip); -@y - break_width[7]:=break_width[7]-shrink(cur_kanji_skip); -@z -%----------------------------------------------- -@x -break_width[6]:=break_width[6]-shrink(v); -@y -break_width[7]:=break_width[7]-shrink(v); -@z -%----------------------------------------------- -@x -subarray |cur_active_width[2..5]|, in units of points, fil, fill, and filll. -@y -subarray |cur_active_width[2..6]|, in units of points, sfi, fil, fill and filll. -@z -%----------------------------------------------- -@x -if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| - (cur_active_width[5]<>0) then -@y -if (cur_active_width[3]<>0)or(cur_active_width[4]<>0)or@| - (cur_active_width[5]<>0)or(cur_active_width[6]<>0) then -@z -%----------------------------------------------- -@x -@ Shrinkability is never infinite in a paragraph; -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[6]|. - -@<Set the value of |b| to the badness for shrinking...@>= -begin if -shortfall>cur_active_width[6] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[6]); -@y -@ Shrinkability is never infinite in a paragraph; -we can shrink the line from |r| to |cur_p| by at most |cur_active_width[7]|. - -@<Set the value of |b| to the badness for shrinking...@>= -begin if -shortfall>cur_active_width[7] then b:=inf_bad+1 -else b:=badness(-shortfall,cur_active_width[7]); -@z -%----------------------------------------------- -@x - active_width[6]:=active_width[6]+shrink(cur_kanji_skip); -@y - active_width[7]:=active_width[7]+shrink(cur_kanji_skip); -@z -%----------------------------------------------- -@x -active_width[6]:=active_width[6]+shrink(q) -@y -active_width[7]:=active_width[7]+shrink(q) -@z -%----------------------------------------------- -@x - if (active_height[3]<>0) or (active_height[4]<>0) or - (active_height[5]<>0) then b:=0 - else b:=badness(h-cur_height,active_height[2]) -else if cur_height-h>active_height[6] then b:=awful_bad -else b:=badness(cur_height-h,active_height[6]) -@y - if (active_height[3]<>0) or (active_height[4]<>0) or - (active_height[5]<>0) or (active_height[6]<>0) then b:=0 - else b:=badness(h-cur_height,active_height[2]) -else if cur_height-h>active_height[7] then b:=awful_bad -else b:=badness(cur_height-h,active_height[7]) -@z -%----------------------------------------------- -@x - active_height[6]:=active_height[6]+shrink(q); -@y - active_height[7]:=active_height[7]+shrink(q); -@z -%----------------------------------------------- -@x -on the current page. This array contains six |scaled| numbers, like the -@y -on the current page. This array contains seven |scaled| numbers, like the -@z -%----------------------------------------------- -@x -@d page_shrink==page_so_far[6] {shrinkability of the current page} -@d page_depth==page_so_far[7] {depth of the current page} -@y -@d page_shrink==page_so_far[7] {shrinkability of the current page} -@d page_depth==page_so_far[8] {depth of the current page} -@z -%----------------------------------------------- -@x -@<Glob...@>= -@!page_so_far:array [0..7] of scaled; {height and glue of the current page} -@y -@<Glob...@>= -@!page_so_far:array [0..8] of scaled; {height and glue of the current page} -@z -%----------------------------------------------- -@x -primitive("pagefilstretch",set_page_dimen,3); -@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> -primitive("pagefillstretch",set_page_dimen,4); -@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> -primitive("pagefilllstretch",set_page_dimen,5); -@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> -primitive("pageshrink",set_page_dimen,6); -@!@:page_shrink_}{\.{\\pageshrink} primitive@> -primitive("pagedepth",set_page_dimen,7); -@!@:page_depth_}{\.{\\pagedepth} primitive@> -@y -primitive("pagefistretch",set_page_dimen,3); -@!@:page_fi_stretch_}{\.{\\pagefistretch} primitive@> -primitive("pagefilstretch",set_page_dimen,4); -@!@:page_fil_stretch_}{\.{\\pagefilstretch} primitive@> -primitive("pagefillstretch",set_page_dimen,5); -@!@:page_fill_stretch_}{\.{\\pagefillstretch} primitive@> -primitive("pagefilllstretch",set_page_dimen,6); -@!@:page_filll_stretch_}{\.{\\pagefilllstretch} primitive@> -primitive("pageshrink",set_page_dimen,7); -@!@:page_shrink_}{\.{\\pageshrink} primitive@> -primitive("pagedepth",set_page_dimen,8); -@!@:page_depth_}{\.{\\pagedepth} primitive@> -@z -%----------------------------------------------- -@x -3: print_esc("pagefilstretch"); -4: print_esc("pagefillstretch"); -5: print_esc("pagefilllstretch"); -6: print_esc("pageshrink"); -@y -3: print_esc("pagefistretch"); -4: print_esc("pagefilstretch"); -5: print_esc("pagefillstretch"); -6: print_esc("pagefilllstretch"); -7: print_esc("pageshrink"); -@z -%----------------------------------------------- -@x -print_plus(3)("fil"); -print_plus(4)("fill"); -print_plus(5)("filll"); -@y -print_plus(3)("fi"); -print_plus(4)("fil"); -print_plus(5)("fill"); -print_plus(6)("filll"); -@z -%----------------------------------------------- -@x - if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| - (page_so_far[5]<>0) then b:=0 -@y - if (page_so_far[3]<>0) or (page_so_far[4]<>0) or@| - (page_so_far[5]<>0) or (page_so_far[6]<>0) then b:=0 -@z -%----------------------------------------------- -@x -non_math(math_given), non_math(math_comp), non_math(delim_num), -@y -non_math(math_given), non_math(omath_given), -non_math(math_comp), non_math(delim_num), -@z -%----------------------------------------------- -@x -@d fil_code=0 {identifies \.{\\hfil} and \.{\\vfil}} -@d fill_code=1 {identifies \.{\\hfill} and \.{\\vfill}} -@d ss_code=2 {identifies \.{\\hss} and \.{\\vss}} -@d fil_neg_code=3 {identifies \.{\\hfilneg} and \.{\\vfilneg}} -@d skip_code=4 {identifies \.{\\hskip} and \.{\\vskip}} -@d mskip_code=5 {identifies \.{\\mskip}} -@y -@d sfi_code=0 {identifies \.{\\hfi} and \.{\\vfi}} -@d fil_code=1 {identifies \.{\\hfil} and \.{\\vfil}} -@d fill_code=2 {identifies \.{\\hfill} and \.{\\vfill}} -@d ss_code=3 {identifies \.{\\hss} and \.{\\vss}} -@d fil_neg_code=4 {identifies \.{\\hfilneg} and \.{\\vfilneg}} -@d skip_code=5 {identifies \.{\\hskip} and \.{\\vskip}} -@d mskip_code=6 {identifies \.{\\mskip}} -@z -%----------------------------------------------- -@x -primitive("hfil",hskip,fil_code); -@!@:hfil_}{\.{\\hfil} primitive@> -@y -primitive("hfi",hskip,sfi_code); -@!@:hfi_}{\.{\\hfi} primitive@> -primitive("hfil",hskip,fil_code); -@!@:hfil_}{\.{\\hfil} primitive@> -@z -%----------------------------------------------- -@x -primitive("vfil",vskip,fil_code); -@!@:vfil_}{\.{\\vfil} primitive@> -@y -primitive("vfi",vskip,sfi_code); -@!@:vfi_}{\.{\\vfi} primitive@> -primitive("vfil",vskip,fil_code); -@!@:vfil_}{\.{\\vfil} primitive@> -@z -%----------------------------------------------- -@x -hskip: case chr_code of - skip_code:print_esc("hskip"); -@y -hskip: case chr_code of - skip_code:print_esc("hskip"); - sfi_code:print_esc("hfi"); -@z -%----------------------------------------------- -@x -vskip: case chr_code of - skip_code:print_esc("vskip"); -@y -vskip: case chr_code of - skip_code:print_esc("vskip"); - sfi_code:print_esc("vfi"); -@z -%----------------------------------------------- -@x -begin s:=cur_chr; -case s of -fil_code: cur_val:=fil_glue; -@y -begin s:=cur_chr; -case s of -sfi_code: cur_val:=sfi_glue; -fil_code: cur_val:=fil_glue; -@z -%----------------------------------------------- -@x -|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox32767}'; -codes |global_box_flag| through |ship_out_flag-1| represent -`\.{\\global\\setbox0}' through `\.{\\global\\setbox32767}'; -@y -|global_box_flag-1| represent `\.{\\setbox0}' through `\.{\\setbox65535}'; -codes |global_box_flag| through |ship_out_flag-1| represent -`\.{\\global\\setbox0}' through `\.{\\global\\setbox65535}'; -@z -%----------------------------------------------- -@x -@d box_flag==@'10000000000 {context code for `\.{\\setbox0}'} -@d global_box_flag==@'10000100000 {context code for `\.{\\global\\setbox0}'} -@d ship_out_flag==@'10000200000 {context code for `\.{\\shipout}'} -@d leader_flag==@'10000200001 {context code for `\.{\\leaders}'} -@y -@d box_flag==@"40000000 {context code for `\.{\\setbox0}'} -@d global_box_flag==@"40010000 {context code for `\.{\\global\\setbox0}'} -@d ship_out_flag==@"40020000 {context code for `\.{\\shipout}'} -@d leader_flag==@"40020001 {context code for `\.{\\leaders}'} -@z -%----------------------------------------------- -@x -@d fam_in_range==((cur_fam>=0)and(cur_fam<16)) -@y -@d fam_in_range==((cur_fam>=0)and(cur_fam<script_size)) -@z -%----------------------------------------------- -@x - c:=ho(math_code(cur_chr)); - if c=@'100000 then -@y - c:=ho(math_code(cur_chr)); - if c=@"80000 then -@z -%----------------------------------------------- -@x -math_char_num: begin scan_fifteen_bit_int; c:=cur_val; - end; -math_given: c:=cur_chr; -delim_num: begin scan_twenty_seven_bit_int; c:=cur_val div @'10000; -@y -math_char_num: begin - if cur_chr=0 then scan_fifteen_bit_int - else scan_big_fifteen_bit_int; - c:=cur_val; - end; -math_given: c:=((cur_chr div @"1000) * @"10000) + (cur_chr mod @"1000); -omath_given: c:=((cur_chr div @"10000) * @"100) + (cur_chr mod @"100); -delim_num: begin - if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - c:=cur_val; -@z -%----------------------------------------------- -@x - if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam - else fam(p):=(c div 256) mod 16; -@y - if (c>=var_code)and(fam_in_range) then fam(p):=cur_fam - else fam(p):=(c div 256) mod 256; -@z -%----------------------------------------------- -@x -mmode+math_char_num: begin scan_fifteen_bit_int; set_math_char(cur_val); - end; -mmode+math_given: set_math_char(cur_chr); -mmode+delim_num: begin scan_twenty_seven_bit_int; - set_math_char(cur_val div @'10000); -@y -mmode+math_char_num: begin - if cur_chr=0 then scan_fifteen_bit_int - else scan_big_fifteen_bit_int; - set_math_char(cur_val); - end; -mmode+math_given: begin - set_math_char(((cur_chr div @"1000) * @"10000)+(cur_chr mod @"1000)); - end; -mmode+omath_given: begin - set_math_char(((cur_chr div @"10000) * @"100)+(cur_chr mod @"100)); - end; -mmode+delim_num: begin - if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - set_math_char(cur_val); {character code of left delimiter} -@z -%----------------------------------------------- -@x -procedure set_math_char(@!c:integer); -var p:pointer; {the new noad} -begin if c>=@'100000 then - @<Treat |cur_chr|...@> -else begin p:=new_noad; math_type(nucleus(p)):=math_char; - character(nucleus(p)):=qi(c mod 256); - fam(nucleus(p)):=(c div 256) mod 16; - if c>=var_code then - begin if fam_in_range then fam(nucleus(p)):=cur_fam; - type(p):=ord_noad; - end - else type(p):=ord_noad+(c div @'10000); - link(tail):=p; tail:=p; - if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin -@y -procedure set_math_char(@!c:integer); -var p:pointer; {the new noad} -begin if c>=@"80000 then - @<Treat |cur_chr|...@> -else begin p:=new_noad; math_type(nucleus(p)):=math_char; - character(nucleus(p)):=qi(c mod 256); - fam(nucleus(p)):=(c div 256) mod 256; - if c>=var_code then - begin if fam_in_range then fam(nucleus(p)):=cur_fam; - type(p):=ord_noad; - end - else type(p):=ord_noad+(c div @"10000); - link(tail):=p; tail:=p; - if font_dir[fam_fnt(fam(nucleus(p))+cur_size)]<>dir_default then begin -@z -%----------------------------------------------- -@x -@<Declare act...@>= -procedure scan_delimiter(@!p:pointer;@!r:boolean); -begin if r then scan_twenty_seven_bit_int -else begin @<Get the next non-blank non-relax...@>; - case cur_cmd of - letter,other_char: cur_val:=del_code(cur_chr); - delim_num: scan_twenty_seven_bit_int; - othercases cur_val:=-1 - endcases; - end; -if cur_val<0 then @<Report that an invalid delimiter code is being changed - to null; set~|cur_val:=0|@>; -small_fam(p):=(cur_val div @'4000000) mod 16; -small_char(p):=qi((cur_val div @'10000) mod 256); -large_fam(p):=(cur_val div 256) mod 16; -large_char(p):=qi(cur_val mod 256); -end; -@y -@<Declare act...@>= -procedure scan_delimiter(@!p:pointer;@!r:boolean); -begin if r=1 then scan_twenty_seven_bit_int -else if r=2 then scan_fifty_one_bit_int -else begin @<Get the next non-blank non-relax...@>; - case cur_cmd of - letter,other_char: begin - cur_val:=del_code(cur_chr); cur_val1:=del_code1(cur_chr); - end; - delim_num: if cur_chr=0 then scan_twenty_seven_bit_int - else scan_fifty_one_bit_int; - othercases begin cur_val:=-1; cur_val1:=-1; end; - endcases; - end; -if cur_val<0 then begin @<Report that an invalid delimiter code is being changed - to null; set~|cur_val:=0|@>; - cur_val1:=0; - end; -small_fam(p):=(cur_val div @"100) mod @"100; -small_char(p):=qi(cur_val mod @"100); -large_fam(p):=(cur_val1 div @"100) mod @"100; -large_char(p):=qi(cur_val1 mod @"100); -end; -@z -%----------------------------------------------- -@x -scan_delimiter(left_delimiter(tail),true); -@y -scan_delimiter(left_delimiter(tail),cur_chr+1); -@z -%----------------------------------------------- -@x -scan_fifteen_bit_int; -character(accent_chr(tail)):=qi(cur_val mod 256); -if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam -else fam(accent_chr(tail)):=(cur_val div 256) mod 16; -@y -if cur_chr=0 then scan_fifteen_bit_int -else scan_big_fifteen_bit_int; -character(accent_chr(tail)):=qi(cur_val mod 256); -if (cur_val>=var_code)and fam_in_range then fam(accent_chr(tail)):=cur_fam -else fam(accent_chr(tail)):=(cur_val div 256) mod 256; -@z -%----------------------------------------------- -@x -begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| - (total_shrink[fil]<>0)or(total_shrink[fill]<>0)or - (total_shrink[filll]<>0)) then -@y -begin if (e<>0)and((w-total_shrink[normal]+q<=z)or@| - (total_shrink[sfi]<>0)or(total_shrink[fil]<>0)or - (total_shrink[fill]<>0)or(total_shrink[filll]<>0)) then -@z -%----------------------------------------------- -@x -@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) -@y -@d word_define(#)==if global then geq_word_define(#)@+else eq_word_define(#) -@d del_word_define(#)==if global - then del_geq_word_define(#)@+else del_eq_word_define(#) -@z -%----------------------------------------------- -@x -@d count_def_code=2 {|shorthand_def| for \.{\\countdef}} -@d dimen_def_code=3 {|shorthand_def| for \.{\\dimendef}} -@d skip_def_code=4 {|shorthand_def| for \.{\\skipdef}} -@d mu_skip_def_code=5 {|shorthand_def| for \.{\\muskipdef}} -@d toks_def_code=6 {|shorthand_def| for \.{\\toksdef}} -@d char_sub_def_code=7 {|shorthand_def| for \.{\\charsubdef}} -@y -@d omath_char_def_code=2 {|shorthand_def| for \.{\\omathchardef}} -@d count_def_code=3 {|shorthand_def| for \.{\\countdef}} -@d dimen_def_code=4 {|shorthand_def| for \.{\\dimendef}} -@d skip_def_code=5 {|shorthand_def| for \.{\\skipdef}} -@d mu_skip_def_code=6 {|shorthand_def| for \.{\\muskipdef}} -@d toks_def_code=7 {|shorthand_def| for \.{\\toksdef}} -@d char_sub_def_code=8 {|shorthand_def| for \.{\\charsubdef}} -@z -%----------------------------------------------- -@x -primitive("mathchardef",shorthand_def,math_char_def_code);@/ -@!@:math_char_def_}{\.{\\mathchardef} primitive@> -@y -primitive("mathchardef",shorthand_def,math_char_def_code);@/ -@!@:math_char_def_}{\.{\\mathchardef} primitive@> -primitive("omathchardef",shorthand_def,omath_char_def_code);@/ -@!@:math_char_def_}{\.{\\omathchardef} primitive@> -@z -%----------------------------------------------- -@x - math_char_def_code: print_esc("mathchardef"); -@y - math_char_def_code: print_esc("mathchardef"); - omath_char_def_code: print_esc("omathchardef"); -@z -%----------------------------------------------- -@x -math_given: begin print_esc("mathchar"); print_hex(chr_code); - end; -@y -math_given: begin print_esc("mathchar"); print_hex(chr_code); - end; -omath_given: begin print_esc("omathchar"); print_hex(chr_code); - end; -@z -%----------------------------------------------- -@x - math_char_def_code: begin scan_fifteen_bit_int; define(p,math_given,cur_val); -@y - math_char_def_code: begin scan_real_fifteen_bit_int; - define(p,math_given,cur_val); - end; - omath_char_def_code: begin scan_omega_fifteen_bit_int; - define(p,omath_given,cur_val); -@z -%----------------------------------------------- -@x -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -@y -primitive("mathcode",def_code,math_code_base); -@!@:math_code_}{\.{\\mathcode} primitive@> -primitive("omathcode",def_code,math_code_base+128); -@!@:math_code_}{\.{\\omathcode} primitive@> -@z -%----------------------------------------------- -@x -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -@y -primitive("delcode",def_code,del_code_base); -@!@:del_code_}{\.{\\delcode} primitive@> -primitive("odelcode",def_code,del_code_base+128); -@!@:del_code_}{\.{\\odelcode} primitive@> -@z -%----------------------------------------------- -@x - else if chr_code=lc_code_base then print_esc("lccode") - else if chr_code=uc_code_base then print_esc("uccode") - else if chr_code=sf_code_base then print_esc("sfcode") - else print_esc("delcode"); -@y - else if chr_code=math_code_base+128 then print_esc("omathcode") - else if chr_code=lc_code_base then print_esc("lccode") - else if chr_code=uc_code_base then print_esc("uccode") - else if chr_code=sf_code_base then print_esc("sfcode") - else if chr_code=del_code_base then print_esc("delcode") - else print_esc("odelcode"); -@z -%----------------------------------------------- -@x -@<Assignments@>= -def_code: begin - @<Let |m| be the minimal legal code value, based on |cur_chr|@>; - @<Let |n| be the largest legal code value, based on |cur_chr|@>; - p:=cur_chr; - if p=kcat_code_base then - begin scan_char_num; p:=p+kcatcodekey(cur_val) end - else begin scan_ascii_num; p:=p+cur_val; end; - scan_optional_equals; scan_int; - if ((cur_val<m)and(p<del_code_base))or(cur_val>n) then - begin print_err("Invalid code ("); print_int(cur_val); -@.Invalid code@> - if p<del_code_base then - begin print("), should be in the range "); print_int(m); print(".."); - end - else print("), should be at most "); - print_int(n); - if m=0 then - begin help1("I'm going to use 0 instead of that illegal code value.");@/ - error; cur_val:=0; - end - else - begin help1("I'm going to use 16 instead of that illegal code value.");@/ - error; cur_val:=16; - end; - end; - if p<math_code_base then define(p,data,cur_val) - else if p<del_code_base then define(p,data,hi(cur_val)) - else word_define(p,cur_val); - end; -@y -@<Assignments@>= -def_code: begin - if cur_chr=(del_code_base+128) then begin - p:=cur_chr-128; scan_ascii_num; p:=p+cur_val; scan_optional_equals; - scan_int; cur_val1:=cur_val; scan_int; {backwards} - if (cur_val1>@"FFFFFF) or (cur_val>@"FFFFFF) then - begin print_err("Invalid code ("); print_int(cur_val1); print(" "); - print_int(cur_val); - print("), should be at most ""FFFFFF ""FFFFFF"); - help1("I'm going to use 0 instead of that illegal code value.");@/ - error; cur_val1:=0; cur_val:=0; - end; - cur_val1:=(cur_val1 div @"10000)*@"100+(cur_val1 mod @"100); - cur_val:=(cur_val div @"10000)*@"100+(cur_val mod @"100); - del_word_define(p,cur_val1,cur_val); - end - else begin - @<Let |m| be the minimal legal code value, based on |cur_chr|@>; - @<Let |n| be the largest legal code value, based on |cur_chr|@>; - p:=cur_chr; cur_val1:=p; - if p=kcat_code_base then begin scan_char_num; p:=p+kcatcodekey(cur_val) end - else begin scan_ascii_num; p:=p+cur_val; end; - scan_optional_equals; scan_int; - if ((cur_val<m)and(p<del_code_base))or(cur_val>n) then - begin print_err("Invalid code ("); print_int(cur_val); -@.Invalid code@> - if p<del_code_base then - begin print("), should be in the range "); print_int(m); print(".."); - end - else print("), should be at most "); - print_int(n); - if m=0 then - begin help1("I'm going to use 0 instead of that illegal code value.");@/ - error; cur_val:=0; - end - else - begin help1("I'm going to use 16 instead of that illegal code value.");@/ - error; cur_val:=16; - end; - end; - if p<math_code_base then define(p,data,cur_val) - else if cur_val1=math_code_base then begin - if cur_val=@"8000 then cur_val:=@"80000 - else cur_val:=((cur_val div @"1000)*@"10000)+(cur_val mod @"1000); - define(p,data,hi(cur_val)); - end - else if cur_val1=math_code_base+128 then begin - cur_val:=((cur_val div @"10000) * @"100) + (cur_val mod @"100); - define(p-128,data,hi(cur_val)); - end - else if cur_val1=del_code_base then begin - if cur_val>=0 then begin - cur_val1:=cur_val div @"1000; - cur_val1:=(cur_val1 div @"1000)*@"10000 + cur_val1 mod @"1000; - cur_val:=cur_val mod @"1000; - del_word_define(p,cur_val1,cur_val); end - else - del_word_define(p, -1, cur_val); - end - else define(p,data,cur_val); - end; - end; -@z -%----------------------------------------------- -@x -else if cur_chr=kcat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@'100000 -@y -else if cur_chr=kcat_code_base then n:=max_char_code -else if cur_chr=math_code_base then n:=@"8000 -else if cur_chr=(math_code_base+128) then n:=@"8000000 -@z -%----------------------------------------------- -@x -def_family: begin p:=cur_chr; scan_four_bit_int; p:=p+cur_val; -@y -def_family: begin p:=cur_chr; scan_big_four_bit_int; p:=p+cur_val; -@z -%----------------------------------------------- -@x -@ @<Dump regions 5 and 6 of |eqtb|@>= -repeat j:=k; -while j<eqtb_size do - begin if eqtb[j].int=eqtb[j+1].int then goto found2; - incr(j); - end; -l:=eqtb_size+1; goto done2; {|j=eqtb_size|} -found2: incr(j); l:=j; -while j<eqtb_size do - begin if eqtb[j].int<>eqtb[j+1].int then goto done2; -@y -@ @<Dump regions 5 and 6 of |eqtb|@>= -repeat j:=k; -while j<eqtb_size do - begin if (eqtb[j].int=eqtb[j+1].int) and@| - (getintone(eqtb[j])=getintone(eqtb[j+1])) then goto found2; - incr(j); - end; -l:=eqtb_size+1; goto done2; {|j=eqtb_size|} -found2: incr(j); l:=j; -while j<eqtb_size do - begin if (eqtb[j].int<>eqtb[j+1].int)or@| - (getintone(eqtb[j])<>getintone(eqtb[j+1])) then goto done2; -@z -%----------------------------------------------- -@x - else cur_val:=shrink_order(q); -@y - else cur_val:=shrink_order(q); - if cur_val>normal then cur_val:=cur_val-1; {compatible to \eTeX} -@z -%----------------------------------------------- -@x FAM256 65536 Registers -@ \eTeX\ (in extended mode) supports 32768 (i.e., $2^{15}$) count, -@y -@ \epTeX\ (in extended mode) supports 65536 (i.e., $2^{16}$) count, -@z -%----------------------------------------------- -@x -Similarly there are 32768 mark classes; the command \.{\\marks}|n| -creates a mark node for a given mark class |0<=n<=32767| (where -@y -Similarly there are 65536 mark classes; the command \.{\\marks}|n| -creates a mark node for a given mark class |0<=n<=65535| (where -@z -%----------------------------------------------- -@x -not exceed 255 in compatibility mode resp.\ 32767 in extended mode. -@y -not exceed 255 in compatibility mode resp.\ 65535 in extended mode. -@z -%----------------------------------------------- -@x -max_reg_num:=32767; -max_reg_help_line:="A register number must be between 0 and 32767."; -@y -max_reg_num:=65535; -max_reg_help_line:="A register number must be between 0 and 65535."; -@z -%----------------------------------------------- -@x -sparse array of the up to 32512 additional registers of each kind and -one for the sparse array of the up to 32767 additional mark classes. -The root of each such tree, if it exists, is an index node containing 16 -pointers to subtrees for 4096 consecutive array elements. Similar index -nodes are the starting points for all nonempty subtrees for 4096, 256, -and 16 consecutive array elements. These four levels of index nodes are -followed by a fifth level with nodes for the individual array elements. -@y -sparse array of the up to 65280 additional registers of each kind and -one for the sparse array of the up to 65535 additional mark classes. -The root of each such tree, if it exists, is an index node containing 16 -pointers to subtrees for 65536 consecutive array elements. Similar index -nodes are the starting points for all nonempty subtrees for 65536, 4096, -256, and 16 consecutive array elements. These five levels of index nodes -are followed by a sixth level with nodes for the individual array elements. -@z -%----------------------------------------------- -@x -@d hex_dig1(#)==# div 4096 {the fourth lowest hexadecimal digit} -@d hex_dig2(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} -@d hex_dig3(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} -@d hex_dig4(#)==# mod 16 {the lowest hexadecimal digit} -@y -@d hex_dig1(#)==# div 65536 {the fifth lowest hexadecimal digit} -@d hex_dig2(#)==(# div 4096) mod 16 {the fourth lowest hexadecimal digit} -@d hex_dig3(#)==(# div 256) mod 16 {the third lowest hexadecimal digit} -@d hex_dig4(#)==(# div 16) mod 16 {the second lowest hexadecimal digit} -@d hex_dig5(#)==# mod 16 {the lowest hexadecimal digit} -@z -%----------------------------------------------- -@x -procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); - {sets |cur_val| to sparse array element location or |null|} -label not_found,not_found1,not_found2,not_found3,not_found4,exit; -var q:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -begin cur_ptr:=sa_root[t]; -if_cur_ptr_is_null_then_return_or_goto(not_found);@/ -q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ -q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ -q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ -q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; -if (cur_ptr=null)and w then goto not_found4; -return; -not_found: new_index(t,null); {create first level index node} -sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); -not_found1: new_index(i,q); {create second level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); -not_found2: new_index(i,q); {create third level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); -not_found3: new_index(i,q); {create fourth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); -not_found4: @<Create a new array element of type |t| with index |i|@>; -link(cur_ptr):=q; add_sa_ptr; -exit:end; -@y -procedure find_sa_element(@!t:small_number;@!n:halfword;@!w:boolean); - {sets |cur_val| to sparse array element location or |null|} -label not_found,not_found1,not_found2,not_found3,not_found4,not_found5,exit; -var q:pointer; {for list manipulations} -@!i:small_number; {a four bit index} -begin cur_ptr:=sa_root[t]; -if_cur_ptr_is_null_then_return_or_goto(not_found);@/ -q:=cur_ptr; i:=hex_dig1(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found1);@/ -q:=cur_ptr; i:=hex_dig2(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found2);@/ -q:=cur_ptr; i:=hex_dig3(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found3);@/ -q:=cur_ptr; i:=hex_dig4(n); get_sa_ptr; -if_cur_ptr_is_null_then_return_or_goto(not_found4);@/ -q:=cur_ptr; i:=hex_dig5(n); get_sa_ptr; -if (cur_ptr=null)and w then goto not_found5; -return; -not_found: new_index(t,null); {create first level index node} -sa_root[t]:=cur_ptr; q:=cur_ptr; i:=hex_dig1(n); -not_found1: new_index(i,q); {create second level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig2(n); -not_found2: new_index(i,q); {create third level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig3(n); -not_found3: new_index(i,q); {create fourth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig4(n); -not_found4: new_index(i,q); {create fifth level index node} -add_sa_ptr; q:=cur_ptr; i:=hex_dig5(n); -not_found5: @<Create a new array element of type |t| with index |i|@>; -link(cur_ptr):=q; add_sa_ptr; -exit:end; -@z -%----------------------------------------------- -@x -repeat i:=hex_dig4(sa_index(q)); p:=q; q:=link(p); free_node(p,s); -@y -repeat i:=hex_dig5(sa_index(q)); p:=q; q:=link(p); free_node(p,s); -@z -%----------------------------------------------- -@x -else begin n:=hex_dig4(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); - q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); -@y -else begin n:=hex_dig5(sa_index(q)); q:=link(q); n:=n+16*sa_index(q); - q:=link(q); n:=n+256*(sa_index(q)+16*sa_index(link(q))); - q:=link(link(q)); n:=n+65536*sa_index(q); -@z -%----------------------------------------------- -@x -begin if l<4 then {|q| is an index node} -@y -begin if l<5 then {|q| is an index node} -@z -%----------------------------------------------- -@x -@!fill_width:array[0..2] of scaled; {infinite stretch components of -@y -@!fill_width:array[0..3] of scaled; {infinite stretch components of -@z -%----------------------------------------------- -@x - if (background[3]=0)and(background[4]=0)and(background[5]=0) then - begin do_last_line_fit:=true; - active_node_size:=active_node_size_extended; - fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; -@y - if (background[3]=0)and(background[4]=0)and@| - (background[5]=0)and(background[6]=0) then - begin do_last_line_fit:=true; - active_node_size:=active_node_size_extended; - fill_width[0]:=0; fill_width[1]:=0; fill_width[2]:=0; fill_width[3]:=0; -@z -%----------------------------------------------- -@x -if (cur_active_width[3]<>fill_width[0])or@| - (cur_active_width[4]<>fill_width[1])or@| - (cur_active_width[5]<>fill_width[2]) then goto not_found; - {infinite stretch of this line not entirely due to |par_fill_skip|} -if active_short(r)>0 then g:=cur_active_width[2] -else g:=cur_active_width[6]; -@y -if (cur_active_width[3]<>fill_width[0])or@| - (cur_active_width[4]<>fill_width[1])or@| - (cur_active_width[5]<>fill_width[2])or@| - (cur_active_width[6]<>fill_width[3]) then goto not_found; - {infinite stretch of this line not entirely due to |par_fill_skip|} -if active_short(r)>0 then g:=cur_active_width[2] -else g:=cur_active_width[7]; -@z -%--------------------------------------- -@x -begin if -g>cur_active_width[6] then g:=-cur_active_width[6]; -b:=badness(-g,cur_active_width[6]); -@y -begin if -g>cur_active_width[7] then g:=-cur_active_width[7]; -b:=badness(-g,cur_active_width[7]); -@z -%----------------------------------------------- -@x -if shortfall>0 then g:=cur_active_width[2] -else if shortfall<0 then g:=cur_active_width[6] -@y -if shortfall>0 then g:=cur_active_width[2] -else if shortfall<0 then g:=cur_active_width[7] -@z |