Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
base repository: latex3/latex3
base: 2018-05-12
head repository: latex3/latex3
compare: 2018-08-23
Commits on May 12, 2018
We have many constants such as \c_underscore_str.  Of course they belong
to the "str" module, but if someone were to write an "underscore" package
it would not necessarily be crazy for them to have some parameter
\g_underscore_tl to customize the package.  To avoid confusion, reserve
these names.  I've not reserved two, three, ..., thirty because we are
deprecating these integer constants.  Sorry for the last commit, it was
a bit messed up, now fixed.
Commits on May 15, 2018
That was still listing names of the form \ptex_... and \uptex_... as
existing.
Commits on Jun 07, 2018
Commits on Jun 18, 2018
The non-expandable \lua_shipout_x:n still to do: need to check on exact details!
The behaviour of # here is e-type not x-type.
These variants are likely useful anyway.
The meaning here is very different from other uses.
Commits on Jun 19, 2018
The expansion here is not quite :ee - the second e-type is 'hidden'. So we almost go back to _e, except it is _e due to the handling of #, and expandability.
Commits on Jun 24, 2018
Commits on Jul 12, 2018
Commits on Jul 13, 2018
Commits on Jul 15, 2018
Commits on Jul 22, 2018
This will help with piped input.
Commits on Jul 24, 2018
Commits on Jul 25, 2018
Not currently setting x-type from pipe.
Commits on Jul 28, 2018
I changed \meat to \meta in one place.
Showing with 3,353 additions and 1,051 deletions.
  1. +1 −1 README.md
  2. +1 −1 build.lua
  3. +0 −1 contrib/testfiles/ctex002.tlg
  4. +0 −1 contrib/testfiles/siunitx001.tlg
  5. +43 −0 l3experimental/CHANGELOG.md
  6. +9 −2 l3experimental/README.md
  7. +4 −4 l3experimental/l3color/l3color.dtx
  8. +0 −1 l3experimental/l3color/testfiles/m3color000.tlg
  9. +1 −1 l3experimental/l3draw/l3draw-boxes.dtx
  10. +1 −1 l3experimental/l3draw/l3draw-paths.dtx
  11. +1 −1 l3experimental/l3draw/l3draw-points.dtx
  12. +1 −1 l3experimental/l3draw/l3draw-scopes.dtx
  13. +1 −1 l3experimental/l3draw/l3draw-softpath.dtx
  14. +1 −1 l3experimental/l3draw/l3draw-state.dtx
  15. +1 −1 l3experimental/l3draw/l3draw-transforms.dtx
  16. +5 −5 l3experimental/l3draw/l3draw.dtx
  17. +0 −2 l3experimental/l3draw/testfiles/m3draw000.tlg
  18. +7 −7 l3experimental/l3str/l3str-convert.dtx
  19. +2 −2 l3experimental/l3str/l3str-format.dtx
  20. +0 −1 l3experimental/l3str/testfiles/m3str-convert000.luatex.tlg
  21. +0 −1 l3experimental/l3str/testfiles/m3str-convert000.tlg
  22. +0 −1 l3experimental/l3str/testfiles/m3str-convert000.uptex.tlg
  23. +0 −1 l3experimental/l3str/testfiles/m3str-convert000.xetex.tlg
  24. +2 −2 l3experimental/l3str/testfiles/m3str-convert002.lvt
  25. +0 −1 l3experimental/l3str/testfiles/m3str-format000.tlg
  26. +21 −0 l3experimental/l3sys-shell/build.lua
  27. +367 −0 l3experimental/l3sys-shell/l3sys-shell.dtx
  28. +0 −1 l3experimental/xcoffins/testfiles/xcoffins000.tlg
  29. +2 −2 l3experimental/xcoffins/xcoffins.dtx
  30. +3 −3 l3experimental/xgalley/l3galley.dtx
  31. +0 −2 l3experimental/xgalley/testfiles/xgalley000.tlg
  32. +2 −2 l3experimental/xgalley/xgalley.dtx
  33. +133 −0 l3kernel/CHANGELOG.md
  34. +4 −4 l3kernel/README.md
  35. +5 −5 l3kernel/build.lua
  36. +2 −2 l3kernel/expl3.dtx
  37. +1 −1 l3kernel/interface3.tex
  38. +1 −1 l3kernel/l3alloc.dtx
  39. +22 −6 l3kernel/l3basics.dtx
  40. +3 −3 l3kernel/l3bootstrap.dtx
  41. +20 −20 l3kernel/l3box.dtx
  42. +233 −74 l3kernel/l3candidates.dtx
  43. +1 −1 l3kernel/l3clist.dtx
  44. +1 −1 l3kernel/l3coffins.dtx
  45. +1 −1 l3kernel/l3color-base.dtx
  46. +2 −2 l3kernel/l3deprecation.dtx
  47. +16 −25 l3kernel/l3doc.dtx
  48. +1 −1 l3kernel/l3docstrip.dtx
  49. +10 −10 l3kernel/l3drivers.dtx
  50. +581 −60 l3kernel/l3expan.dtx
  51. +1 −1 l3kernel/l3file.dtx
  52. +2 −2 l3kernel/l3final.dtx
  53. +1 −1 l3kernel/l3flag.dtx
  54. +1 −1 l3kernel/l3fp-assign.dtx
  55. +4 −4 l3kernel/l3fp-aux.dtx
  56. +1 −1 l3kernel/l3fp-basics.dtx
  57. +1 −1 l3kernel/l3fp-convert.dtx
  58. +2 −2 l3kernel/l3fp-expo.dtx
  59. +1 −1 l3kernel/l3fp-extended.dtx
  60. +1 −1 l3kernel/l3fp-logic.dtx
  61. +4 −4 l3kernel/l3fp-parse.dtx
  62. +1 −1 l3kernel/l3fp-random.dtx
  63. +1 −1 l3kernel/l3fp-round.dtx
  64. +1 −1 l3kernel/l3fp-traps.dtx
  65. +1 −1 l3kernel/l3fp-trig.dtx
  66. +1 −1 l3kernel/l3fp.dtx
  67. +1 −1 l3kernel/l3fparray.dtx
  68. +1 −1 l3kernel/l3int.dtx
  69. +1 −1 l3kernel/l3intarray.dtx
  70. +17 −1 l3kernel/l3kernel-functions.dtx
  71. +3 −6 l3kernel/l3keys.dtx
  72. +43 −36 l3kernel/l3luatex.dtx
  73. +7 −2 l3kernel/l3msg.dtx
  74. +10 −14 l3kernel/l3names.dtx
  75. +11 −0 l3kernel/l3obsolete.txt
  76. +1 −1 l3kernel/l3oldmodules.dtx
  77. +168 −118 l3kernel/l3prefixes.csv
  78. +1 −1 l3kernel/l3prg.dtx
  79. +5 −5 l3kernel/l3prop.dtx
  80. +1 −1 l3kernel/l3quark.dtx
  81. +7 −7 l3kernel/l3regex.dtx
  82. +1 −1 l3kernel/l3seq.dtx
  83. +2 −2 l3kernel/l3skip.dtx
  84. +1 −1 l3kernel/l3sort.dtx
  85. +103 −86 l3kernel/l3str.dtx
  86. +1 −1 l3kernel/l3styleguide.tex
  87. +1 −1 l3kernel/l3syntax-changes.tex
  88. +4 −4 l3kernel/l3sys.dtx
  89. +1 −1 l3kernel/l3tl-analysis.dtx
  90. +1 −1 l3kernel/l3tl.dtx
  91. +5 −5 l3kernel/l3token.dtx
  92. +4 −4 l3kernel/l3unicode.dtx
  93. +1 −1 l3kernel/source3.tex
  94. +4 −4 l3kernel/testfiles/m3basics001.lvt
  95. +8 −0 l3kernel/testfiles/m3char001.luatex.tlg
  96. +8 −0 l3kernel/testfiles/m3char001.lvt
  97. +8 −0 l3kernel/testfiles/m3char001.tlg
  98. +8 −0 l3kernel/testfiles/m3char001.xetex.tlg
  99. +0 −11 l3kernel/testfiles/m3deprecation001.luatex.tlg
  100. +0 −11 l3kernel/testfiles/m3deprecation001.tlg
  101. +52 −0 l3kernel/testfiles/m3expan003.lvt
  102. +36 −0 l3kernel/testfiles/m3expan003.tlg
  103. +86 −26 l3kernel/testfiles/m3expl001.luatex.tlg
  104. +124 −25 l3kernel/testfiles/m3expl001.ptex.tlg
  105. +124 −25 l3kernel/testfiles/m3expl001.tlg
  106. +124 −25 l3kernel/testfiles/m3expl001.uptex.tlg
  107. +124 −25 l3kernel/testfiles/m3expl001.xetex.tlg
  108. +0 −3 l3kernel/testfiles/m3expl002.luatex.tlg
  109. +0 −3 l3kernel/testfiles/m3expl002.ptex.tlg
  110. +0 −3 l3kernel/testfiles/m3expl002.tlg
  111. +0 −3 l3kernel/testfiles/m3expl002.uptex.tlg
  112. +0 −3 l3kernel/testfiles/m3expl002.xetex.tlg
  113. +86 −26 l3kernel/testfiles/m3expl003.luatex.tlg
  114. +124 −25 l3kernel/testfiles/m3expl003.ptex.tlg
  115. +124 −25 l3kernel/testfiles/m3expl003.tlg
  116. +124 −25 l3kernel/testfiles/m3expl003.uptex.tlg
  117. +124 −25 l3kernel/testfiles/m3expl003.xetex.tlg
  118. +0 −3 l3kernel/testfiles/m3expl004.luatex.tlg
  119. +0 −3 l3kernel/testfiles/m3expl004.ptex.tlg
  120. +0 −3 l3kernel/testfiles/m3expl004.tlg
  121. +0 −3 l3kernel/testfiles/m3expl004.uptex.tlg
  122. +0 −3 l3kernel/testfiles/m3expl004.xetex.tlg
  123. +0 −4 l3kernel/testfiles/m3expl005.tlg
  124. +0 −3 l3kernel/testfiles/m3expl006.luatex.tlg
  125. +0 −3 l3kernel/testfiles/m3expl006.ptex.tlg
  126. +0 −3 l3kernel/testfiles/m3expl006.tlg
  127. +0 −3 l3kernel/testfiles/m3expl006.uptex.tlg
  128. +0 −3 l3kernel/testfiles/m3expl006.xetex.tlg
  129. +16 −16 l3kernel/testfiles/m3file001.xetex.tlg
  130. +1 −1 l3kernel/testfiles/m3prg001.lvt
  131. +1 −1 l3kernel/testfiles/m3sort002.lvt
  132. +19 −19 l3kernel/testfiles/m3str001.lvt
  133. +1 −1 l3kernel/testfiles/m3str001.tlg
  134. +1 −1 l3kernel/testfiles/m3str003.lvt
  135. +18 −18 l3kernel/testfiles/m3tl006.lvt
  136. +3 −3 l3kernel/testfiles/m3tlist002.lvt
  137. +31 −0 l3packages/CHANGELOG.md
  138. +2 −2 l3packages/README.md
  139. +2 −2 l3packages/l3keys2e/l3keys2e.dtx
  140. +0 −1 l3packages/l3keys2e/testfiles/m3keys2e000.tlg
  141. +0 −2 l3packages/xfp/testfiles/xfp000.tlg
  142. +0 −1 l3packages/xfp/testfiles/xfp001.tlg
  143. +2 −2 l3packages/xfp/xfp.dtx
  144. +0 −1 l3packages/xfrac/testfiles/xfrac000.tlg
  145. +2 −2 l3packages/xfrac/xfrac.dtx
  146. +0 −1 l3packages/xparse/testfiles/xparse000.tlg
  147. +7 −7 l3packages/xparse/xparse.dtx
  148. +0 −1 l3packages/xtemplate/testfiles/xtemplate000.tlg
  149. +2 −2 l3packages/xtemplate/xtemplate.dtx
  150. +0 −1 l3trial/l3auxdata/testfiles/m3auxdata000.tlg
  151. +5 −2 l3trial/l3benchmark/l3benchmark.dtx
  152. +0 −1 l3trial/l3benchmark/testfiles/m3benchmark000.tlg
  153. +0 −1 l3trial/l3benchmark/testfiles/m3benchmark000.xetex.tlg
  154. +10 −10 l3trial/l3bigint/l3bigint.dtx
  155. +0 −1 l3trial/l3bigint/testfiles/m3bigint000.tlg
  156. +1 −1 l3trial/l3bigint/testfiles/m3bigint001.lvt
  157. +1 −1 l3trial/l3check/l3check.dtx
  158. +0 −1 l3trial/l3fp-extras/testfiles/m3fp-extras000.tlg
  159. +0 −1 l3trial/l3hooks/testfiles/m3hooks000.tlg
  160. +0 −1 l3trial/l3hooks/testfiles/m3hooks001.luatex.tlg
  161. +0 −1 l3trial/l3hooks/testfiles/m3hooks001.tlg
  162. +0 −1 l3trial/l3htoks/testfiles/m3htoks000.tlg
  163. +0 −1 l3trial/l3image/testfiles/m3image000.tlg
  164. +0 −1 l3trial/l3kernel-extras/testfiles/m3kernel-extras000.tlg
  165. +0 −2 l3trial/l3ldb/testfiles/m3ldb000.tlg
  166. +0 −1 l3trial/l3ldb/testfiles/m3precom000.tlg
  167. +0 −1 l3trial/l3str-format-new/testfiles/m3str-format-new000.tlg
  168. +0 −1 l3trial/l3trace/testfiles/m3trace000.tlg
  169. +0 −1 l3trial/l3tree/testfiles/m3tree000.tlg
  170. +0 −1 l3trial/xbox/testfiles/xbox000.tlg
  171. +0 −12 l3trial/xfont/testfiles/l3font000.tlg
  172. +1 −1 l3trial/xfont/xfss.dtx
