texlive[60329] Master/texmf-dist: context-filter (26aug21)

commits+karl at tug.org commits+karl at tug.org
Thu Aug 26 23:25:10 CEST 2021


Revision: 60329
          http://tug.org/svn/texlive?view=revision&revision=60329
Author:   karl
Date:     2021-08-26 23:25:10 +0200 (Thu, 26 Aug 2021)
Log Message:
-----------
context-filter (26aug21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/context/third/filter/VERSION
    trunk/Master/texmf-dist/doc/context/third/filter/filter.txt

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/context/third/filter/t-filter.mkxl

Modified: trunk/Master/texmf-dist/doc/context/third/filter/VERSION
===================================================================
--- trunk/Master/texmf-dist/doc/context/third/filter/VERSION	2021-08-26 21:24:06 UTC (rev 60328)
+++ trunk/Master/texmf-dist/doc/context/third/filter/VERSION	2021-08-26 21:25:10 UTC (rev 60329)
@@ -1 +1 @@
-2020.06.29
+2021.08.24

Modified: trunk/Master/texmf-dist/doc/context/third/filter/filter.txt
===================================================================
--- trunk/Master/texmf-dist/doc/context/third/filter/filter.txt	2021-08-26 21:24:06 UTC (rev 60328)
+++ trunk/Master/texmf-dist/doc/context/third/filter/filter.txt	2021-08-26 21:25:10 UTC (rev 60329)
@@ -68,18 +68,34 @@
 Installation
 ------------
 
-Writing installation instructions is always boring. If you are using ConTeXt
-standalone, you can install the module using
+The method to install the module depends on your installation. 
 
+### ConTeXt standalone
+
+If you are using [ConTeXt standalone](https://wiki.contextgarden.net/ConTeXt_Standalone) installed with `first-setup.sh`, you can install the module using
+
     first-setup.sh --modules="t-filter"
 
-Depending on your TeX distribution, you may already have the module.
-To verify, check if
+### ConTeXt LMTX
 
+[ConteXt LMTX](https://wiki.contextgarden.net/Installation), which uses the
+new `luametatex` engine does not yet provide a built-in way to install and
+manage modules. See [the ConTeXt
+Wiki](https://wiki.contextgarden.net/Modules#ConTeXt_LMTX) for a workaround.
+
+### TexLive 
+
+TexLive comes with its own manager `tlmgr` to install modules. The module is
+listed there as `context-fiter`. 
+
+### Manual installation
+Depending on your setup, it might already be installed on your system. To verify wether you already have the module, check if
+
     luatools t-filter.mkiv
 
 returns a meaningful path. If not, you have to manually install the module.
 
+
 Download the latest version of the module from
 [http://modules.contextgarden.net/filter](http://modules.contextgarden.net/filter)
 and unzip it either `$TEXMFHOME` or `$TEXMFLOCAL`. Run
@@ -86,7 +102,7 @@
 
     mtxrun --generate
 
-and
+and (if you are using MkII)
 
     mktexlsr
 
@@ -104,7 +120,7 @@
     shell_escape=t
 
 in your `texmf.cnf` file. See this page
-[http://wiki.contextgarden.net/write18](http://wiki.contextgarden.net/write18)
+[http://wiki.contextgarden.net/Write18](http://wiki.contextgarden.net/Write18)
 on the ConTeXt wiki for detailed instructions.
 
 Basic Usage

Added: trunk/Master/texmf-dist/tex/context/third/filter/t-filter.mkxl
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/filter/t-filter.mkxl	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/third/filter/t-filter.mkxl	2021-08-26 21:25:10 UTC (rev 60329)
@@ -0,0 +1,553 @@
+%D \module
+%D   [     file=t-filter,
+%D      version=2021.08.24,
+%D        title=\CONTEXT\ User Module,
+%D     subtitle=Filter,
+%D       author=Aditya Mahajan,
+%D         date=\currentdate,
+%D    copyright=Aditya Mahajan,
+%D        email=adityam <at> ieee <dot> org,
+%D      license=Simplified BSD License]
+
+\writestatus{loading}{Filter (ver: 2021.08.24)}
+
+\startmodule [filter]
+\usemodule   [module-catcodes]
+\unprotect
+
+% \f!temporaryextension was removed from the core in July 2012.
+\ifx\f!temporaryextension\undefined \def\f!temporaryextension{tmp} \fi
+
+%D \subject {Interface}
+%D
+%D Using interface constants allows one to use \type{\c!filter} etc. in
+%D the module definition, and thereby reduces the risk of a typo.
+%D Currently, only English names are provided. If someone wants a
+%D multi-lingual interface, let me know and I will add other language
+%D names as well,
+
+\startinterface all
+    \setinterfaceconstant {filter}           {filter}
+    \setinterfaceconstant {filtercommand}    {filtercommand}
+    \setinterfaceconstant {output}           {output}
+    \setinterfaceconstant {purge}            {purge}
+    \setinterfaceconstant {read}             {read}
+    \setinterfaceconstant {write}            {write}
+    \setinterfaceconstant {readcommand}      {readcommand}
+    \setinterfaceconstant {taglabel}         {taglabel}
+    \setinterfaceconstant {tagdetail}        {tagdetail}
+\stopinterface
+
+
+%D \subject {Name space}
+%D
+%D We use logical names to easily catch typos.
+
+\def\externalfilter at id          {externalfilter}
+
+\def\externalfilter at temp_prefix {temp}
+\def\externalfilter at count       {\????externalfilter-\currentexternalfilter-counter}
+
+\definenamespace
+  [externalfilter]
+  [\c!type=module,
+   \c!name=externalfilter,
+   \c!command=\v!yes,
+   setup=\v!list,
+   \c!style=\v!yes,
+   \s!parent=externalfilter]
+
+\appendtoks
+    \externalfilter at show_status{defining filter : \currentexternalfilter}%
+    \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force}
+         {\ifcsname\externalfilter at count\endcsname \else
+          \expandafter\newcounter\csname\externalfilter at count\endcsname\fi}%
+    \setuevalue{\e!start\currentexternalfilter}{\externalfilter at start[\currentexternalfilter]}%
+    \setuvalue {\e!stop\currentexternalfilter}{}%
+    \setuevalue{process\currentexternalfilter file}{\externalfilter at process_file[\currentexternalfilter]}%
+    \setuevalue{process\currentexternalfilter buffer}{\externalfilter at process_buffer[\currentexternalfilter]}%
+    \setuevalue{inline\currentexternalfilter}{\externalfilter at inline[\currentexternalfilter]}%
+    \setelementbackendtag[\externalfilterparameter\c!taglabel]
+    \setelementnature    [\externalfilterparameter\c!taglabel][display]
+    \setelementbackendtag[inline\externalfilterparameter\c!taglabel]
+    \setelementnature    [inline\externalfilterparameter\c!taglabel][inline]
+\to \everydefineexternalfilter
+
+% For backward compatibility
+\let\setupexternalfilters \setupexternalfilter
+
+%D \subject {Messages}
+
+\def\m!externalfilter{t-filter}
+
+\setinterfacemessage\m!externalfilter{title}            {\m!externalfilter}
+\setinterfacemessage\m!externalfilter{notfound}         {file -- cannot be found}
+\setinterfacemessage\m!externalfilter{missing}          {output file missing}
+\setinterfacemessage\m!externalfilter{missing_cache}    {cached output file -- missing. Rerunning filter}
+\setinterfacemessage\m!externalfilter{forbidden}        {Fatal Error: Cannot use absolute path -- as directory}
+\setinterfacemessage\m!externalfilter{unwriteable}      {Fatal Error: Cannot write to file --}
+\setinterfacemessage\m!externalfilter{slash}            {Appending / to directory -- }
+\setinterfacemessage\m!externalfilter{reuse}            {\c!state=\v!stop : Not running filter on file --}
+\setinterfacemessage\m!externalfilter{writedisabled}    {\c!write=\v!no : Not writing output for filter --}
+
+
+%D \subject {Tracing Macros}
+
+\newif\iftraceexternalfilters
+
+\unexpanded\def\traceexternalfilters
+    {\traceexternalfilterstrue
+     \enabletrackers[graphic.runfile]}
+
+\starttexdefinition externalfilter at show_filenames
+    \writestatus\m!externalfilter{current filter : \currentexternalfilter}
+    \writestatus\m!externalfilter{base file      : \externalfilter at base_file}
+    \writestatus\m!externalfilter{input file     : \externalfilter at input_file}
+    \writestatus\m!externalfilter{output file    : \externalfilter at output_file}
+\stoptexdefinition
+
+\starttexdefinition externalfilter at show_status #1
+    \iftraceexternalfilters
+        \writestatus\m!externalfilter{#1}
+    \fi
+\stoptexdefinition
+
+\starttexdefinition externalfilter at show_filtercommand
+    \writestatus\m!externalfilter{command : \externalfilterparameter\c!filtercommand}
+    \writestatus\m!externalfilter{state   : \externalfilterparameter\c!state}
+\stoptexdefinition
+
+%D \section {The main user macros}
+
+\unexpanded\def\externalfilter at start
+    {\bgroup\obeylines\dodoubleargument\externalfilter at start_indeed}
+
+\starttexdefinition externalfilter at start_indeed [#1][#2]
+    % #1 = filter
+    % #2 = options
+    \egroup %\bgroup in \externalfilter at start
+
+    \begingroup % to keep assignments local
+    \edef\currentexternalfilter{#1}
+
+    \setupexternalfilter[#1][\c!name=,#2]
+
+    \externalfilter at set_filenames
+
+    % Capture the contents of the buffer
+    \edef\p_strip{\getvalue{\externalfilter at id-\c!strip-\externalfilterparameter\c!strip}}
+    \buff_pickup{\externalfilter at buffer_name}{\e!start#1}{\e!stop#1}{}{\externalfilter at process_filter}{\p_strip}
+\stoptexdefinition
+
+\setvalue{\externalfilter at id-\c!strip-}{\zerocount}
+\setvalue{\externalfilter at id-\c!strip-\v!off}{\zerocount}
+\setvalue{\externalfilter at id-\c!strip-\v!on}{\plusone}
+
+\setvalue{\externalfilter at id-\c!strip-\v!no}{\zerocount}
+\setvalue{\externalfilter at id-\c!strip-\v!yes}{\plusone}
+
+\unexpanded\def\externalfilter at process_file
+    {\dodoubleargument\externalfilter at process_file_indeed}
+
+\starttexdefinition externalfilter at process_file_indeed [#1][#2]#3
+    % #1 = filter
+    % #2 = options
+    % #3 = filename
+    \begingroup
+
+    \edef\currentexternalfilter{#1}
+    \setupexternalfilter[#1][\c!name=,#2]
+
+    \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup
+    \externalfilter at set_directory
+
+    \edef\externalfilter at input_file{\externalfilter at any_filename{#3}}
+    \splitfilename{#3}
+    %NOTE: \edef doesn not work because \splitoffname is not expandable
+    \def\externalfilter at base_file   {\splitoffname}
+
+    % The output is always in the directory specified by
+    % \c!directory; even if the input is from some other directory
+    \def\externalfilter at output_file{\externalfilter at get_directory\externalfilterparameter\c!output}
+
+    \iftraceexternalfilters \externalfilter at show_filenames \fi
+    \externalfilter at execute_filter
+    \externalfilter at read_processed_file
+
+    \endgroup
+\stoptexdefinition
+
+\unexpanded\def\externalfilter at process_buffer
+    {\dotripleargument\externalfilter at process_buffer_indeed}
+
+\starttexdefinition externalfilter at process_buffer_indeed [#1][#2][#3]
+    % #1 = filter
+    % #2 = options
+    % #3 = buffer
+    \begingroup
+
+    \edef\currentexternalfilter{#1}
+    \ifthirdargument
+      \setupexternalfilter[#1][\c!name=,#2]
+    \fi
+
+    \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup
+    \externalfilter at set_directory
+
+    \ifthirdargument
+      \edef\externalfilter at buffer_name{#3}
+    \else
+      \edef\externalfilter at buffer_name{#2}
+    \fi
+
+    \externalfilter at set_filenames_extras
+
+    \iftraceexternalfilters \externalfilter at show_filenames \fi
+
+    \externalfilter at process_filter
+
+\stoptexdefinition
+
+\unexpanded\def\externalfilter at inline
+    {\dodoubleargument\externalfilter at inline_indeed}
+
+\starttexdefinition externalfilter at inline_indeed [#1][#2]
+   \begingroup % to keep assignments local
+   \edef\currentexternalfilter{#1}
+
+   \setupexternalfilter[#1][\c!escape=\v!off,\c!numbering=,\c!name=,\c!location=\v!text,#2]
+
+   \externalfilter at set_filenames
+   \doifelse{\externalfilterparameter\c!write}\v!no
+       \externalfilter at inline_write_disabled
+       \externalfilter at inline_write_enabled
+\stoptexdefinition
+       
+\starttexdefinition externalfilter at inline_write_disabled
+   \iftraceexternalfilters \showmessage\m!externalfilter{writedisabled} \currentexternalfilter \fi 
+
+   \externalfilter at execute_filter
+   \endlinechar\minusone %to prevent line break after reading file
+   \externalfilter at read_processed_file
+
+   % Finalization
+   \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force}
+        {\doglobal\incrementvalue\externalfilter at count}
+   \endgroup
+\stoptexdefinition
+
+\starttexdefinition externalfilter at inline_write_enabled
+   \pushcatcodetable
+   \futurelet\next\externalfilter at inline_grabcontent
+\stoptexdefinition
+
+%D \subsubject {Write argument to file verbatim}
+%D
+%D Surprisingly, there is nothing in the core to define a function that write its
+%D argument to a file verbatim. I basically copied the \type{\type} macro.
+
+\starttexdefinition externalfilter at inline_grabcontent
+   \ifx\next\bgroup
+       \expandafter\externalfilter at inline_group
+   \else
+       \expandafter\externalfilter at inline_other
+   \fi
+\stoptexdefinition
+
+\starttexdefinition externalfilter at inline_group
+    \setcatcodetable \externalfilter at read_catcodes
+    \externalfilter at process_inline
+\stoptexdefinition
+
+\starttexdefinition externalfilter at inline_other #1
+    \setcatcodetable \externalfilter at verb_catcodes
+
+    \def\next##1#1{\externalfilter at process_inline{##1}}
+    \next
+\stoptexdefinition
+
+\newwrite\externalfilter at write
+
+\starttexdefinition externalfilter at process_inline #1
+    \immediate\openout \externalfilter at write\externalfilter at input_file
+    \immediate\write   \externalfilter at write{\detokenize{#1}}
+    \immediate\closeout\externalfilter at write
+
+    \popcatcodetable
+
+    \externalfilter at execute_filter
+    \endlinechar\minusone %to prevent line break after reading file
+    \externalfilter at read_processed_file
+
+     \iftraceexternalfilters \else 
+        \doif{\externalfilterparameter\c!purge}\v!yes
+             {\ctxlua{os.remove(\!!bs\externalfilter at input_file\!!es)}}
+     \fi
+    % Finalization
+    \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force}
+         {\doglobal\incrementvalue\externalfilter at count}
+    \endgroup
+\stoptexdefinition
+
+
+%D \section {Helper Functions}
+%D
+%D \subsubject {First and last character of a string}
+
+\def\externalfilter at get_first_character#1%
+  {\externalfilter at get_first_character_indeed#1\relax}
+
+\def\externalfilter at get_first_character_indeed#1#2\relax{#1}
+
+\def\externalfilter at get_last_character#1%
+  {\expandafter\externalfilter at get_last_character_indeed#1\relax}
+
+\def\externalfilter at get_last_character_indeed#1#2%
+  {\ifx#2\relax#1\else\expandafter\externalfilter at get_last_character_indeed\expandafter#2\fi}
+
+%D \subsubject {Setting font and color attributes}
+%D I want to use the same interface for MkII and MkIV
+
+\starttexdefinition externalfilter at attributes_start #1#2#3
+    % id style color
+    \getvalue{use#1styleandcolor}{#2}{#3}
+\stoptexdefinition
+
+\def\externalfilter at attributes_stop{}
+
+%D \subsubject {Set the name of output directory}
+
+\starttexdefinition externalfilter at set_directory
+    \edef\externalfilter at get_directory{\externalfilterparameter\c!directory}
+    \doifsomething{\externalfilter at get_directory}\externalfilter at set_directory_indeed
+\stoptexdefinition
+
+\starttexdefinition externalfilter at set_directory_indeed
+    \doif{\externalfilter at get_first_character\externalfilter at get_directory}{/}
+        {\writeline
+         \showmessage\m!externalfilter{forbidden}\externalfilter at get_directory
+         \batchmode
+         \errmessage{}
+         \normalend}
+
+    \doifnot{\externalfilter at get_last_character\externalfilter at get_directory}{/}
+        {\iftraceexternalfilters \showmessage\m!externalfilter{slash}\externalfilter at get_directory \fi
+         \edef\externalfilter at get_directory{\externalfilter at get_directory/}}
+\stoptexdefinition
+
+%D \subsubject {Check if file is writeable}
+
+\starttexdefinition externalfilter at check_writable #1
+
+    \ctxcommand{doifnot(file.is_writable("#1"))}
+        {\showmessage\m!externalfilter{unwriteable}{#1}
+         \batchmode
+         \errmessage{}
+         \normalend}
+\stoptexdefinition
+
+%D \subsubject {Find file name (with search in \usepath)}
+%D 
+%D The `\locfilename` macro does not search in the path specified by `\usepath`.
+%D So, we define a macro that is based on `\readfile`.
+
+\def\externalfilter at any_filename#1%
+    {\clf_getreadfilename{any}{.}{#1}}
+
+%D \subsubject {Set file names}
+%D
+%D \type{\externalfilter at base_file} is the name of the temporary file without
+%D extension. Its actual value depends on the state of \type{cache} key as
+%D well as the value of \type{name} key.
+
+\starttexdefinition externalfilter at set_filenames
+   \processcommacommand[\externalfilterparameter{\c!filter\c!setups}]\directsetup
+   \externalfilter at set_directory
+
+   % Set the name of temp file for the filter
+   \doifinsetelse{\externalfilterparameter\c!cache}{\v!yes,\v!force}
+        {\edef\externalfilter at buffer_name{\externalfilter at temp_prefix-\currentexternalfilter-\csname\externalfilter at count\endcsname}}
+        {\edef\externalfilter at buffer_name{\externalfilter at temp_prefix-\currentexternalfilter}}
+   \doifsomething{\externalfilterparameter\c!name}
+        {\edef\externalfilter at buffer_name{\externalfilter at temp_prefix-\currentexternalfilter-\externalfilterparameter\c!name}}
+   \doif{\externalfilterparameter\c!write}\v!no
+        {\edef\externalfilter at buffer_name{\externalfilter at temp_prefix-\currentexternalfilter-\externalfilterparameter{\c!cache\c!option}}}
+
+   \externalfilter at set_filenames_extras
+
+   \iftraceexternalfilters \externalfilter at show_filenames \fi
+\stoptexdefinition
+
+\starttexdefinition externalfilter at set_filenames_extras
+   % The following  macros are useful for filter= and filtercommand= options
+   % The basename of the external file
+   \edef\externalfilter at base_file  {\jobname-\externalfilter at buffer_name}
+
+   % Append directory name to the name of the input file
+   \edef\externalfilter at input_file {\externalfilter at get_directory\externalfilter at base_file.\f!temporaryextension}
+
+   % Append directory name to the name of the output file
+   \edef\externalfilter at output_file{\externalfilter at get_directory\externalfilterparameter\c!output}
+\stoptexdefinition
+
+
+
+%D \subsubject {Process Filter}
+%D
+%D Execute filter, read the output and do book-keeping if needed.
+
+\starttexdefinition externalfilter at process_filter
+     % By defualt, buffers are in memory in MkIV. So, we save them to disk
+     %
+     %      \savebuffer[\externalfilter at buffer_name][\externalfilter at input_file]
+     %
+     % We can also save a list of buffers to a file. The empty
+     % elements of the list are ignored. So, instead we use the following
+     %
+     %    \savebuffer[\externalfilterparameter{\c!buffer\c!before},
+     %                \externalfilter at buffer_name,
+     %                \externalfilterparameter{\c!buffer\c!after}]
+     %               [\externalfilter at input_file]}
+     %
+     % but using this method we cannot save the file in another directory. 
+     % So, we use the key-value interface for \savebuffer.
+         \externalfilter at check_writable \externalfilter at input_file
+         \savebuffer
+           [
+              \c!list={\externalfilterparameter{\c!buffer\c!before},
+                       \externalfilter at buffer_name,
+                       \externalfilterparameter{\c!buffer\c!after}},
+              \c!file={\externalfilter at input_file},
+              \c!prefix=\v!no,
+            ]
+     \externalfilter at execute_filter
+     \externalfilter at read_processed_file
+     \iftraceexternalfilters \else 
+        \doif{\externalfilterparameter\c!purge}\v!yes
+             {\ctxlua{os.remove(\!!bs\externalfilter at input_file\!!es)}}
+     \fi
+
+     % Finalization
+     \doifinset{\externalfilterparameter\c!cache}{\v!yes,\v!force}
+         {\doglobal\incrementvalue\externalfilter at count}
+
+    \doif{\externalfilterparameter\c!location}\v!paragraph
+         {\useindentnextparameter\externalfilterparameter
+          \aftergroup\dorechecknextindentation}
+     \endgroup
+\stoptexdefinition
+
+%D \subsubject {Execute Filter}
+
+% In MkIV, we use job.files.run to check if a file has changed. This function
+% writes the md5 sum to the tuc file rather than to an external file. So, we
+% must not check for the \type{*first} mode (otherwise the md5 sum is overridden
+% in the next run.
+\starttexdefinition externalfilter at execute_filter
+
+   \externalfilter at check_writable \externalfilter at output_file
+   \iftraceexternalfilters \externalfilter at show_filtercommand \fi
+
+   \doifelsenothing{\externalfilter at input_file}
+        {\showmessage\m!externalfilter{missing}\externalfilter at input_file}
+        {\doifelse{\externalfilterparameter\c!cache}\v!yes
+             {\doifelse{\externalfilterparameter\c!state}\v!stop
+                  {\showmessage\m!externalfilter{reuse}\externalfilter at input_file}
+                  {\doiffileelse{\externalfilter at output_file}
+                      {\doifnot{\externalfilterparameter\c!write}\v!no
+                       % When write=no is selected, % base_name=....-cacheoption...
+                       % Since there is no input, caching is simply achieved
+                       % using the filename.
+                           {\ctxlua{job.files.run{
+                                     filename = \!!bs\externalfilter at input_file\!!es,
+                                     result   = \!!bs\externalfilter at output_file\!!es,
+                                     runner   = \!!bs\externalfilterparameter\c!filtercommand\!!es,
+                           }}}}
+                      {\showmessage\m!externalfilter{missing_cache}\externalfilter at output_file
+                       \executesystemcommand
+                         {\externalfilterparameter\c!filtercommand}}}}
+             {\executesystemcommand
+                {\externalfilterparameter\c!filtercommand}}}
+\stoptexdefinition
+
+%D \subsubject {Read output}
+
+\starttexdefinition externalfilter at read_processed_file
+    \doif{\externalfilterparameter\c!read}\v!yes
+       {\doiffileelse{\externalfilter at output_file}
+           {\externalfilter at read_processed_file_indeed}
+           {\showmessage\m!externalfilter{notfound}\externalfilter at output_file
+            \externalfilter at show_filenames
+            \blank
+              {\tttf [[\getmessage\m!externalfilter{missing}]]}
+            \blank}}
+\stoptexdefinition
+
+\starttexdefinition externalfilter at read_processed_file_indeed
+   \doifelse{\externalfilterparameter\c!location}\v!paragraph
+     {\blank[\externalfilterparameter\c!spacebefore]
+      \usealignparameter\externalfilterparameter
+      \externalfilterparameter\c!before
+      \dostarttagged{\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}}
+     {\externalfilterparameter\c!left
+      \dostarttagged{inline\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}}
+
+   \begingroup
+   \useexternalfilterstyleandcolor\c!style\c!color
+   \processcommacommand[\externalfilterparameter\c!setups]\directsetup
+   \externalfilterparameter\c!readcommand\externalfilter at output_file
+   \endgroup
+   \dostoptagged
+
+   \doifelse{\externalfilterparameter\c!location}\v!paragraph
+     {\externalfilterparameter\c!after
+      \par\blank[\externalfilterparameter\c!spaceafter]}
+     {\externalfilterparameter\c!right}
+\stoptexdefinition
+
+%D \section {Default Values}
+
+\setupexternalfilters
+  [
+   \c!location=\v!paragraph,
+   \c!before=,
+   \c!after=,
+   \c!left=,
+   \c!right=,
+   \c!spacebefore=,
+   \c!spaceafter=,
+   \c!style=,
+   \c!color=,
+   \c!indentnext=\v!auto,
+   \c!align=,
+   \c!setups=,
+   \c!continue=\v!no,
+   \c!cache=\externalfilterparameter\c!continue, % for backward compatibility
+   \c!cache\c!option=,
+   \c!read=\v!yes,
+   \c!strip=\v!yes,
+   \c!readcommand=\ReadFile,
+   \c!directory=,
+   \c!purge=\v!yes,
+   \c!output=\externalfilterbasefile.tex,
+   \c!filter=,
+   \c!filtercommand={\externalfilterparameter\c!filter\space \externalfilter at input_file},
+   \c!buffer\c!before=,
+   \c!buffer\c!after=,
+   \c!taglabel=\externalfilter at id,
+   \c!tagdetail=\currentexternalfilter,
+ ]
+
+\def\externalfilterbasefile  {\externalfilter at base_file}
+\def\externalfilterinputfile {\externalfilter at input_file}
+\def\externalfilteroutputfile{\externalfilter at output_file}
+
+% t-syntax-groups still uses this.
+\def\externalfilter at name     {\currentexternalfilter}
+
+% Default value
+\def\externalfilter at input_file {}
+\def\externalfilter at output_file{}
+
+\protect
+\stopmodule



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