texlive[65815] Build/source/texk/web2c: eptex: shipout keyword for

commits+karl at tug.org commits+karl at tug.org
Mon Feb 13 19:17:02 CET 2023


Revision: 65815
          http://tug.org/svn/texlive?view=revision&revision=65815
Author:   karl
Date:     2023-02-13 19:17:01 +0100 (Mon, 13 Feb 2023)
Log Message:
-----------
eptex: shipout keyword for \special, a la pdftex

Modified Paths:
--------------
    trunk/Build/source/texk/web2c/eptexdir/ChangeLog
    trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch
    trunk/Build/source/texk/web2c/xetexdir/ChangeLog

Modified: trunk/Build/source/texk/web2c/eptexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/ChangeLog	2023-02-13 16:43:55 UTC (rev 65814)
+++ trunk/Build/source/texk/web2c/eptexdir/ChangeLog	2023-02-13 18:17:01 UTC (rev 65815)
@@ -1,3 +1,12 @@
+2023-02-13  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+        * xetex.web: implement shipout keyword for delayed expansion
+        with \special, like non-\immediate \write.
+        (latespecial_node): new @d (4), and step @d for following parameters.
+        (Implement \.{\\special}): look for `shipout' keyword.
+        (Display the whatsit) <latespecial_node>: new case.
+        (special_out): check for latespecial_node.
+
 2023-01-28  TANAKA Takuji  <ttk at t-lab.opal.ne.jp>
 
 	* am/eptex.am:

Modified: trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch
===================================================================
--- trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch	2023-02-13 16:43:55 UTC (rev 65814)
+++ trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch	2023-02-13 18:17:01 UTC (rev 65815)
@@ -1570,9 +1570,20 @@
 @z
 
 @x
+ at d language_node=4 {|subtype| in whatsits that change the current language}
+ at y
+ at d latespecial_node=4 {|subtype| in whatsits that represent \.{\\special} things}
+ at d language_node=5 {|subtype| in whatsits that change the current language}
+ at z
+
+ at x
+ at d immediate_code=4 {command modifier for \.{\\immediate}}
+ at d set_language_code=5 {command modifier for \.{\\setlanguage}}
 @d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}}
 @y
- at d epTeX_input_encoding_code=6 {command modifier for \.{\\epTeXinputencoding}}
+ at d immediate_code=5 {command modifier for \.{\\immediate}}
+ at d set_language_code=6 {command modifier for \.{\\setlanguage}}
+ at d epTeX_input_encoding_code=7 {command modifier for \.{\\epTeXinputencoding}}
 @d pdf_save_pos_node=epTeX_input_encoding_code+1
 @d set_random_seed_code=pdf_save_pos_node+1
 @d reset_timer_code=set_random_seed_code+1
@@ -1596,6 +1607,38 @@
 reset_timer_code: @<Implement \.{\\pdfresettimer}@>;
 @z
 
+ at x
+@<Implement \.{\\special}@>=
+begin new_whatsit(special_node,write_node_size); write_stream(tail):=null;
+p:=scan_toks(false,true); write_tokens(tail):=def_ref;
+inhibit_glue_flag:=false;
+end
+ at y
+@<Implement \.{\\special}@>=
+begin if scan_keyword("shipout") then
+begin new_whatsit(latespecial_node,write_node_size); write_stream(tail):=null;
+p:=scan_toks(false,false); write_tokens(tail):=def_ref;
+end else
+begin new_whatsit(special_node,write_node_size); write_stream(tail):=null;
+p:=scan_toks(false,true); write_tokens(tail):=def_ref;
+end;
+inhibit_glue_flag:=false;
+end
+ at z
+
+ at x
+special_node:begin print_esc("special");
+  print_mark(write_tokens(p));
+  end;
+ at y
+special_node:begin print_esc("special");
+  print_mark(write_tokens(p));
+  end;
+latespecial_node:begin print_esc("special"); print(" shipout");
+  print_mark(write_tokens(p));
+  end;
+ at z
+
 @x \pdfsavepos
   print_int(what_lhm(p)); print_char(",");
   print_int(what_rhm(p)); print_char(")");
@@ -1609,6 +1652,12 @@
 reset_timer_code: print_esc("pdfresettimer");
 @z
 
+ at x
+write_node,special_node: begin r:=get_node(write_node_size);
+ at y
+write_node,special_node,latespecial_node: begin r:=get_node(write_node_size);
+ at z
+
 @x \pdfsavepos
 close_node,language_node: begin r:=get_node(small_node_size);
   words:=small_node_size;
@@ -1621,6 +1670,12 @@
    r := get_node(small_node_size);
 @z
 
+ at x
+write_node,special_node: begin delete_token_ref(write_tokens(p));
+ at y
+write_node,special_node,latespecial_node: begin delete_token_ref(write_tokens(p));
+ at z
+
 @x \pdfsavepos
 close_node,language_node: free_node(p,small_node_size);
 @y
@@ -1632,14 +1687,27 @@
 procedure special_out(@!p:pointer);
 var old_setting:0..max_selector; {holds print |selector|}
 @!k:pool_pointer; {index into |str_pool|}
+begin synch_h; synch_v;@/
+old_setting:=selector; selector:=new_string;
 @y
 procedure special_out(@!p:pointer);
 label done;
 var old_setting:0..max_selector; {holds print |selector|}
 @!k:pool_pointer; {index into |str_pool|}
+@!q,@!r:pointer; {temporary variables for list manipulation}
+@!old_mode:integer; {saved |mode|}
 @!s,@!t,@!cw, @!num, @!denom: scaled;
 @!bl: boolean;
 @!i: small_number;
+begin synch_h; synch_v;@/
+old_setting:=selector; selector:=new_string;
+selector:=old_setting;
+if subtype(p)=latespecial_node then
+  begin @<Expand macros in the token list
+    and make |link(def_ref)| point to the result@>;
+  write_tokens(p):=def_ref;
+  end;
+selector:=new_string;
 @z
 
 @x
@@ -1651,8 +1719,10 @@
 @z
 
 @x
+special_node:special_out(p);
 language_node:do_nothing;
 @y
+special_node,latespecial_node:special_out(p);
 language_node:do_nothing;
 pdf_save_pos_node:
   @<Save current position in DVI mode@>;

Modified: trunk/Build/source/texk/web2c/xetexdir/ChangeLog
===================================================================
--- trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2023-02-13 16:43:55 UTC (rev 65814)
+++ trunk/Build/source/texk/web2c/xetexdir/ChangeLog	2023-02-13 18:17:01 UTC (rev 65815)
@@ -1,14 +1,13 @@
-2023-01-20  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+2023-02-13  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 
         * xetex.web: implement shipout keyword for delayed expansion
-        with \pdfliteral and \special, like non-\immediate \write.
+        with \special, like non-\immediate \write.
         (latespecial_node): new @d (4), and step @d for following parameters.
         (Implement \.{\\special}): look for `shipout' keyword.
-        (Display the whatsit) <latespecial_node, <pdf_lateliteral_node>:
+        (Display the whatsit) <latespecial_node>: new case.
         (special_out): check for latespecial_node.
-        new cases.
 
-2021-02-17  Karl Berry  <karl at tug.org>
+2023-02-09  Karl Berry  <karl at tug.org>
 
         * NEWS,
         * xetex_version.h,



More information about the tex-live-commits mailing list.