summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/morewrites/morewrites.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-07-24 16:55:17 +0000
committerKarl Berry <karl@freefriends.org>2012-07-24 16:55:17 +0000
commit3accf11dd41cac5f2c81b83a2a712c77ffab2b6a (patch)
treee1b5a34217c371d2c469c5b9d79fe6b12f3624e4 /Master/texmf-dist/tex/latex/morewrites/morewrites.sty
parentc1841336503cc8eb2355c2eab40012c856f18369 (diff)
morewrites (18jul12)
git-svn-id: svn://tug.org/texlive/trunk@27138 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/morewrites/morewrites.sty')
-rw-r--r--Master/texmf-dist/tex/latex/morewrites/morewrites.sty540
1 files changed, 226 insertions, 314 deletions
diff --git a/Master/texmf-dist/tex/latex/morewrites/morewrites.sty b/Master/texmf-dist/tex/latex/morewrites/morewrites.sty
index 202c539dc7a..fe8cbf1ee6e 100644
--- a/Master/texmf-dist/tex/latex/morewrites/morewrites.sty
+++ b/Master/texmf-dist/tex/latex/morewrites/morewrites.sty
@@ -9,7 +9,7 @@
%% Communicate any suggestions for changing this package
%% to Bruno Le Floch (blflatex@gmail.com).
%%
-%% File: morewrites.dtx Copyright (C) 2011 Bruno Le Floch
+%% File: morewrites.dtx Copyright (C) 2011-2012 Bruno Le Floch
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -20,322 +20,231 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3names}
-\GetIdInfo$Id: morewrites.dtx 0.1 2011-09-09 00:00:00Z bruno $
- {Always room for a new write}%
\ProvidesExplPackage
- {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
-\RequirePackage{expl3}
-\cs_new_eq:NN \mw_tex_openin:w \tex_openin:D
-\cs_new_eq:NN \mw_tex_read:w \tex_read:D
-\cs_new_eq:NN \mw_etex_readline:w \etex_readline:D
-\cs_new_eq:NN \mw_tex_closein:w \tex_closein:D
-\cs_new_eq:NN \mw_tex_immediate:w \tex_immediate:D
-\cs_new_eq:NN \mw_tex_openout:w \tex_openout:D
-\cs_new_eq:NN \mw_tex_write:w \tex_write:D
-\cs_new_eq:NN \mw_tex_closeout:w \tex_closeout:D
-\cs_new_eq:NN \mw_tex_shipout:w \tex_shipout:D
-\int_new:N \g_mw_late_write_int
-\prop_new:N \g_mw_writes_prop
-\newread \g_mw_read
-\tl_const:Nn \c_mw_tmp_file_tl { \jobname.mw }
-\newwrite \g_mw_write
-\seq_new:N \g_mw_reserved_writes_seq
-\prg_stepwise_inline:nnnn {0} {1} { \g_mw_write - 1 }
- { \seq_gput_right:Nn \g_mw_reserved_writes_seq {#1} }
-\seq_gput_right:Nn \g_mw_reserved_writes_seq {18}
-\tl_new:N \l_mw_tmpa_tl
-\int_new:N \g_mw_step_int
-\int_new:N \g_mw_tmpa_int
-\newbox \g_mw_box
-\int_new:N \g_mw_stream_int
-\tl_new:N \g_mw_filename_tl
-\tl_new:N \g_mw_text_tl
-\cs_new_eq:NN \mw_scan_stop: \scan_stop:
-\cs_new_protected_nopar:Npn \mw_parse_number:Nw #1
- {
- \tex_afterassignment:D #1
- \tex_global:D \g_mw_stream_int
- }
-\cs_new_protected_nopar:Npn \mw_parse_text:Nw #1
+ {morewrites} {2012/07/10} {0.2} {Always room for a new write}
+\RequirePackage{expl3, primargs}
+\cs_new_eq:NN \__morewrites_tex_immediate:w \tex_immediate:D
+\cs_new_eq:NN \__morewrites_tex_openout:w \tex_openout:D
+\cs_new_eq:NN \__morewrites_tex_write:w \tex_write:D
+\cs_new_eq:NN \__morewrites_tex_closeout:w \tex_closeout:D
+\cs_new_eq:NN \__morewrites_tex_shipout:w \tex_shipout:D
+\int_new:N \g__morewrites_late_write_int
+\prop_new:N \g__morewrites_iow_prop
+\newwrite \g__morewrites_iow
+\newread \g__morewrites_ior
+\tl_new:N \g__morewrites_tmp_file_tl
+\tl_gset:Nn \g__morewrites_tmp_file_tl { \jobname.mw }
+\clist_new:N \g__morewrites_reserved_iow_clist
+\int_step_inline:nnnn {0} {1} { \g__morewrites_iow - 1 }
+ { \clist_gput_right:Nn \g__morewrites_reserved_iow_clist {#1} }
+\clist_gput_right:Nn \g__morewrites_reserved_iow_clist {18}
+\int_new:N \g__morewrites_stream_int
+\cs_new_eq:NN \s__morewrites \scan_stop:
+\tl_new:N \l__morewrites_internal_tl
+\cs_new_protected:Npn \__morewrites_equals_file_name:N #1
{
\group_begin:
\tex_aftergroup:D #1
- \tex_afterassignment:D \mw_parse_text_aux:
- \tex_toks:D \c_zero =
- }
-\cs_new_protected_nopar:Npn \mw_parse_text_aux:
- {
- \tl_gset:Nx \g_mw_text_tl { \tex_the:D \tex_toks:D \c_zero }
- \group_end:
- }
-\cs_new_protected_nopar:Npn \mw_parse_equals_filename:Nw #1
- {
- \peek_meaning_remove:NTF =
- { \mw_parse_filename:Nw #1 } { \mw_parse_filename:Nw #1 }
- }
-\cs_new_protected_nopar:Npn \mw_parse_filename:Nw #1
- {
- \group_begin:
- \group_align_safe_begin:
- \tex_aftergroup:D #1
- \tl_gclear:N \g_mw_filename_tl
- \mw_parse_filename_loop:w
- }
-\cs_new_protected_nopar:Npn \mw_parse_filename_loop:w
- { \peek_gafter:Nw \mw_parse_filename_loop_test: }
-\cs_new_protected_nopar:Npn \mw_parse_filename_loop_test:
- {
- \exp_after:wN \if_meaning:w \exp_not:N \g_peek_token \g_peek_token
- \exp_after:wN \use_ii:nn
- \else:
- \exp_after:wN \use_i:nn
- \fi:
- { \exp_after:wN \mw_parse_filename_loop:w }
- {
- \token_if_cs:NTF \g_peek_token
- { \mw_parse_filename_end: }
- {
- \mw_parse_filename_space_test:NTF \g_peek_token
- { \mw_parse_filename_space_do:w }
- {
- \exp_after:wN \mw_parse_filename_push:w
- \token_to_meaning:N
- }
- }
- }
+ \primargs_remove_equals:N \__morewrites_parse_file_name:
}
-\cs_new_protected_nopar:Npn \mw_parse_filename_end:
+\cs_new_protected:Npn \__morewrites_parse_file_name:
+ { \primargs_get_file_name:N \group_end: }
+\cs_new_protected_nopar:Npn \__morewrites_immediate:w
+ { \primargs_read_x_token:N \__morewrites_immediate_ii: }
+\cs_new_protected_nopar:Npn \__morewrites_immediate_ii:
{
- \group_align_safe_end:
- \group_end:
- }
- %^^A TeXlive's behaviour (?): space with any catcode
-\cs_new_protected_nopar:Npn \mw_parse_filename_space_test:NTF
- { \token_if_eq_charcode:NNTF \c_space_token }
-\cs_new_protected_nopar:Npn \mw_parse_filename_space_do:w
- {
- \tex_afterassignment:D \mw_parse_filename_end:
- \cs_set_eq:NN \g_peek_token
- }
-\cs_new_protected_nopar:Npn \mw_parse_filename_push:w #1 ~ %
- {
- \tl_if_in:nnTF { math ~ alignment ~ macro } { #1 }
- { \mw_parse_filename_push_three:w }
- { \mw_parse_filename_push_two:w }
- }
-\cs_new_protected_nopar:Npn \mw_parse_filename_push_two:w #1 ~ #2
- {
- \tl_gput_right:Nn \g_mw_filename_tl {#2}
- \mw_parse_filename_loop:w
- }
-\cs_new_protected_nopar:Npn \mw_parse_filename_push_three:w #1 ~ #2 ~ #3
- {
- \tl_gput_right:Nn \g_mw_filename_tl {#3}
- \mw_parse_filename_loop:w
+ \token_if_eq_meaning:NNT \g_primargs_token \s__morewrites
+ { \__morewrites_immediate_iii:N }
}
-\cs_new:Npn \mw_prg_case_meaning:Nnn #1#2#3
- { \mw_prg_case_meaning_aux:Nw #1 #2 #1 {#3} \q_recursion_stop }
-\cs_new:Npn \mw_prg_case_meaning_aux:Nw #1#2#3
+\cs_new_protected:Npn \__morewrites_immediate_iii:N #1
{
- \token_if_eq_meaning:NNTF #1 #2
- { \prg_case_end:nw {#3} }
- { \mw_prg_case_meaning_aux:Nw #1 }
- }
-\cs_new:Npn \mw_exp_after:Nf #1
- { \exp_after:wN #1 \tex_romannumeral:D -`0 }
-\cs_new_protected_nopar:Npn \mw_immediate:w
- {
- \scan_stop: %^^A?
- \mw_exp_after:Nf \mw_immediate_aux:w
- }
-\cs_new_protected_nopar:Npn \mw_immediate_aux:w
- {
- \peek_meaning:NT \mw_scan_stop:
- { \mw_immediate_mw_scan_stop:N }
- }
-\cs_new_protected_nopar:Npn \mw_immediate_mw_scan_stop:N #1
- {
- \str_if_eq:nnTF { #1 } { \mw_scan_stop: }
- { \mw_immediate_do:NN }
+ \tl_if_eq:nnTF { #1 } { \s__morewrites }
+ { \__morewrites_immediate_iv:NN }
{ #1 }
}
-\cs_new_protected_nopar:Npn \mw_immediate_do:NN #1 #2
+\cs_new_protected:Npn \__morewrites_immediate_iv:NN #1 #2
{
- \exp_args:Nc \mw_parse_number:Nw
+ \exp_args:Nc #1
{
- \exp_after:wN \mw_immediate_do_aux:w
+ \exp_after:wN \__morewrites_immediate_v:w
\token_to_str:N #2
}
}
\use:x
{
- \cs_new_protected_nopar:Npn \exp_not:N \mw_immediate_do_aux:w
- ##1 \tl_to_str:n {mw_} { mw_immediate_ }
+ \cs_new:Npn \exp_not:N \__morewrites_immediate_v:w
+ ##1 \tl_to_str:n { __morewrites } { __morewrites_immediate }
}
-\cs_new_protected_nopar:Npn \mw_immediate_closeout_test:
+\cs_new_protected:Npn \__morewrites_immediate_closeout_test:n #1
{
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_immediate:w \mw_tex_closeout:w \g_mw_stream_int }
- { \mw_immediate_closeout_aux: }
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_immediate:w \__morewrites_tex_closeout:w \g__morewrites_stream_int }
+ { \__morewrites_immediate_closeout_aux: }
}
-\cs_new_protected_nopar:Npn \mw_immediate_closeout_aux:
+\cs_new_protected_nopar:Npn \__morewrites_immediate_closeout_aux:
{
- \exp_args:NNV \prop_pop:NnNT
- \g_mw_writes_prop \g_mw_stream_int \l_mw_tmpa_tl
+ \exp_args:NNV \prop_pop:NnNT \g__morewrites_iow_prop
+ \g__morewrites_stream_int \l__morewrites_internal_tl
{
- \mw_tex_immediate:w \mw_tex_openout:w
- \g_mw_write \l_mw_tmpa_tl \scan_stop:
- \group_begin:
- \int_set_eq:NN \tex_newlinechar:D \c_minus_one
- \tl_use:c { g_mw_write_ \int_use:N \g_mw_stream_int _tl }
- \tl_gclear:c { g_mw_write_ \int_use:N \g_mw_stream_int _tl }
- \group_end:
- \mw_tex_immediate:w \mw_tex_closeout:w \g_mw_write
+ \__morewrites_immediate_write_and_close:nn
+ { \g__morewrites_stream_int } { \l__morewrites_internal_tl }
}
}
-\cs_new_protected_nopar:Npn \mw_immediate_openout_test:
+\cs_new_protected:Npn \__morewrites_immediate_write_and_close:nn #1#2
{
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_immediate:w \mw_tex_openout:w \g_mw_stream_int }
- { \mw_parse_equals_filename:Nw \mw_immediate_openout_aux: }
+ \__morewrites_tex_immediate:w \__morewrites_tex_openout:w
+ \g__morewrites_iow #2 \scan_stop:
+ \group_begin:
+ \int_set_eq:NN \tex_newlinechar:D \c_minus_one
+ \tl_use:c { g__morewrites_iow_ \int_eval:n {#1} _tl }
+ \tl_gclear:c { g__morewrites_iow_ \int_eval:n {#1} _tl }
+ \group_end:
+ \__morewrites_tex_immediate:w \__morewrites_tex_closeout:w \g__morewrites_iow
}
-\cs_new_protected_nopar:Npn \mw_immediate_openout_aux:
+\cs_new_protected:Npn \__morewrites_immediate_openout_test:n #1
{
- \mw_immediate_closeout_aux:
- \prop_gput:NVV \g_mw_writes_prop \g_mw_stream_int \g_mw_filename_tl
- \tl_gclear_new:c { g_mw_write_ \int_use:N \g_mw_stream_int _tl }
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_immediate:w \__morewrites_tex_openout:w \g__morewrites_stream_int }
+ { \__morewrites_equals_file_name:N \__morewrites_immediate_openout_aux:n }
}
-\cs_new_protected_nopar:Npn \mw_immediate_write_test:
+\cs_new_protected:Npn \__morewrites_immediate_openout_aux:n #1
{
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_immediate:w \mw_tex_write:w \g_mw_stream_int }
- { \mw_parse_text:Nw \mw_immediate_write_aux: }
+ \__morewrites_immediate_closeout_aux:
+ \prop_gput:NVn \g__morewrites_iow_prop \g__morewrites_stream_int {#1}
+ \tl_gclear_new:c { g__morewrites_iow_ \int_use:N \g__morewrites_stream_int _tl }
}
-\cs_new_protected_nopar:Npn \mw_immediate_write_aux:
+\cs_new_protected:Npn \__morewrites_immediate_write_test:n #1
{
- \prop_if_in:NVTF \g_mw_writes_prop \g_mw_stream_int
- {
- \mw_tex_immediate:w \mw_tex_openout:w \g_mw_write
- \c_mw_tmp_file_tl \scan_stop:
- \mw_tex_immediate:w \mw_tex_write:w \g_mw_write { \g_mw_text_tl }
- \mw_tex_immediate:w \mw_tex_closeout:w \g_mw_write
- \group_begin:
- \int_set_eq:NN \tex_endlinechar:D \c_minus_one
- \mw_tex_openin:w \g_mw_read \c_mw_tmp_file_tl \scan_stop:
- \mw_immediate_write_aux_readlines:
- \mw_tex_closein:w \g_mw_read
- \group_end:
- }
- {
- \mw_tex_immediate:w \mw_tex_write:w
- \if_num:w \g_mw_stream_int < \c_zero
- -1
- \else:
- 16
- \fi:
- { \g_mw_text_tl }
- }
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_immediate:w \__morewrites_tex_write:w \g__morewrites_stream_int }
+ { \primargs_get_general_text:N \__morewrites_immediate_write_aux:n }
}
-\cs_new_protected_nopar:Npn \mw_immediate_write_aux_readlines:
+\cs_new_protected_nopar:Npn \__morewrites_immediate_write_aux:n
{
- \mw_etex_readline:w \g_mw_read to \l_tmpa_tl
- \ior_if_eof:NF \g_mw_read
- {
- \tl_gput_right:cx
- { g_mw_write_ \int_use:N \g_mw_stream_int _tl }
- { \mw_tex_immediate:w \mw_tex_write:w \g_mw_write { \l_tmpa_tl } }
- \mw_immediate_write_aux_readlines:
- }
+ \prop_if_in:NVTF \g__morewrites_iow_prop \g__morewrites_stream_int
+ { \__morewrites_immediate_write_open:n }
+ { \__morewrites_immediate_write_closed:n }
}
-\cs_new_protected_nopar:Npn \mw_late_aux:nN #1 #2
+\cs_new_protected:Npn \__morewrites_immediate_write_closed:n #1
{
- \int_gincr:N \g_mw_late_write_int
- \tl_const:cx { c_mw_late_write_ \int_use:N \g_mw_late_write_int _tl }
- {
- \int_gset:Nn \exp_not:N \g_mw_stream_int
- { \exp_not:V \g_mw_stream_int }
- #1
- \exp_not:N #2
- }
- \exp_args:NNx \mw_tex_write:w \g_mw_write
- { `( \int_use:N \g_mw_late_write_int ) }
+ \__morewrites_tex_immediate:w \__morewrites_tex_write:w
+ \if_num:w \g__morewrites_stream_int < \c_zero
+ -1
+ \else:
+ 16
+ \fi:
+ {#1}
}
-\cs_new_protected_nopar:Npn \mw_openout:w
- { \mw_scan_stop: \mw_parse_number:Nw \mw_openout_test: }
-\cs_new_protected_nopar:Npn \mw_openout_test:
+\cs_new_protected:Npn \__morewrites_immediate_write_open:n #1
{
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_openout:w \g_mw_stream_int }
- { \mw_parse_equals_filename:Nw \mw_openout_aux: }
+ \__morewrites_tex_immediate:w \__morewrites_tex_openout:w \g__morewrites_iow
+ \g__morewrites_tmp_file_tl \scan_stop:
+ \__morewrites_tex_immediate:w \__morewrites_tex_write:w \g__morewrites_iow {#1}
+ \__morewrites_tex_immediate:w \__morewrites_tex_closeout:w \g__morewrites_iow
+ \group_begin:
+ \int_set_eq:NN \tex_endlinechar:D \c_minus_one
+ \tex_openin:D \g__morewrites_ior \g__morewrites_tmp_file_tl \scan_stop:
+ \__morewrites_immediate_write_readlines_loop:
+ \tex_closein:D \g__morewrites_ior
+ \group_end:
}
-\cs_new_protected_nopar:Npn \mw_openout_aux:
+\cs_new_protected_nopar:Npn \__morewrites_immediate_write_readlines_loop:
{
- \mw_late_aux:nN
+ \etex_readline:D \g__morewrites_ior to \l__morewrites_internal_tl
+ \ior_if_eof:NF \g__morewrites_ior
{
- \tl_gset:Nn \exp_not:N \g_mw_filename_tl
- { \exp_not:V \g_mw_filename_tl }
+ \tl_gput_right:cx
+ { g__morewrites_iow_ \int_use:N \g__morewrites_stream_int _tl }
+ {
+ \__morewrites_tex_immediate:w \__morewrites_tex_write:w \g__morewrites_iow
+ { \l__morewrites_internal_tl }
+ }
+ \__morewrites_immediate_write_readlines_loop:
}
- \mw_immediate_openout_aux:
- }
-\cs_new_protected_nopar:Npn \mw_write:w
- { \mw_scan_stop: \mw_parse_number:Nw \mw_write_test: }
-\cs_new_protected_nopar:Npn \mw_write_test:
- {
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_write:w \g_mw_stream_int }
- { \mw_parse_text:Nw \mw_write_aux: }
}
-\cs_new_protected_nopar:Npn \mw_write_aux:
+\cs_new_protected:Npn \__morewrites_late:n #1
{
- \mw_late_aux:nN
+ \int_gincr:N \g__morewrites_late_write_int
+ \tl_const:cx
{
- \tl_gset:Nn \exp_not:N \g_mw_text_tl
- { \exp_not:V \g_mw_text_tl }
+ c__morewrites_late_write_
+ \int_use:N \g__morewrites_late_write_int
+ _tl
}
- \mw_immediate_write_aux:
- }
-\cs_new_protected_nopar:Npn \mw_closeout:w
- { \mw_scan_stop: \mw_parse_number:Nw \mw_closeout_test: }
-\cs_new_protected_nopar:Npn \mw_closeout_test:
- {
- \seq_if_in:NVTF \g_mw_reserved_writes_seq \g_mw_stream_int
- { \mw_tex_closeout:w \g_mw_stream_int }
- { \mw_closeout_aux: }
- }
-\cs_new_protected_nopar:Npn \mw_closeout_aux:
- { \mw_late_aux:nN { } \mw_immediate_closeout_aux: }
-\cs_new_protected_nopar:Npn \mw_before_shipout:
- {
- \mw_tex_immediate:w \mw_tex_openout:w \g_mw_write
- \c_mw_tmp_file_tl \scan_stop:
- }
-\seq_new:N \g_mw_operations_seq
-\cs_new_protected_nopar:Npn \mw_after_shipout:
- {
- \mw_tex_immediate:w \mw_tex_closeout:w \g_mw_write
+ {
+ \int_gset:Nn \exp_not:N \g__morewrites_stream_int
+ { \exp_not:V \g__morewrites_stream_int }
+ \exp_not:n {#1}
+ }
+ \exp_args:NNx \__morewrites_tex_write:w \g__morewrites_iow
+ { `( \int_use:N \g__morewrites_late_write_int ) }
+ }
+\cs_new_protected_nopar:Npn \__morewrites_openout:w
+ { \s__morewrites \primargs_get_number:N \__morewrites_openout_test:n }
+\cs_new_protected:Npn \__morewrites_openout_test:n #1
+ {
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_openout:w \g__morewrites_stream_int }
+ { \__morewrites_equals_file_name:N \__morewrites_openout_aux:n }
+ }
+\cs_new_protected:Npn \__morewrites_openout_aux:n #1
+ { \__morewrites_late:n { \__morewrites_immediate_openout_aux:n {#1} } }
+\cs_new_protected_nopar:Npn \__morewrites_write:w
+ { \s__morewrites \primargs_get_number:N \__morewrites_write_test:n }
+\cs_new_protected:Npn \__morewrites_write_test:n #1
+ {
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_write:w \g__morewrites_stream_int }
+ { \primargs_get_general_text:N \__morewrites_write_aux:n }
+ }
+\cs_new_protected:Npn \__morewrites_write_aux:n #1
+ { \__morewrites_late:n { \__morewrites_immediate_write_aux:n {#1} } }
+\cs_new_protected_nopar:Npn \__morewrites_closeout:w
+ { \s__morewrites \primargs_get_number:N \__morewrites_closeout_test:n }
+\cs_new_protected:Npn \__morewrites_closeout_test:n #1
+ {
+ \int_gset:Nn \g__morewrites_stream_int {#1}
+ \clist_if_in:NnTF \g__morewrites_reserved_iow_clist {#1}
+ { \__morewrites_tex_closeout:w \g__morewrites_stream_int }
+ { \__morewrites_closeout_aux: }
+ }
+\cs_new_protected_nopar:Npn \__morewrites_closeout_aux:
+ { \__morewrites_late:n { \__morewrites_immediate_closeout_aux: } }
+\cs_new_protected_nopar:Npn \__morewrites_before_shipout:
+ {
+ \__morewrites_tex_immediate:w \__morewrites_tex_openout:w \g__morewrites_iow
+ \g__morewrites_tmp_file_tl \scan_stop:
+ }
+%% ^^A todo: \shipout{\immediate\write4{}} => bug.
+\cs_new_protected_nopar:Npn \__morewrites_after_shipout:
+ {
+ \__morewrites_tex_immediate:w \__morewrites_tex_closeout:w \g__morewrites_iow
\group_begin:
\int_set_eq:NN \tex_endlinechar:D \tex_newlinechar:D
+ \char_set_catcode_other:n { \tex_endlinechar:D }
\tl_map_inline:nn { `(0123456789) }
{ \char_set_catcode_other:n {`##1} }
\etex_everyeof:D { `() \exp_not:N }
- \tl_gset:Nx \g_mw_operations_seq
- { \if_false: } \fi:
- \exp_after:wN \mw_after_shipout_loop:ww
- \tex_input:D \c_mw_tmp_file_tl \scan_stop:
+ \exp_args:NNx
\group_end:
- \seq_map_inline:Nn \g_mw_operations_seq
+ \tl_map_inline:nn
{
- \tl_use:c
- { c_mw_late_write_ ##1 _tl }
+ \exp_after:wN \__morewrites_after_shipout_loop:ww
+ \tex_input:D \g__morewrites_tmp_file_tl \c_space_tl %^^A bug?
}
+ { \tl_use:c { c__morewrites_late_write_ ##1 _tl } }
}
-\cs_new:Npn \mw_after_shipout_loop:ww #1 `( #2 )
+\cs_new:Npn \__morewrites_after_shipout_loop:ww #1 `( #2 )
{
- \tl_if_empty:nTF {#2}
- { \if_false: { \fi: } }
+ \tl_if_empty:nF {#2}
{
- \exp_not:N \seq_item:n {#2}
- \mw_after_shipout_loop:ww
+ {#2}
+ \__morewrites_after_shipout_loop:ww
}
}
\IfFileExists{atbegshi.sty}
@@ -344,85 +253,88 @@
\tl_replace_once:Nnn \AtBegShi@Output
{ \AtBegShi@OrgShipout \box \AtBeginShipoutBox }
{
- \mw_before_shipout:
+ \__morewrites_before_shipout:
\AtBegShi@OrgShipout \box \AtBeginShipoutBox
- \mw_after_shipout:
+ \__morewrites_after_shipout:
}
\tl_replace_once:Nnn \AtBegShi@Output
{ \AtBeginShipoutOriginalShipout \box \AtBeginShipoutBox }
{
- \mw_before_shipout:
+ \__morewrites_before_shipout:
\AtBeginShipoutOriginalShipout \box \AtBeginShipoutBox
- \mw_after_shipout:
+ \__morewrites_after_shipout:
}
}
{
- \cs_new_protected_nopar:Npn \mw_shipout:w
+ \int_new:N \g__morewrites_group_level_int
+ \box_new:N \g__morewrites_shipout_box
+ \cs_new_protected_nopar:Npn \__morewrites_shipout:w
{
- \int_gset_eq:NN \g_mw_tmpa_int \etex_currentgrouplevel:D
- \tex_afterassignment:D \mw_shipout_aux:
- \tex_global:D \tex_setbox:D \g_mw_box
+ \int_gset_eq:NN \g__morewrites_group_level_int \etex_currentgrouplevel:D
+ \tex_afterassignment:D \__morewrites_shipout_i:
+ \tex_global:D \tex_setbox:D \g__morewrites_shipout_box
}
- \cs_new_protected_nopar:Npn \mw_shipout_aux:
+ \cs_new_protected_nopar:Npn \__morewrites_shipout_i:
{
- \int_compare:nNnTF { \g_mw_tmpa_int }
+ \int_compare:nNnTF { \g__morewrites_group_level_int }
= { \etex_currentgrouplevel:D }
- { \mw_shipout_aux_ii: }
- { \tex_aftergroup:D \mw_shipout_aux_ii: }
+ { \__morewrites_shipout_ii: }
+ { \tex_aftergroup:D \__morewrites_shipout_ii: }
}
- \cs_new_protected_nopar:Npn \mw_shipout_aux_ii:
+ \cs_new_protected_nopar:Npn \__morewrites_shipout_ii:
{
- \mw_before_shipout:
- \mw_tex_shipout:w \tex_box:D \g_mw_box
- \mw_after_shipout:
+ \__morewrites_before_shipout:
+ \__morewrites_tex_shipout:w \tex_box:D \g__morewrites_shipout_box
+ \__morewrites_after_shipout:
}
- \cs_gset_eq:NN \shipout \mw_shipout:w
+ \AtBeginDocument { \cs_gset_eq:NN \shipout \__morewrites_shipout:w }
}
-\cs_new_protected_nopar:Npn \mw_close_all:
+\int_new:N \g__morewrites_at_end_int
+\int_gset:Nn \g__morewrites_at_end_int { 10 }
+\cs_new_protected_nopar:Npn \__morewrites_close_all:
{
- \prop_map_inline:Nn \g_mw_writes_prop
- {
- \mw_tex_immediate:w \mw_tex_openout:w \g_mw_write ##2 \scan_stop:
- \group_begin:
- \int_set_eq:NN \tex_newlinechar:D \c_minus_one
- \tl_use:c { g_mw_write_ ##1 _tl }
- \tl_gclear:c { g_mw_write_ ##1 _tl }
- \group_end:
- \mw_tex_immediate:w \mw_tex_closeout:w \g_mw_write
- }
- \prop_gclear:N \g_mw_writes_prop
+ \prop_map_function:NN \g__morewrites_iow_prop
+ \__morewrites_immediate_write_and_close:nn
+ \prop_gclear:N \g__morewrites_iow_prop
}
- % \IfFileExists{atveryend.sty} { \use_i:nn } { \use_ii:nn }
- % {
- % \RequirePackage {atveryend} [2011/06/29]
- % \AtVeryVeryEnd { \mw_close_all: }
- % }
- % {
- \cs_new_protected:Npn \mw_put_at_end:Nw #1 #2 \@@end
+\cs_set:Npn \__morewrites_tmp:w #1
+ {
+ \cs_new_protected:Npn \__morewrites_close_all_at_end:w ##1 #1
{
- \tl_if_empty:nTF {#2}
- { #1 \@@end }
- { #2 \mw_put_at_end:Nw #1 \@@end }
+ \int_gdecr:N \g__morewrites_at_end_int
+ \int_compare:nNnTF \g__morewrites_at_end_int > \c_zero
+ {
+ \tl_if_empty:nTF {##1}
+ { ##1 \__morewrites_close_all: }
+ { ##1 \__morewrites_close_all_at_end:w }
+ }
+ { \__morewrites_close_all: ##1 }
+ #1
}
- \AtEndDocument { \mw_put_at_end:Nw \mw_close_all: }
- % }
-\countdef \mw_write_int 17 \scan_stop:
-\cs_new:Npn \mw_newwrite:N #1
+ }
+\exp_args:Nc \__morewrites_tmp:w { @ @ end }
+\AtEndDocument { \__morewrites_close_all_at_end:w }
+\tex_countdef:D \g__morewrites_alloc_int 17 \scan_stop:
+\cs_new:Npn \__morewrites_newwrite:N #1
{
- \if_num:w \mw_write_int = \c_sixteen
- \int_gset:Nn \mw_write_int { 20 }
+ \int_gincr:N \g__morewrites_alloc_int
+ \if_num:w \g__morewrites_alloc_int = \c_sixteen
+ \int_gset:Nn \g__morewrites_alloc_int { 20 }
\fi:
- \int_set_eq:NN \allocationnumber \mw_write_int
- \int_gincr:N \mw_write_int
+ \int_set_eq:NN \allocationnumber \g__morewrites_alloc_int
\cs_undefine:N #1
\int_const:Nn #1 { \allocationnumber }
- \wlog {\string #1=\string \write \the \allocationnumber }
+ \wlog
+ {
+ \token_to_str:N #1
+ = \token_to_str:N \write \int_use:N \allocationnumber
+ }
}
-\cs_gset_eq:NN \immediate \mw_immediate:w
-\cs_gset_eq:NN \openout \mw_openout:w
-\cs_gset_eq:NN \write \mw_write:w
-\cs_gset_eq:NN \closeout \mw_closeout:w
-\cs_gset_eq:NN \newwrite \mw_newwrite:N
+\cs_gset_eq:NN \immediate \__morewrites_immediate:w
+\cs_gset_eq:NN \openout \__morewrites_openout:w
+\cs_gset_eq:NN \write \__morewrites_write:w
+\cs_gset_eq:NN \closeout \__morewrites_closeout:w
+\cs_gset_eq:NN \newwrite \__morewrites_newwrite:N
%%
%%
%% End of file `morewrites.sty'.