From be88ab29c165e6b16091443c3e8f36c4febf8a27 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 22 Jan 2020 03:02:40 +0000 Subject: CTAN sync 202001220302 --- macros/latex/contrib/scontents/README.md | 12 +- macros/latex/contrib/scontents/scontents.dtx | 354 +++++++++++++++++++-------- macros/latex/contrib/scontents/scontents.ins | 6 +- macros/latex/contrib/scontents/scontents.pdf | Bin 341895 -> 373717 bytes 4 files changed, 265 insertions(+), 107 deletions(-) (limited to 'macros/latex/contrib/scontents') diff --git a/macros/latex/contrib/scontents/README.md b/macros/latex/contrib/scontents/README.md index 9cb1056924..fe1c537bf1 100644 --- a/macros/latex/contrib/scontents/README.md +++ b/macros/latex/contrib/scontents/README.md @@ -1,6 +1,6 @@ ## scontents — Stores LaTeX contents in memory or files -- Version: 1.8 -- Date: 2019-11-18 +- Version: 1.9 +- Date: 2020-01-21 - Author: Pablo González ## Description @@ -20,8 +20,12 @@ The package loads and depends on updated versions of: The package `scontents` is present in `TeXLive` and `MiKTeX`, use the package manager to install. -For manual installation, download `scontents.zip` and unzip it, then move -the files to appropriate locations: +For manual installation, download `scontents.zip` and unzip it, +then run: +``` +$ pdftex scontents.ins +``` +and move all files to appropriate locations: ``` scontents.tex -> TDS:tex/generic/scontents/ scontents-code.tex -> TDS:tex/generic/scontents/ diff --git a/macros/latex/contrib/scontents/scontents.dtx b/macros/latex/contrib/scontents/scontents.dtx index 3f362eea95..f13db2db83 100644 --- a/macros/latex/contrib/scontents/scontents.dtx +++ b/macros/latex/contrib/scontents/scontents.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2019 by Pablo González L +% Copyright (C) 2019-2020 by Pablo González L % % This work may be distributed and/or modified under the conditions of the % LaTeX Project Public License, either version 1.3c of this license or (at @@ -34,7 +34,6 @@ \usepackage[top=0.5in,bottom=0.3in,left=2in,right=0.7in,footskip=0.2in,headheight=1cm,headsep=0.27cm]{geometry} \usepackage[osf,mono=false,scale=0.95,llscaled=0.95]{libertine} \setmonofont[ - %Ligatures = TeX, Numbers = OldStyle, Scale = 0.80, UprightFont = *-Regular, @@ -65,7 +64,6 @@ \mathcode`\-="702D \mathcode`\+="702B \mathcode`\:="703A \mathcode`\=="703D } \makeatother - \setmathfont[Scale = 0.95]{latinmodern-math.otf} \usepackage{fontawesome5} \newfontfamily\fetamontotf{ffmw10.otf}[ @@ -76,7 +74,7 @@ \usepackage[svgnames]{xcolor} \usepackage[sf,bf,compact,medium,pagestyles]{titlesec} \usepackage{lastpage,imakeidx,microtype,attachfile2} -\usepackage{adjustbox,multicol,listings,accsupp,titletoc} +\usepackage{adjustbox,multicol,listings,accsupp,titletoc,hypdestopt} \usepackage{scontents} % main \usepackage[contents]{colordoc} % \show\docCodelineNo @@ -104,15 +102,6 @@ |catcode`| 12|gdef|sxmacro@code#1% \end{macrocode*}[|liii@xmacro@code[#1]|end[macrocode*]] |endgroup -% Other patch for colordoc.sty to work xelatex -\makeatletter -\def\@moddecr#1{% - \global\advance#1\m@ne - \reset@color - \ifnum#1>\z@\else - \global#1\@colorlevels\fi} -\makeatother - \EnableCrossrefs % \PageIndex % \CodelineIndex undoes what \PageIndex does % \CodelineIndex tries to open another write stream for the index file. We don't @@ -530,7 +519,7 @@ \settitlemarks{section} \renewpagestyle{plain}[\color{optcolor}\small\sffamily]{% \setfoot{\rlap{\hskip\dimexpr-\oddsidemargin-1in\relax% - \parbox{1.93\paperwidth\relax}{\hfil\thepage\,/\,\pageref{LastPage}}}}% + \parbox{1.93\paperwidth}{\hfil\thepage\,/\,\pageref{LastPage}}}}% {}% {}% } @@ -540,8 +529,8 @@ \color{rulecolor}\rule[0.3cm]{\paperwidth}{0.7cm}}\hss } \setfoot{\rlap{\hskip\dimexpr-\oddsidemargin-1in\relax% - \parbox{1.93\paperwidth\relax}{\hfil\thepage\,/\,\pageref{LastPage}}}}% - {\parbox{\textwidth}{\raggedright \textcolor{gray}{\raisebox{-1pt}{\textcopyright}{}2019 by Pablo González}}}% + \parbox{1.93\paperwidth}{\hfil\thepage\,/\,\pageref{LastPage}}}}% + {\parbox{\textwidth}{\raggedright \textcolor{gray}{\raisebox{-1pt}{\textcopyright}{}2019--2020 by Pablo González}}}% {}% \sethead{\llap{\raisebox{0.55cm}{\parbox{\dimexpr\oddsidemargin+1in\relax}{\makebox[0pt][l]{\hspace{15pt}\pkglogo\space\fileversion}}}}} {\raisebox{0.55cm}{\parbox{\textwidth}{\hspace*{-\oddsidemargin}\centering\small\S.\thesection\space\sectiontitle}}}% @@ -596,7 +585,7 @@ % \filedate.}\\[25pt] % \author{ % \large -% \raisebox{-1pt}{\textcopyright}{}2019 by Pablo González\thanks{ +% \raisebox{-1pt}{\textcopyright}{}2019--2020 by Pablo González\thanks{ % E-mail: \textcolor{OrangeRed}{\textsf{\guillemotleft}}\email{pablgonz@educarchile.cl}\textcolor{OrangeRed}{\textsf{\guillemotright}}. % }% % } @@ -786,7 +775,13 @@ % % The command \ics*{setupsc} sets the \mymeta{keys} in a global way, % it can be used both in the preamble and in the body of the document -% as many times as desired. +% as many times as desired. However, options set in the declaration of +% an environment (with \ics*{newenvsc}) have precedence over options +% set with \ics*{setupsc}. +% +% Options in the optional arguments of environments and +% commands have the highest precedence, overriding both +% options in \ics*{newenvsc}, and in \ics*{setupsc}. % \end{function} % % \keyexamp{verb-font}{font family}{\textnormal{\ttfamily\textbackslash{}ttfamily}} @@ -801,13 +796,14 @@ % environment and the \mykey{store-cmd} key of the \ics*{Scontents} command. This key is % only available as a package option or using \ics*{setupsc}. % -% \medskip +% \newpage % % \keyexamp{overwrite}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false} % Sets whether the \mymeta{files} generated by \mykey{write-out} and \mykey{write-env} -% from the \myenv*{scontents} environment will be rewritten. This key is -% available as a package option or using \ics*{setupsc} or \myenv*{scontents} -% environment. +% from the \myenv*{scontents} environment will be rewritten. This key is available as +% a package option, for \ics*{setupsc}, for \ics*{Scontents*} and for the environment +% \myenv*{scontents}. +% % \medskip % % \keyexamp{print-all}{true \textnormal{\textcolor{lightgray}{\textbar}} false}{false} @@ -820,8 +816,8 @@ % This key is necessary only if the last line is the closing of some % environment defined by the \mypkg{fancyvrb} package as §\end{Verbatim}§ % or another environment that does not support a comments \enquote{\ttfamily\textcolor{gray}{\%}} -% after closing §\end{}%§. This key is available -% for the \myenv*{scontents} environment and the \ics*{Scontents} command. +% after closing §\end{}%§. This key is available for the \myenv*{scontents} +% environment and the \ics*{Scontents} command. % % \keyexamp{width-tab}{integer}{1} % Sets the equivalence in \mymeta{spaces} for the character "TAB" @@ -851,10 +847,11 @@ % \mykey{print-all} & \cmark & \cmark & \xmark & \xmark & \xmark & \xmark & \xmark \\ % \mykey{store-all} & \cmark & \cmark & \xmark & \xmark & \xmark & \xmark & \xmark \\ % \mykey{write-env} & \xmark & \xmark & \cmark & \xmark & \xmark & \xmark & \xmark \\ -% \mykey{write-out} & \xmark & \xmark & \cmark & \xmark & \xmark & \xmark & \xmark \\ -% \mykey{overwrite} & \cmark & \cmark & \cmark & \xmark & \xmark & \xmark & \xmark \\ +% \mykey{write-cmd} & \xmark & \xmark & \xmark & \xmark & \cmark & \xmark & \xmark \\ +% \mykey{write-out} & \xmark & \xmark & \cmark & \xmark & \cmark & \xmark & \xmark \\ +% \mykey{overwrite} & \cmark & \cmark & \cmark & \xmark & \cmark & \xmark & \xmark \\ % \mykey{width-tab} & \cmark & \cmark & \xmark & \xmark & \xmark & \cmark & \cmark \\ -% \mykey{force-eol} & \cmark & \cmark & \cmark & \xmark & \cmark & \xmark & \xmark \\ +% \mykey{force-eol} & \cmark & \cmark & \cmark & \cmark & \cmark & \xmark & \xmark \\ % \mykey{verb-font} & \cmark & \cmark & \xmark & \xmark & \xmark & \xmark & \xmark \\ % \bottomrule % \end{tabular} @@ -963,11 +960,12 @@ This text is in the outer environment (after nested). % % \keyexamp{write-env}{file.ext}{not used} % Sets the name of the \mymeta{external file} in which the \mymeta{contents} of -% the environment will be written. The \mymeta{file.ext} will be created -% in the working directory, if \mymeta{file.ext} exists it will be overwritten, -% relative or absolute paths are not supported. +% the environment will be written. The \mymeta{file.ext} will be created +% in the working directory, relative or absolute paths are not supported. If \mymeta{file.ext} +% does not exist, it will be created or overwritten if the \mykey{overwrite} key is used. +% % The characters "TAB"s will be written in \mymeta{file.ext} and the \mymeta{contents} -% will be stored in the sequence established at that time. \hologo{XeLaTeX} users +% will be stored in the \mymeta{sequence} established at that time. \hologo{XeLaTeX} users % using the "TAB" character must add \texttt{\textcolor{optcolor}{-8bit}} % at the command line, otherwise you will get \hologo{TeX}-"TAB" (§^^I§) % in \mymeta{file.ext}. @@ -977,11 +975,12 @@ This text is in the outer environment (after nested). % \keyexamp{write-out}{file.ext}{not used} % Sets the name of the \mymeta{external file} in which the \mymeta{contents} of % the environment will be written. The \mymeta{file.ext} will be created -% in the working directory, if \mymeta{file.ext} exists it will be overwritten, -% relative or absolute paths are not supported. +% in the working directory, relative or absolute paths are not supported. If \mymeta{file.ext} +% does not exist, it will be created or overwritten if the \mykey{overwrite} key is used. +% % The characters "TAB"s will be written in \mymeta{file.ext}, the rest of the % \mymeta{keys} will not be available and the \mymeta{contents} will NOT -% be stored in any sequence. \hologo{XeLaTeX} users using the "TAB" character +% be stored in any \mymeta{sequence}. \hologo{XeLaTeX} users using the "TAB" character % must add \texttt{\textcolor{optcolor}{-8bit}} at the command line, % otherwise you will get \hologo{TeX}-"TAB" (§^^I§) in \mymeta{file.ext}. % @@ -1006,8 +1005,8 @@ This text is in the outer environment (after nested). % The command \ics*{newenvsc} allows you to create \mymeta{new environments} % based on the same characteristics of the \myenv*{scontents} environment. % The values entered in \myoarg{initial keys} will be considered as the -% default values for this new environment and the valid \mymeta{keys} are the -% same as those of the \myenv*{scontents} environment. For example: +% default values for this new environment and the valid \mymeta{keys} are +% \mykey{store-env} and \mykey{print-env}. For example: % % \iffalse %<*example> @@ -1039,7 +1038,7 @@ This text is in the outer environment (after nested). % mode. It is not possible to pass environments such as \emph{verbatim}, % but it is possible to use the implementation of \ics{Verb} provided by % the \mypkg{fvextra} package for contents on one line and \ics{lstinline} -% from \mypkg{listings} package, but it is preferable to use the starred +% from \mypkg{listings} package, but it is preferable to use the starred (§*§) % version. % % The \ics*{Scontents*} command reads the \mymarg{argument} under \emph{verbatim} @@ -1076,6 +1075,37 @@ This text is in the outer environment (after nested). % running the command. The content is extracted from the \mymeta{sequence} % in which it is stored. % +% \subsection*{Options only for the starred version} +% \label{sec:onlystarred} +% +% \keyexamp{write-cmd}{file.ext}{not used} +% Sets the name of the \mymeta{external file} in which the \mymeta{contents} of +% the \mymarg{argument} will be written. The \mymeta{file.ext} will be created +% in the working directory, relative or absolute paths are not supported. If \mymeta{file.ext} +% does not exist, it will be created or overwritten if the \mykey{overwrite} key is used. +% +% The characters "TAB"s will be written in \mymeta{file.ext} and the \mymeta{contents} +% will be stored in the \mymeta{sequence} established at that time. \hologo{XeLaTeX} users +% using the "TAB" character must add \texttt{\textcolor{optcolor}{-8bit}} +% at the command line, otherwise you will get \hologo{TeX}-"TAB" (§^^I§) +% in \mymeta{file.ext}. +% +% \medskip +% +% \keyexamp{write-out}{file.ext}{not used} +% Sets the name of the \mymeta{external file} in which the \mymeta{contents} of +% the \mymarg{argument} will be written. The \mymeta{file.ext} will be created +% in the working directory, relative or absolute paths are not supported. If \mymeta{file.ext} +% does not exist, it will be created or overwritten if the \mykey{overwrite} key is used. +% +% The characters "TAB"s will be written in \mymeta{file.ext}, the rest of the +% \mymeta{keys} will not be available and the \mymeta{contents} will NOT +% be stored in any \mymeta{sequence}. \hologo{XeLaTeX} users using the "TAB" character +% must add \texttt{\textcolor{optcolor}{-8bit}} at the command line, +% otherwise you will get \hologo{TeX}-"TAB" (§^^I§) in \mymeta{file.ext}. +% +% The key \mykey{overwrite} is available for this command. +% % \subsection{The command \cs{getstored}} % \label{sec:getstored} % @@ -1378,6 +1408,8 @@ $ pdfdetach -saveall scontents.pdf \documentclass{article} \usepackage[store-cmd=solutions]{scontents} \newtheorem{ex}{Exercise} +\setlength{\parindent}{0pt} +\pagestyle{empty} \begin{document} \section{Problems} \begin{ex} @@ -1414,6 +1446,7 @@ Second exercise % arara: clean: { extensions: [ aux, log] } \documentclass{article} \usepackage[store-env=defexercise,store-cmd=defexercise]{scontents} +\setlength{\parindent}{0pt} \pagestyle{empty} \begin{document} % not starred @@ -1476,7 +1509,7 @@ seventies that the \NSA\ has known that for 40 years.\par \end{tikzpicture} \begin{tikzpicture} -\getstored[3]{tikz} +\getstored{tikz} \end{tikzpicture} \begin{scontents}[store-env=buffer] @@ -1520,6 +1553,7 @@ This is a \verb*|fake poor man's buffer :)|. % arara: clean: { extensions: [ aux, log] } \documentclass{article} \usepackage{scontents} +\setlength{\parindent}{0pt} \pagestyle{empty} \begin{document} \begin{scontents}[store-env=main] @@ -1537,11 +1571,11 @@ Something for \verb|other|. \textbf{Let's print them} This is first stored in main: \getstored[1]{main}\par -This is second stored in main: \getstored[2]{main}\par -This is stored in other: \getstored[1]{other} +This is second stored in main: \getstored{main}\par +This is stored in other: \getstored{other} \textbf{Print all of stored in main}\par -\foreachsc[sep={\\[10pt]}]{a} +\foreachsc[sep={\\[10pt]}]{main} \end{document} \end{scontents} % \iffalse @@ -1562,8 +1596,8 @@ This is stored in other: \getstored[1]{other} % arara: clean: { extensions: [ aux, log] } \documentclass{article} \usepackage{scontents} -\pagestyle{empty} \setlength{\parindent}{0pt} +\pagestyle{empty} \begin{document} \section{Problem stated the first time} \begin{scontents}[print-env=true,store-env=problem] @@ -1602,6 +1636,8 @@ This is from the verbatim environment: \documentclass[10pt]{article} \usepackage{scontents} \newenvsc{forshort}[store-env=forshort,print-env=false] +\setlength{\parindent}{0pt} +\pagestyle{empty} \begin{document} Something in the whole course. @@ -1668,7 +1704,7 @@ Prove new \Verb*{ fancyvrb whit braces } and environment \verb+Verbatim*+ \section{Test \texttt{\textbackslash getstored}} \getstored[1]{contents}\par -\getstored[2]{contents} +\getstored{contents} \section{Test \texttt{\textbackslash meaningsc}} \meaningsc[1]{contents}\par @@ -1738,7 +1774,7 @@ Prove \lstinline[basicstyle=\ttfamily]| lstinline | and environment \verb+Verbat and more.+ \section{Test \texttt{\textbackslash getstored}} -\getstored[2]{contents}\par +\getstored{contents}\par \getstored[1]{contents} \section{Test \texttt{\textbackslash typestored}} @@ -1772,6 +1808,7 @@ and more.+ \newminted{tex}{linenos} \newenvironment{verbatimsc}{\VerbatimEnvironment\begin{texcode}}{\end{texcode}} \pagestyle{empty} +\setlength{\parindent}{0pt} \begin{document} \section{Test \texttt{\textbackslash begin\{scontents\}} whit \texttt{minted}} Test \verb+{scontents}+ \par @@ -1798,7 +1835,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \section{Test \texttt{\textbackslash getstored}} \getstored[1]{contents}\par -\getstored[2]{contents} +\getstored{contents} \section{Test \texttt{\textbackslash typestored}} \typestored[1]{contents} @@ -1815,6 +1852,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % % \newpage % +% % \section{Change history} % \label{sec:changes} % @@ -1831,6 +1869,13 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % \begin{description}[font=\small\sffamily,wide=0pt,style=multiline,leftmargin=\descrwidth,nosep,noitemsep] % \item [\fileversion{} (ctan), \filedate] % \begin{itemize} +% \item Update and improvements in the internal code. +% \item Updating the generic code for |I/O| verification. +% \item Add |write-cmd| and |write-out| keys for |\Scontents*|. +% \item Fix |sep| key in |\foreachsc|. +% \end{itemize} +% \item [v1.8 (ctan), 2019-11-18] +% \begin{itemize} % \item Add |\newenvsc| command. % \item Fix nested environment in \hologo{plainTeX} and \hologo{ConTeXt}. % \item Modified default value in |\getstored|. @@ -1899,6 +1944,30 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % % \printindex[userdoc] % +% \let\stdsection\section +% \def\section*#1{\stdsection{#1}} +% +% \begin{thebibliography}{9} +% \bibitem{expl3} The \hologo{LaTeX3} Project. \enquote{The \textsf{expl3} +% package}. Available from +% \textsc{ctan}, \url{https://www.ctan.org/pkg/expl3}, 2020. +% +% \bibitem{xparse} The \hologo{LaTeX3} Project. \enquote{The \textsf{xparse} +% package}. Available from +% \textsc{ctan}, \url{https://www.ctan.org/pkg/xparse}, 2020. +% +% \bibitem{l3keys} The \hologo{LaTeX3} Project. \enquote{The \textsf{l3keys2e} +% package}. Available from +% \textsc{ctan}, \url{https://www.ctan.org/pkg/l3keys2e}, 2020. +% +% \bibitem{keyval} \textsc{Wright, Joseph}. \enquote{Programming +% \textsf{key–value} in \textsf{expl3}}. Available from +% \textsc{TUGboat}, +% \url{https://www.tug.org/TUGboat/tb31-1/tb97wright-l3keys.pdf}, 2010. +% \end{thebibliography} +% +% \let\section\stdsection +% % \newpage % % \StartImplementation @@ -1916,7 +1985,6 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % \printindex % } % -% % \section{Implementation} % \label{sec:Implementation} % \addtocontents{toc}{\protect\setcounter{tocdepth}{0}} @@ -1937,10 +2005,10 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % % Now we define some common macros to hold the package date and version: % \begin{macrocode} -%\def\ScontentsFileDate{2019-11-18}% -%\def\ScontentsCoreFileDate{2019-11-18}% +%\def\ScontentsFileDate{2020-01-21}% +%\def\ScontentsCoreFileDate{2020-01-21}% %<*loader> -\def\ScontentsFileVersion{1.8}% +\def\ScontentsFileVersion{1.9}% \def\ScontentsFileDescription{Stores LaTeX contents in memory or files}% % \end{macrocode} % @@ -2045,6 +2113,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % %<*core> \begingroup + \catcode32=10 + \endlinechar=32 \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax \begingroup @@ -2066,23 +2136,23 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): }% \endgroup \endinput - } + }% \else \ifx\ScontentsFileDate\ScontentsCoreFileDate \else \def\next {% - \PackageError{scontents}{Mismatched~scontents~files~detected} + \PackageError{scontents}{Mismatched scontents files detected} {% - You~have~attempted~to~load~scontents~with~mismatched~files:~ - probably~you~have~one~or~more~files~'locally~installed'~which~ - are~in~conflict.~Loading~of~scontents~will~abort. + You have attempted to load scontents with mismatched files: + probably you have one or more files 'locally installed' which + are in conflict. Loading of scontents will abort. }% \endgroup \endinput }% \fi -\fi + \fi \next % \end{macrocode} % @@ -2209,6 +2279,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \bool_set_false:N \l_@@_foreach_stop_bool \bool_new:N \l_@@_foreach_wrapper_bool \bool_set_false:N \l_@@_foreach_wrapper_bool +\bool_new:N \l_@@_writable_bool % \end{macrocode} % \end{macro} % @@ -2326,12 +2397,25 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % \begin{macrocode} \keys_define:nn { scontents / Scontents } { - print-cmd .meta:nn = { scontents } { print-cmd = #1 }, - print-cmd .default:n = true, - store-cmd .meta:nn = { scontents } { store-cmd = #1 }, - force-eol .meta:nn = { scontents } { force-eol = #1 }, - force-eol .default:n = true, - unknown .code:n = { \@@_parse_command_keys:n {#1} } + write-cmd .code:n = { + \bool_set_true:N \l_@@_writing_bool + \tl_set:Nn \l_@@_fname_out_tl {#1} + }, + write-out .code:n = { + \bool_set_false:N \l_@@_storing_bool + \bool_set_true:N \l_@@_writing_bool + \tl_set:Nn \l_@@_fname_out_tl {#1} + }, + write-env .value_required:n = true, + write-out .value_required:n = true, + print-cmd .meta:nn = { scontents } { print-cmd = #1 }, + print-cmd .default:n = true, + store-cmd .meta:nn = { scontents } { store-cmd = #1 }, + force-eol .meta:nn = { scontents } { force-eol = #1 }, + force-eol .default:n = true, + overwrite .meta:nn = { scontents } { overwrite = #1 }, + overwrite .default:n = true, + unknown .code:n = { \@@_parse_command_keys:n {#1} } } % \end{macrocode} % @@ -2366,7 +2450,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): wrapper .code:n = { \bool_set_true:N \l_@@_foreach_wrapper_bool \cs_set_protected:Npn - \@@_foreach_wrapper:n ##1 {#1} + \@@_foreach_wrapper:n ##1 {#1} }, wrapper .value_required:n = true, sep .tl_set:N = \l_@@_foreach_sep_tl, @@ -2669,6 +2753,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \group_insert_after:N \tl_gclear:N \group_insert_after:N \g_@@_temp_tl } +\cs_generate_variant:Nn \@@_lastfrom_seq:n { V } % \end{macrocode} % \end{macro} % @@ -2760,7 +2845,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \cs_new_protected:Npn \@@_env_generic_end: { \@@_stop_environment: - \@@_atend_environment: + \@@_finish_storing:NNN \l_@@_macro_tmp_tl + \l_@@_name_seq_env_tl \l_@@_print_env_bool } % \end{macrocode} % \end{macro} @@ -2913,19 +2999,12 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \cs_new_protected:Npn \@@_file_tl_write_start:n #1 { \group_begin: - \bool_if:nT { \l_@@_writing_bool && \l_@@_overwrite_bool } + \@@_file_if_writable:nTF {#1} { - \file_if_exist:nTF {#1} - { \msg_warning:nnx { scontents } { overwrite-file } {#1} } - { \msg_warning:nnx { scontents } { writing-file } {#1} } - \iow_open:Nn \l_@@_file_iow {#1} - } - \bool_if:nT { \l_@@_writing_bool && !\l_@@_overwrite_bool } - { - \file_if_exist:nF {#1} - { \msg_warning:nnx { scontents } { writing-file } {#1} } - \iow_open:Nn \l_@@_file_iow {#1} + \bool_set_true:N \l_@@_writable_bool + \iow_open:Nn \l_@@_file_iow {#1} } + { \bool_set_false:N \l_@@_writable_bool } \tl_clear:N \l_@@_file_tl \seq_map_function:NN \l_char_special_seq \char_set_catcode_other:N \int_step_function:nnnN { 128 } { 1 } { 255 } \char_set_catcode_letter:n @@ -3000,7 +3079,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): } \cs_new_protected:Npn \@@_file_write_stop:N #1 { - \bool_if:NT \l_@@_writing_bool + \bool_if:NT \l_@@_writable_bool { \iow_close:N \l_@@_file_iow } \use:x { @@ -3042,7 +3121,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % \begin{macrocode} \cs_new_protected:Npn \@@_verb_processor_output:n #1 { - \bool_if:NT \l_@@_writing_bool + \bool_if:NT \l_@@_writable_bool { \iow_now:Nn \l_@@_file_iow {#1} } \bool_if:NT \l_@@_storing_bool { \tl_put_right:Nn \l_@@_file_tl { ^^J #1 } } @@ -3165,24 +3244,19 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % % \subsubsection{Recording of the content in the sequence} % -% \begin{macro}{\@@_atend_environment:} +% \begin{macro}{\@@_finish_storing:NNN} % Finishes the environment by optionally calling \cs{@@_store_to_seq:} % and then clearing the temporary token list. % % \begin{macrocode} -\cs_new_protected:Npn \@@_atend_environment: +\cs_new_protected:Npn \@@_finish_storing:NNN #1 #2 #3 { \bool_if:NT \l_@@_storing_bool { \bool_if:NF \l_@@_forced_eol_bool - { - \tl_put_right:Nx \l_@@_macro_tmp_tl - { \c_@@_hidden_space_str } - } - \@@_store_to_seq:NN \l_@@_macro_tmp_tl - \l_@@_name_seq_env_tl - \bool_if:NT \l_@@_print_env_bool - { \@@_lastfrom_seq:n \l_@@_name_seq_env_tl } + { \tl_put_right:Nx #1 { \c_@@_hidden_space_str } } + \@@_store_to_seq:NN #1 #2 + \bool_if:NT #3 { \@@_lastfrom_seq:V #2 } } } % @@ -3258,6 +3332,48 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): % \end{macrocode} % \end{macro} % +% \begin{macro}{\@@_bsphack:,\@@_esphack:} +% \pkg{xparse} also requires \LaTeX's §\dospecials§. In case it doesn't +% exist (at the time \pkg{scontents} is loaded) we define §\dospecials§ +% to use the \cs{l_char_special_seq}. +% \begin{macrocode} +%<*core> +\int_new:N \l_@@_save_sf_int +\dim_new:N \l_@@_save_skip_dim +\cs_new_protected:Npn \@@_bsphack: + { + \scan_stop: + \mode_if_horizontal:T + { + \dim_set_eq:NN \l_@@_save_skip_dim \tex_lastskip:D + \int_set_eq:NN \l_@@_save_sf_int \tex_spacefactor:D + } + } +\cs_new_protected:Npn \@@_esphack: + { + \scan_stop: + \mode_if_horizontal:T + { + \int_set_eq:NN \tex_spacefactor:D \l_@@_save_sf_int + \dim_compare:nNnT { \l_@@_save_skip_dim } > { \c_zero_dim } + { + \dim_compare:nNnT { \tex_lastskip:D } = { \c_zero_dim } + { + \nobreak + \skip_horizontal:n { \c_zero_skip } + } + \tex_ignorespaces:D + } + } + } +% +%<*latex> +\cs_gset_eq:NN \@@_bsphack: \@bsphack +\cs_gset_eq:NN \@@_esphack: \@esphack +% +% \end{macrocode} +% \end{macro} +% % \subsection{The command \cs{Scontents}} % % User command to \mymeta{stored content}, adapted from @@ -3289,6 +3405,7 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): %<*core> \cs_new_protected:Npn \@@_Scontents_internal:nn #1 #2 { + \@@_bsphack: \group_begin: \tl_if_novalue:nF {#2} { \keys_set:nn { scontents / Scontents } {#2} } @@ -3299,12 +3416,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): } \cs_new_protected:Npn \@@_norm_arg:n #1 { - \tl_set:Nx \l_@@_temp_tl { \exp_not:n {#1} } - \tl_put_right:Nx \l_@@_temp_tl { \c_@@_hidden_space_str } - \@@_store_to_seq:NN \l_@@_temp_tl \l_@@_name_seq_cmd_tl - \bool_if:NT \l_@@_print_cmd_bool - { \@@_lastfrom_seq:n \l_@@_name_seq_cmd_tl } - \group_end: + \tl_set:Nn \l_@@_temp_tl {#1} + \@@_Scontents_finish: } % %<*loader> @@ -3314,15 +3427,54 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): %<*core> \cs_new_protected:Npn \@@_verb_arg_internal:n #1 { - \tl_set:Nx \l_@@_temp_tl { \exp_not:n {#1} } + \tl_set:Nn \l_@@_temp_tl {#1} \tl_replace_all:Nxx \l_@@_temp_tl { \iow_char:N \^^M } { \iow_char:N \^^J } - \bool_if:NF \l_@@_forced_eol_bool - { \tl_put_right:Nx \l_@@_temp_tl { \c_@@_hidden_space_str } } - \@@_store_to_seq:NN \l_@@_temp_tl \l_@@_name_seq_cmd_tl - \bool_if:NT \l_@@_print_cmd_bool - { \@@_lastfrom_seq:n \l_@@_name_seq_cmd_tl } + \@@_Scontents_finish: + } +\cs_new_protected:Npn \@@_Scontents_finish: + { + \@@_file_write_cmd:VV \l_@@_fname_out_tl \l_@@_temp_tl + \@@_finish_storing:NNN \l_@@_temp_tl + \l_@@_name_seq_cmd_tl \l_@@_print_cmd_bool + \use:x + { \group_end: + \bool_if:NF \l_@@_print_cmd_bool { \@@_esphack: } + } + } +\cs_new_protected:Npn \@@_file_write_cmd:nn #1#2 + { + \@@_file_if_writable:nT {#1} + { + \iow_open:Nn \l_@@_file_iow {#1} + \iow_now:Nn \l_@@_file_iow {#2} + \iow_close:N \l_@@_file_iow + } + } +\prg_new_protected_conditional:Npnn \@@_file_if_writable:n #1 { T, F, TF } + { + \bool_if:NTF \l_@@_writing_bool + { + \file_if_exist:nTF {#1} + { + \bool_if:NTF \l_@@_overwrite_bool + { + \msg_warning:nnx { scontents } { overwrite-file } {#1} + \prg_return_true: + } + { + \msg_warning:nnx { scontents } { not-writing } {#1} + \prg_return_false: + } + } + { + \msg_warning:nnx { scontents } { writing-file } {#1} + \prg_return_true: + } + } + { \prg_return_false: } } +\cs_generate_variant:Nn \@@_file_write_cmd:nn { VV } % \end{macrocode} % \end{macro} % @@ -3382,8 +3534,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): \@@_foreach_add_body:n \tl_gset:Nx \g_@@_temp_tl { - \seq_use:Nn \l_@@_foreach_print_seq - { \tl_use:N \l_@@_foreach_sep_tl } + \exp_args:NNV \seq_use:Nn + \l_@@_foreach_print_seq \l_@@_foreach_sep_tl } \group_end: \exp_after:wN \tl_gclear:N @@ -3707,6 +3859,8 @@ Read \Verb{\jobname.tsc} (shows TABs as red arrows): { Overwriting~file~'#1'. } \msg_new:nnn { scontents } { writing-file } { Writing~file~'#1'. } +\msg_new:nnn { scontents } { not-writing } + { File~`#1'~already~exists.~Not~writing. } \msg_new:nnn { scontents } { rescanning-text } { Rescanning~text~'#1'~after~\c_backslash_str end{#2}~\msg_line_context:.} \msg_new:nnn { scontents } { multiple-begin } diff --git a/macros/latex/contrib/scontents/scontents.ins b/macros/latex/contrib/scontents/scontents.ins index 953dc79bb6..c5770ae484 100644 --- a/macros/latex/contrib/scontents/scontents.ins +++ b/macros/latex/contrib/scontents/scontents.ins @@ -3,7 +3,7 @@ \askforoverwritefalse \declarepreamble\standard -Copyright (C) 2019 by Pablo González L +Copyright (C) 2019-2020 by Pablo González L This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at @@ -33,11 +33,11 @@ and the derived files scontents.sty, \declarepreamble\context \string\module [ file=t-scontents, - version=1.8, + version=1.9, title=\string\CONTEXT\ User Module, subtitle=Storing Contents, author=Pablo González, - date=2019-11-18, + date=2020-01-21, copyright=Pablo González, email=pablgonz@educarchile.cl, license=LPPL] diff --git a/macros/latex/contrib/scontents/scontents.pdf b/macros/latex/contrib/scontents/scontents.pdf index eea74b0101..4b5dfbc9c3 100644 Binary files a/macros/latex/contrib/scontents/scontents.pdf and b/macros/latex/contrib/scontents/scontents.pdf differ -- cgit v1.2.3