diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-02-03 21:33:58 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-02-03 21:33:58 +0000 |
commit | 859bc2f0c7457e00be54366b2b2a5f627b90b5b3 (patch) | |
tree | 0bfc5fbeb3ce948d5176fc333ee74ec386dcde68 /Build/source | |
parent | f704f19b7964a4247ef69e6d4a66797e0e90bbb1 (diff) |
xetex.web: recover \ifpdfprimitive patch by Kitagawa
git-svn-id: svn://tug.org/texlive/trunk@46531 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source')
-rw-r--r-- | Build/source/texk/web2c/xetexdir/xetex.web | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/Build/source/texk/web2c/xetexdir/xetex.web b/Build/source/texk/web2c/xetexdir/xetex.web index 83965c769a1..e9b793c2b71 100644 --- a/Build/source/texk/web2c/xetexdir/xetex.web +++ b/Build/source/texk/web2c/xetexdir/xetex.web @@ -6080,7 +6080,7 @@ A global boolean variable called |no_new_control_sequence| is set to @d prim_prime=431 {about 85\pct! of |primitive_size|} @d prim_base=1 @d prim_next(#) == prim[#].lh {link for coalesced lists} -@d prim_text(#) == prim[#].rh {string number for control sequence name} +@d prim_text(#) == prim[#].rh {string number for control sequence name, plus one} @d prim_is_full == (prim_used=prim_base) {test if all positions are occupied} @d prim_eq_level_field(#)==#.hh.b1 @d prim_eq_type_field(#)==#.hh.b0 @@ -6191,27 +6191,30 @@ var h:integer; {hash code} @!k:pointer; {index in string pool} @!j,@!l:integer; begin -if s<256 then begin - p:=s; - if (p<0) or (prim_eq_level(p)<>level_one) then - p:=undefined_primitive; -end +if s<=biggest_char then begin + if s<0 then begin p:=undefined_primitive; goto found; end + else p:=(s mod prim_prime)+prim_base; {we start searching here} + end else begin j:=str_start_macro(s); if s = str_ptr then l:=cur_length else l:=length(s); @<Compute the primitive code |h|@>; - p:=h+prim_base; {we start searching here; note that |0<=h<hash_prime|} - loop@+begin if prim_text(p)>0 then if length(prim_text(p))=l then - if str_eq_str(prim_text(p),s) then goto found; - if prim_next(p)=0 then - begin if no_new_control_sequence then - p:=undefined_primitive - else @<Insert a new primitive after |p|, then make - |p| point to it@>; - goto found; - end; - p:=prim_next(p); + p:=h+prim_base; {we start searching here; note that |0<=h<prim_prime|} + end; +loop@+begin + if prim_text(p)>1+biggest_char then { |p| points a multi-letter primitive } + begin if length(prim_text(p)-1)=l then + if str_eq_str(prim_text(p)-1,s) then goto found; + end + else if prim_text(p)=1+s then goto found; { |p| points a single-letter primitive } + if prim_next(p)=0 then + begin if no_new_control_sequence then + p:=undefined_primitive + else @<Insert a new primitive after |p|, then make + |p| point to it@>; + goto found; end; + p:=prim_next(p); end; found: prim_lookup:=p; end; @@ -6224,7 +6227,7 @@ begin if prim_text(p)>0 then until prim_text(prim_used)=0; {search for an empty location in |prim|} prim_next(p):=prim_used; p:=prim_used; end; -prim_text(p):=s; +prim_text(p):=s+1; end @ The value of |prim_prime| should be roughly 85\pct! of @@ -6297,7 +6300,7 @@ var k:pool_pointer; {index into |str_pool|} @!prim_val:integer; {needed to fill |prim_eqtb|} begin if s<256 then begin cur_val:=s+single_base; - prim_val:=s; + prim_val:=prim_lookup(s); end else begin k:=str_start_macro(s); l:=str_start_macro(s+1)-k; {we will move |s| into the (possibly non-empty) |buffer|} @@ -8638,7 +8641,7 @@ temporary file. begin save_scanner_status:=scanner_status; scanner_status:=normal; get_token; scanner_status:=save_scanner_status; if cur_cs < hash_base then - cur_cs:=prim_lookup(cur_cs-257) + cur_cs:=prim_lookup(cur_cs-single_base) else cur_cs:=prim_lookup(text(cur_cs)); if cur_cs<>undefined_primitive then begin @@ -11218,7 +11221,7 @@ if_primitive_code: begin get_next; scanner_status:=save_scanner_status; if cur_cs < hash_base then - m:=prim_lookup(cur_cs-257) + m:=prim_lookup(cur_cs-single_base) else m:=prim_lookup(text(cur_cs)); b :=((cur_cmd<>undefined_cs) and @@ -24113,7 +24116,7 @@ any_mode(ignore_spaces): begin get_next; scanner_status:=t; if cur_cs < hash_base then - cur_cs:=prim_lookup(cur_cs-257) + cur_cs:=prim_lookup(cur_cs-single_base) else cur_cs :=prim_lookup(text(cur_cs)); if cur_cs<>undefined_primitive then begin |