@@ -51,7 +51,7 @@ code with selected contributed packages.

Discussion concerning the approach, suggestions for improvements,
changes, additions, _etc._ should be addressed to the list
[LaTeX-L](http://news.gmane.org/group/gmane.comp.tex.latex.latex3).
[LaTeX-L](https://listserv.uni-heidelberg.de/cgi-bin/wa?A0=LATEX-L).

You can subscribe to this list by sending mail to

@@ -34,7 +34,7 @@ function main(target)
errorlevel = call (ctanbundles, "ctan")
if errorlevel == 0 then
for _,i in ipairs (ctanbundles) do
cp (i .. ".zip", i, ".")
cp ("*.zip", i, ".")
end
end
elseif target == "doc" then
@@ -1,7 +1,6 @@
This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
LaTeX Font Info: Try loading font information for C70+rm on input line ....
(../c70rm.fd(../c70rm.fdFile: c70rm.fd YYYY-MM-DD v2.4.14 Chinese font definition (CTEX)
)
Package CJKpunct Info: use punctuation spaces for family 'rm' with punctstyle (quanjiao) on input line ....
Completed box being shipped out [1]
@@ -1,7 +1,6 @@
This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
LaTeX Font Info: Try loading font information for TS1+cmr on input line ....
(../ts1cmr.fd(../ts1cmr.fdFile: ts1cmr.fd YYYY-MM-DD v2.5h Standard LaTeX font definitions(../ts1cmr.fd(../ts1cmr.fdFile: ts1cmr.fd YYYY-MM-DD v2.5h Standard LaTeX font definitions)
Completed box being shipped out [1]
\vbox(633.0+0.0)x407.0
.\glue 16.0
@@ -0,0 +1,43 @@
# Changelog
All notable changes to the `l3experimental` bundle since the start of 2018
will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
this project uses date-based 'snapshot' version identifiers.

## [Unreleased]

## [2018-08-23]

### Added
- `CHANGELOG.md` (fixes #460)
- `l3sys-shell` for experimental shell functions

## [2018-05-12]

### Changed
- Track changes in primitive naming in `l3kernel`

## [2018-04-30]

### Changed
- Switch to ISO date format
- Improve cross-module use of internal functions

## [2018-03-05]

### Added
- Several new functions added to `l3draw`

## [2018-02-21]

### Added
- New `l3color` module using `xcolor`-like expression syntax
- New `l3draw` module, based on `pgf` layer of the TikZ system

[Unreleased]: https://github.com/latex3/latex3/compare/2018-08-23...HEAD
[2018-08-23]: https://github.com/latex3/latex3/compare/2018-05-12...2018-08-23
[2018-05-12]: https://github.com/latex3/latex3/compare/2018-04-30...2018-05-12
[2018-04-30]: https://github.com/latex3/latex3/compare/2018-03-05...2018-04-30
[2018-03-05]: https://github.com/latex3/latex3/compare/2018-02-21...2018-03-05
[2018-02-21]: https://github.com/latex3/latex3/compare/2017-12-16...2018-02-21
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================

Release 2018-05-12
Release 2018-08-23

Overview
--------
@@ -24,6 +24,7 @@ bundles:
* `l3color`
* `l3draw`
* `l3str`
* `l3sys-shell`
* `xcoffins`
* `xgalley`

@@ -51,6 +52,12 @@ category code 10 ('space'). The `l3str` bundle consists of two parts. The
first is `l3str` itself. This is a collection of functions to act on strings,
including for manipulations such as UTF8 mappings in pdfTeX.

`l3sys-shell`
-------------

This module provides abstractions for common shell functions, e.g. file
deletion and copying.

`xcoffins`
----------

@@ -77,7 +84,7 @@ Discussion

Discussion concerning the approach, suggestions for improvements,
changes, additions, _etc._ should be addressed to the list
[LaTeX-L](http://news.gmane.org/group/gmane.comp.tex.latex.latex3).
[LaTeX-L](https://listserv.uni-heidelberg.de/cgi-bin/wa?A0=LATEX-L).

You can subscribe to this list by sending mail to

@@ -44,7 +44,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -263,7 +263,7 @@
%
% \begin{macrocode}
%<*package>
\ProvidesExplPackage{l3color}{2018-05-12}{}
\ProvidesExplPackage{l3color}{2018-08-23}{}
{L3 Experimental color support}
%</package>
% \end{macrocode}
@@ -359,7 +359,7 @@
\cs_generate_variant:Nn \@@_convert:nnN { VV }
\cs_new_protected:Npn \@@_convert:nnnN #1#2#3#4
{
\str_if_eq_x:nnT {#1} { spot } % TO DO!!!
\str_if_eq:nnT {#1} { spot } % TO DO!!!
{ }
\tl_set:Nx #4
{ \use:c { @@_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \q_stop }
@@ -551,7 +551,7 @@
\@@_extract:nNN {#2} \l_@@_next_model_tl \l_@@_next_value_tl
\tl_if_eq:NNF \l_@@_model_tl \l_@@_next_model_tl
{
\str_if_eq_x:nnT { \l_@@_model_tl } { gray }
\str_if_eq:VnT \l_@@_model_tl { gray }
{
\use:x
{
@@ -2,5 +2,4 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Bruno Le Floch
(l3color.sty
Package: l3color YYYY-MM-DD L3 Experimental color support
)
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -42,7 +42,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -109,7 +109,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -320,7 +320,7 @@
% Scoping drawing elements is necessary to allowing nesting of subparts.
% These features have specific use requirements: the preconditions must be
% met. In particular, each type of drawing scope also constitutes a
% group (\cs{groupd_being:}/\cs{group_end:} pair): as such, they must be
% group (\cs{group_begin:}/\cs{group_end:} pair): as such, they must be
% nested correctly.
%
% \begin{function}{\draw_scope_begin:, \draw_scope_end:}
@@ -486,7 +486,7 @@
% error will occur.
% \end{function}
%
% \begin{function}[EXP]{\draw_point_intersect_circles:nnnn}
% \begin{function}[EXP]{\draw_point_intersect_circles:nnnnn}
% \begin{syntax}
% \cs{draw_point_intersect_circles:nnnnn}
% \Arg{center1} \Arg{radius1} \Arg{center2} \Arg{radius2} \Arg{root}
@@ -568,7 +568,7 @@
% \draw_path_lineto:n { 0cm , 2cm }
% \draw_path_lineto:n { 3cm , 2cm }
% \draw_path_curveto:nnn
% { 3cm , 0cm } { 2cm , 0cm } { 1cm , 0 cm }
% { 3cm , 0cm } { 2cm , 0cm } { 1cm , 0cm }
% \draw_path_use_clear:n { stroke }
% \draw_end:
% \end{demo}
@@ -1106,7 +1106,7 @@
%
% \begin{macrocode}
%<*package>
\ProvidesExplPackage{l3draw}{2018-05-12}{}
\ProvidesExplPackage{l3draw}{2018-08-23}{}
{L3 Experimental core drawing support}
%</package>
% \end{macrocode}
@@ -2,9 +2,7 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Joseph Wright
(l3draw.sty
Package: l3draw YYYY-MM-DD L3 Experimental core drawing support
(l3color.sty
Package: l3color YYYY-MM-DD L3 Experimental color support
)
\l__draw_tmp_box=\box...
\g__draw_path_lastx_dim=\dimen...
@@ -46,7 +46,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -234,7 +234,7 @@
% \end{macrocode}
%
% \begin{macrocode}
\ProvidesExplPackage{l3str-convert}{2018-05-12}{}
\ProvidesExplPackage{l3str-convert}{2018-08-23}{}
{L3 Experimental string encoding conversions}
% \end{macrocode}
%
@@ -1547,7 +1547,7 @@
{ \@@_unescape_string_repeat:NNNNNN ?? }
}
{
\str_case_x:nnF {#2}
\str_case_e:nnF {#2}
{
{ \c_backslash_str } { 134 }
{ ( } { 50 }
@@ -2257,10 +2257,10 @@
}
\cs_new_protected:Npn \@@_decode_utf_xvi_bom:NN #1#2
{
\str_if_eq_x:nnTF { #1#2 } { ^^ff ^^fe }
\str_if_eq:nnTF { #1#2 } { ^^ff ^^fe }
{ \@@_decode_utf_xvi:Nw 2 }
{
\str_if_eq_x:nnTF { #1#2 } { ^^fe ^^ff }
\str_if_eq:nnTF { #1#2 } { ^^fe ^^ff }
{ \@@_decode_utf_xvi:Nw 1 }
{ \@@_decode_utf_xvi:Nw 1 #1#2 }
}
@@ -2548,10 +2548,10 @@
}
\cs_new_protected:Npn \@@_decode_utf_xxxii_bom:NNNN #1#2#3#4
{
\str_if_eq_x:nnTF { #1#2#3#4 } { ^^ff ^^fe ^^00 ^^00 }
\str_if_eq:nnTF { #1#2#3#4 } { ^^ff ^^fe ^^00 ^^00 }
{ \@@_decode_utf_xxxii:Nw 2 }
{
\str_if_eq_x:nnTF { #1#2#3#4 } { ^^00 ^^00 ^^fe ^^ff }
\str_if_eq:nnTF { #1#2#3#4 } { ^^00 ^^00 ^^fe ^^ff }
{ \@@_decode_utf_xxxii:Nw 1 }
{ \@@_decode_utf_xxxii:Nw 1 #1#2#3#4 }
}
@@ -46,7 +46,7 @@
% }^^A
% }
%
% \date{Released 2018-05-12}
% \date{Released 2018-08-23}
%
% \maketitle
%
@@ -162,7 +162,7 @@
%
% \begin{macrocode}
%<*package>
\ProvidesExplPackage{l3str-format}{2018-05-12}{}
\ProvidesExplPackage{l3str-format}{2018-08-23}{}
{L3 Experimental string formatting}
%</package>
% \end{macrocode}
@@ -2,6 +2,5 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Bruno Le Floch
(l3str-convert.sty
Package: l3str-convert YYYY-MM-DD L3 Experimental string encoding conversions
\l__str_internal_int=\count...
)
@@ -2,7 +2,6 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Bruno Le Floch
(l3str-convert.sty
Package: l3str-convert YYYY-MM-DD L3 Experimental string encoding conversions
\l__str_internal_int=\count...
\c__str_replacement_char_int=\count...
)
@@ -2,6 +2,5 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Bruno Le Floch
(l3str-convert.sty
Package: l3str-convert YYYY-MM-DD L3 Experimental string encoding conversions
\l__str_internal_int=\count...
)
@@ -2,6 +2,5 @@ This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
Author: Bruno Le Floch
(l3str-convert.sty
Package: l3str-convert YYYY-MM-DD L3 Experimental string encoding conversions
\l__str_internal_int=\count...
)
@@ -70,7 +70,7 @@
\str_if_eq:onTF \l_tmpa_str { ^^83 } { \TRUE } { \ERROR }
\str_set_convert:Nnnn \l_tmpa_str { ce b1 } { utf8/hex } { } % alpha
\bool_lazy_or:nnTF \sys_if_engine_luatex_p: \sys_if_engine_xetex_p:
{ \str_if_eq_x:nnTF \l_tmpa_str { \cs_to_str:N \^^^^03b1 } { \TRUE } { \ERROR } }
{ \str_if_eq:eeTF \l_tmpa_str { \cs_to_str:N \^^^^03b1 } { \TRUE } { \ERROR } }
{ \str_if_eq:onTF \l_tmpa_str { ? } { \TRUE } { \ERROR } }
}

@@ -87,7 +87,7 @@
{ 0020 0034 0058 0123 1234 6C34 D834 DD1E }
{ utf16be/hex } { utf8/name }
\exp_args:NNo \tl_replace_all:Nnn \l_tmpa_str { \c_hash_str } { * }
\str_if_eq_x:nnTF { *20 4 X *C4*A3 *E1*88*B4 *E6*B0*B4 *F0*9D*84*9E }
\str_if_eq:eeTF { *20 4 X *C4*A3 *E1*88*B4 *E6*B0*B4 *F0*9D*84*9E }
{ \l_tmpa_str } { \TRUE } { \ERROR }
}

Showing you all comments on commits in this comparison.

@stone-zeng

This comment has been minimized.

Copy link
Contributor

@stone-zeng stone-zeng commented on 69d1181 May 16, 2018

why the extension is .tex?

@josephwright

This comment has been minimized.

Copy link
Member Author

@josephwright josephwright commented on 69d1181 May 16, 2018

@stone-zeng Because I wrote it in TeXworks and failed to tidy that up on the first pass. Should now all be correct.

@stone-zeng

This comment has been minimized.

Copy link
Contributor

@stone-zeng stone-zeng commented on 2a99641 Jul 24, 2018

There is a typo: should be \tl_(g)set_from_shell:Nnn.

@jfine2358

This comment has been minimized.

Copy link

@jfine2358 jfine2358 commented on 7b62e64 Aug 24, 2018

Quoting this line of code, I've asked this question

What are the security risks in this line of LaTeX code, and what can be done to reduce them? The LaTeX3 project wants TeX macros to be able to do file operations via shell escape.

@godbyk

This comment has been minimized.

Copy link

@godbyk godbyk commented on 7b62e64 Aug 24, 2018

Do we need to worry about quoting or escaping special (per-shell) characters at this level?

For example, if I write \sys_shell_cp:nn { /path~with~spaces/in~it.txt } { /destination/file.txt }, will that work properly?

@josephwright

This comment has been minimized.

Copy link
Member Author

@josephwright josephwright commented on 7b62e64 Aug 24, 2018

At present this is all highly experimental, and spaces are likely out. The reason is that we need to quote them to allow the \input primitive to handle them, but we can't nest a second set of " tokens, which we'd need to allow a path-with-spaces to work on Windows.

I'll need to think about quoting more generally: we may well need to provide some functions in this area.

@godbyk

This comment has been minimized.

Copy link

@godbyk godbyk commented on 7b62e64 Aug 24, 2018

Yeah, quoting and escaping is always a bit tricky—compounded by trying to do it in a cross-platform way.

Without quoting, you could potentially do something like \sys_shell_cp:nn { src dest } { ; evil_command } and have LaTeX call evil_command after copying the file.

Also, should these macros emit a warning for the \sys_if_shell_unrestricted:F case (as opposed to silently failing)?

Finally, I should mention that I'm generally in favor of providing some cross-platform abstractions for common file system operations that are likely to be useful in multiple packages and by document authors. One benefit from a security standpoint is that it provides a smaller attack surface. If there's a bug, fixing it solves the issue for all the packages using the \sys_shell_* macro instead of individual packages having to solve the bug themselves.

@jfine2358

This comment has been minimized.

Copy link

@jfine2358 jfine2358 commented on 7b62e64 Aug 24, 2018

@jfine2358

This comment has been minimized.

Copy link

@jfine2358 jfine2358 commented on 7b62e64 Aug 24, 2018

  • @godbyk You wrote: [security benefit is] smaller attack surface.

I don't agree, even with completely safe escaping. Once 'unrestricted shell escape' is enabled, the door is completely wide open. We have Bobby Drop Tables.

For me the big attack vector is persuading the user (or system admin or whatever) to enable unrestricted shell escape. Don't help the bad guy use the social authority of the LaTeX project. Dear user, just click on a button, so the document can compile.

@godbyk

This comment has been minimized.

Copy link

@godbyk godbyk commented on 7b62e64 Aug 24, 2018

@jfine2358 There are security issues inherent in using the -shell-escape option to allow LaTeX to run any program it likes. That's why -shell-escape isn't enabled by default.

These macros don't enable shell escape. Neither do they encourage the use shell escape per se. They merely provide a common interface for package authors to perform some basic file system manipulation so they don't have to each write their own (potentially buggy) implementations. If LaTeX 3 handles the quoting and escaping well, then that solves a lot of the more common issues.

It sounds like you're taking issue with the -shell-escape option itself. I think complaints about that feature are better addressed elsewhere (perhaps the TeX Live mailing list?). This discussion is about the particular implementation of these macros.

@jfine2358

This comment has been minimized.

Copy link

@jfine2358 jfine2358 commented on 7b62e64 Aug 25, 2018

I've added issue

State clearly security aspects of l3sys-shell #472

I suggest we move the discussion there.