From af396b33f6d1b355d6240f7e08181ee7f8a4e462 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 10 Mar 2022 21:26:16 +0000
Subject: xsavebox (10mar22)

git-svn-id: svn://tug.org/texlive/trunk@62604 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty | 73 ++++++++++-------------
 1 file changed, 32 insertions(+), 41 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty')

diff --git a/Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty b/Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty
index 2f3fac684fe..36aeaaa1d0f 100644
--- a/Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty
+++ b/Master/texmf-dist/tex/latex/xsavebox/xsavebox.sty
@@ -45,11 +45,11 @@
 %
 % The Current Maintainer of this work is A. Grahn.
 
-\RequirePackage{xparse}
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
 \RequirePackage{l3keys2e}
 
-\def\g@xsb@version@tl{0.16}
-\def\g@xsb@date@tl{2020/03/04}
+\def\g@xsb@version@tl{0.17}
+\def\g@xsb@date@tl{2022/03/10}
 \ProvidesExplPackage{xsavebox}{\g@xsb@date@tl}{\g@xsb@version@tl}
 {saveboxes for repeating content without code replication}
 
@@ -149,24 +149,21 @@
 \DeclareDocumentCommand\xsavebox{smO{\width}O{c}+m}{
   \xsb_check_box_name:n{#2}
   \group_begin:
-  \tl_set:Nn\l_xsb_content_grouped_tl{
-    \group_begin:
-      \cs_set:Nn\ocgxii_beginocg:nnnn{}\cs_set:Nn\ocgxii_endocg:{}
-      #5
-    \group_end:
-  }
   \xsb_push_props: %new, empty properties dict
   \xsb_beginLTR:
-  \IfBooleanTF{#1}{
-    %later colour injection possible (pdfTeX, LuaTeX)
-    \hbox_set:Nn\l_xsb_raw_box{\l_xsb_content_grouped_tl} %raw content
-    \hbox_set:Nn\l_xsb_box{ %content re-aligned
-      \makebox[#3][#4]{\l_xsb_content_grouped_tl}
+  \hbox_set:Nn\l_xsb_raw_box{ %raw content
+    \bool_lazy_and:nnF{
+      \tl_if_exist_p:c{xsb@\int_use:N\g_xsb_id_int}
+    }{
+      \bool_if_p:c{c_\tl_use:c{xsb@\int_use:N\g_xsb_id_int}_bool}
+    }{ %prevent unused boxes from creating OCGs/OCMDs
+      \DeclareDocumentEnvironment{ocg}{O{}mmm}{\ignorespaces}{\unskip}
+      \DeclareDocumentEnvironment{ocmd}{O{}m}{\ignorespaces}{\unskip}
     }
-  }{
-    %the LaTeX way (no colour injection)
-    \sbox\l_xsb_raw_box{\l_xsb_content_grouped_tl} %raw content
-    \savebox\l_xsb_box[#3][#4]{\l_xsb_content_grouped_tl} %re-aligned
+    #5
+  }
+  \hbox_set:Nn\l_xsb_box{ %content re-aligned
+    \makebox[#3][#4]{\hbox_unpack:N\l_xsb_raw_box}
   }
   %process one of \l_xsb_raw_box or \l_xsb_box
   \dim_compare:nTF{\box_wd:N\l_xsb_raw_box>\box_wd:N\l_xsb_box}{
@@ -176,31 +173,25 @@
         %for colour injection
         \hbox_set:Nn\l_xsb_box{
           \makebox[\box_wd:N\l_xsb_raw_box][l]{
-            \makebox[#3][s]{#5}
+            \makebox[#3][s]{\hbox_unpack:N\l_xsb_raw_box}
           }
         }
       }{
         %no colour injection
         \savebox\l_xsb_box[\box_wd:N\l_xsb_raw_box][l]{
-          \makebox[#3][s]{#5}
+          \makebox[#3][s]{\hbox_unpack:N\l_xsb_raw_box}
         }
       }
       \xsb_process_box:nnnN{#2}{#3}{#4}\l_xsb_box
     }{ % raw content
-      \IfBooleanTF{#1}{
-        \hbox_set:Nn\l_xsb_raw_box{#5}
-      }{
-        \sbox\l_xsb_raw_box{#5}
+      \IfBooleanF{#1}{
+        \sbox\l_xsb_raw_box{\hbox_unpack:N\l_xsb_raw_box}
       }
       \xsb_process_box:nnnN{#2}{#3}{#4}\l_xsb_raw_box
     }
   }{
-    \IfBooleanTF{#1}{
-      \hbox_set:Nn\l_xsb_box{ %content re-aligned
-        \makebox[#3][#4]{#5}
-      }
-    }{
-      \savebox\l_xsb_box[#3][#4]{#5} %re-aligned
+    \IfBooleanF{#1}{
+      \savebox\l_xsb_box[#3][#4]{\hbox_unpack:N\l_xsb_raw_box}
     }
     \xsb_process_box:nnnN{#2}{\width}{c}\l_xsb_box
   }
@@ -219,7 +210,7 @@
 
 \DeclareDocumentEnvironment{xlrbox*}{m}{
   \xsb_check_box_name:n{#1}
-  \xsb_xlrbox_star:
+  \xsb_xlrbox:
 }{
   \xsb_endxlrbox_star:n{#1}
 }
@@ -243,27 +234,27 @@
   \group_begin:
   \xsb_push_props: %new, empty properties dict
   \xsb_beginLTR:
-  \hbox_set:Nw\l_xsb_box\group_begin:
+  \hbox_set:Nw\l_xsb_box
+  \bool_lazy_and:nnF{ %prevent unused boxes from creating OCGs/OCMDs
+    \tl_if_exist_p:c{xsb@\int_use:N\g_xsb_id_int}
+  }{
+    \bool_if_p:c{c_\tl_use:c{xsb@\int_use:N\g_xsb_id_int}_bool}
+  }{
+    \DeclareDocumentEnvironment{ocg}{O{}mmm}{\ignorespaces}{\unskip}
+    \DeclareDocumentEnvironment{ocmd}{O{}m}{\ignorespaces}{\unskip}
+  }
   \ignorespaces
 }
 
 \cs_new_protected_nopar:Nn\xsb_endxlrbox:n{
   \unskip
-  \group_end:\hbox_set_end:
+  \hbox_set_end:
   \sbox\l_xsb_box{\hbox_unpack_drop:N\l_xsb_box}
   \xsb_process_box:nnnN{#1}{\width}{c}\l_xsb_box
   \xsb_endLTR:
   \group_end:
 }
 
-\cs_new_protected:Nn\xsb_xlrbox_star:{
-  \group_begin:
-  \xsb_push_props: %new, empty properties dict
-  \xsb_beginLTR:
-  \hbox_set:Nw\l_xsb_box
-  \ignorespaces
-}
-
 \cs_new_protected_nopar:Nn\xsb_endxlrbox_star:n{
   \unskip
   \hbox_set_end:
-- 
cgit v1.2.3

