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: 2019-05-03
head repository: latex3/latex3
compare: 2019-05-05
  • 14 commits
  • 81 files changed
  • 0 comments
  • 1 contributor
Commits on May 03, 2019
This came up after a discussion with Ulrike. The old behaviour was
somewhat loose in terms of the catcode of the tokens produced. In this
commit, that is addressed by ensuring that the output tokens are always
re-generated to have the correct catcode. It also adds a str version,
which will be quite a bit faster and which gives the correct behaviour
in \str_<target>_case:n - that was not the case before.
Commits on May 04, 2019
This way we only add a special to a column with some content. Hopefully this works reasonably well and is safe.
For goto, \pdfstartlink does add /Subtype /Link, so we
need to do the same for other drivers.
Showing with 2,619 additions and 113 deletions.
  1. +15 −1 l3kernel/CHANGELOG.md
  2. +1 −1 l3kernel/README.md
  3. +2 −2 l3kernel/expl3.dtx
  4. +1 −1 l3kernel/interface3.tex
  5. +1 −1 l3kernel/l3alloc.dtx
  6. +1 −1 l3kernel/l3basics.dtx
  7. +1 −1 l3kernel/l3bootstrap.dtx
  8. +1 −1 l3kernel/l3box.dtx
  9. +108 −10 l3kernel/l3candidates.dtx
  10. +1 −1 l3kernel/l3clist.dtx
  11. +1 −1 l3kernel/l3coffins.dtx
  12. +1 −1 l3kernel/l3color-base.dtx
  13. +1 −1 l3kernel/l3deprecation.dtx
  14. +1 −1 l3kernel/l3doc.dtx
  15. +1 −1 l3kernel/l3docstrip.dtx
  16. +1 −1 l3kernel/l3drivers-basics.dtx
  17. +1 −1 l3kernel/l3drivers-box.dtx
  18. +1 −1 l3kernel/l3drivers-color.dtx
  19. +1 −1 l3kernel/l3drivers-draw.dtx
  20. +1 −1 l3kernel/l3drivers-image.dtx
  21. +76 −37 l3kernel/l3drivers-pdf.dtx
  22. +5 −2 l3kernel/l3drivers.dtx
  23. +1 −1 l3kernel/l3expan.dtx
  24. +1 −1 l3kernel/l3file.dtx
  25. +1 −1 l3kernel/l3final.dtx
  26. +1 −1 l3kernel/l3flag.dtx
  27. +1 −1 l3kernel/l3fp-assign.dtx
  28. +1 −1 l3kernel/l3fp-aux.dtx
  29. +1 −1 l3kernel/l3fp-basics.dtx
  30. +1 −1 l3kernel/l3fp-convert.dtx
  31. +1 −1 l3kernel/l3fp-expo.dtx
  32. +1 −1 l3kernel/l3fp-extended.dtx
  33. +1 −1 l3kernel/l3fp-logic.dtx
  34. +1 −1 l3kernel/l3fp-parse.dtx
  35. +1 −1 l3kernel/l3fp-random.dtx
  36. +1 −1 l3kernel/l3fp-round.dtx
  37. +1 −1 l3kernel/l3fp-traps.dtx
  38. +1 −1 l3kernel/l3fp-trig.dtx
  39. +1 −1 l3kernel/l3fp.dtx
  40. +1 −1 l3kernel/l3fparray.dtx
  41. +1 −1 l3kernel/l3int.dtx
  42. +1 −1 l3kernel/l3intarray.dtx
  43. +1 −1 l3kernel/l3kernel-functions.dtx
  44. +1 −1 l3kernel/l3keys.dtx
  45. +1 −1 l3kernel/l3legacy.dtx
  46. +1 −1 l3kernel/l3luatex.dtx
  47. +1 −1 l3kernel/l3msg.dtx
  48. +1 −1 l3kernel/l3names.dtx
  49. +1 −1 l3kernel/l3prg.dtx
  50. +1 −1 l3kernel/l3prop.dtx
  51. +1 −1 l3kernel/l3quark.dtx
  52. +1 −1 l3kernel/l3regex.dtx
  53. +1 −1 l3kernel/l3seq.dtx
  54. +1 −1 l3kernel/l3skip.dtx
  55. +1 −1 l3kernel/l3sort.dtx
  56. +2 −2 l3kernel/l3str.dtx
  57. +1 −1 l3kernel/l3styleguide.tex
  58. +1 −1 l3kernel/l3syntax-changes.tex
  59. +1 −1 l3kernel/l3sys.dtx
  60. +1 −1 l3kernel/l3term-glossary.tex
  61. +1 −1 l3kernel/l3tl-analysis.dtx
  62. +1 −1 l3kernel/l3tl.dtx
  63. +1 −1 l3kernel/l3token.dtx
  64. +1 −1 l3kernel/l3unicode.dtx
  65. +1 −1 l3kernel/source3.tex
  66. +168 −0 l3kernel/testfiles/m3char001.luatex.tlg
  67. +44 −0 l3kernel/testfiles/m3char001.lvt
  68. +796 −0 l3kernel/testfiles/m3char001.ptex.tlg
  69. +260 −0 l3kernel/testfiles/m3char001.tlg
  70. +796 −0 l3kernel/testfiles/m3char001.uptex.tlg
  71. +168 −0 l3kernel/testfiles/m3char001.xetex.tlg
  72. +12 −0 l3kernel/testfiles/m3expl001.luatex.tlg
  73. +12 −0 l3kernel/testfiles/m3expl001.ptex.tlg
  74. +12 −0 l3kernel/testfiles/m3expl001.tlg
  75. +12 −0 l3kernel/testfiles/m3expl001.uptex.tlg
  76. +12 −0 l3kernel/testfiles/m3expl001.xetex.tlg
  77. +12 −0 l3kernel/testfiles/m3expl003.luatex.tlg
  78. +12 −0 l3kernel/testfiles/m3expl003.ptex.tlg
  79. +12 −0 l3kernel/testfiles/m3expl003.tlg
  80. +12 −0 l3kernel/testfiles/m3expl003.uptex.tlg
  81. +12 −0 l3kernel/testfiles/m3expl003.xetex.tlg
@@ -7,6 +7,19 @@ this project uses date-based 'snapshot' version identifiers.

## [Unreleased]

## [2019-05-05]

### Added

- `\char_str_<target>_case:N`

### Fixed

- Infinite loop in some cases in DVI mode due to link-breaking code
(see #570)
- Category code of output from `\char_<target>_case:N`, and
same issue in `\str_<target>_case:n`

## [2019-05-03]

### Added
@@ -372,7 +385,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`

[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-03...HEAD
[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-05...HEAD
[2019-05-05]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-05
[2019-05-03]: https://github.com/latex3/latex3/compare/2019-04-21...2019-05-03
[2019-04-21]: https://github.com/latex3/latex3/compare/2019-04-06...2019-04-21
[2019-04-06]: https://github.com/latex3/latex3/compare/2019-03-26...2019-04-06
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================

Release 2019-05-03
Release 2019-05-05

Overview
--------
@@ -23,7 +23,7 @@
% for those people who are interested.
%
%<*driver|generic|package>
\def\ExplFileDate{2019-05-03}%
\def\ExplFileDate{2019-05-05}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -51,7 +51,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -54,7 +54,7 @@
{latex-team@latex-project.org}%
}%
}
\date{Released 2019-05-03}
\date{Released 2019-05-05}

\pagenumbering{roman}
\maketitle
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -44,7 +44,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -1220,10 +1220,12 @@
% (\enquote{active}), and character code $32$ (space).
% \end{variable}
%
% \begin{function}[added = 2018-04-06, EXP]
% \begin{function}[added = 2018-04-06, updated = 2019-05-03, EXP]
% {
% \char_lower_case:N, \char_upper_case:N,
% \char_mixed_case:N, \char_fold_case:N
% \char_mixed_case:N, \char_fold_case:N,
% \char_str_lower_case:N, \char_str_upper_case:N,
% \char_str_mixed_case:N, \char_str_fold_case:N,
% }
% \begin{syntax}
% \cs{char_lower_case:N} \meta{char}
@@ -1232,7 +1234,10 @@
% as detailed by the function name (see \cs{str_fold_case:n}
% and \cs{tl_mixed_case:n} for details of these terms). The case mapping
% is carried out with no context-dependence (\emph{cf.}~\cs{tl_upper_case:n},
% \emph{etc.})
% \emph{etc.}) The \texttt{str} versions always generate \enquote{other}
% (category code $12$) characters, whilst the standard versions generate
% characters with the currently-active category code (\emph{i.e.}~as if
% the character had been read directly here).
% \end{function}
%
% \begin{function}[added = 2018-06-01, EXP]{\char_codepoint_to_bytes:n}
@@ -2336,13 +2341,25 @@
%<@@=char>
% \end{macrocode}
%
% \begin{macro}
% \begin{macro}[EXP]
% {
% \char_lower_case:N, \char_upper_case:N,
% \char_mixed_case:N, \char_fold_case:N
% }
% \begin{macro}{\@@_change_case:nNN}
% \begin{macro}{\@@_change_case:nN}
% \begin{macro}[EXP]{\@@_change_case:nNN}
% \begin{macro}[EXP]{\@@_change_case:nN}
% \begin{macro}[EXP]{\@@_change_case_multi:n, \@@_change_case_multi:v}
% \begin{macro}[EXP]{\@@_change_case_multi:NNNw}
% \begin{macro}[EXP]{\@@_change_case:NN}
% \begin{macro}[EXP]{\@@_change_case:NNN}
% \begin{macro}[EXP]{\@@_change_case:N}
% \begin{macro}[EXP]
% {
% \char_str_lower_case:N, \char_str_upper_case:N,
% \char_str_mixed_case:N, \char_str_fold_case:N
% }
% \begin{macro}[EXP]{\@@_str_change_case:nNN}
% \begin{macro}[EXP]{\@@_str_change_case:nN}
% Expandable character generation is done using a two-part approach.
% First, see if the current character has a special mapping for the current
% transformation. If it does, insert that. Otherwise, use the \TeX{} data
@@ -2351,6 +2368,12 @@
% may be special-cased or might be a special upper case outcome. The internal
% when using non-Unicode engines has to be set up to only do anything
% with ASCII characters.
%
% To ensure that the category codes produced are predictable, every character
% is re-generated even if it is otherwise unchanged. This makes life a little
% interesting when we might have multiple output characters: we have to
% grab each of them and case change them in reverse order to maintain
% \texttt{f}-type expandability.
% \begin{macrocode}
\cs_new:Npn \char_lower_case:N #1
{ \@@_change_case:nNN { lower } \char_value_lccode:n #1 }
@@ -2359,28 +2382,103 @@
\cs_new:Npn \char_mixed_case:N #1
{
\tl_if_exist:cTF { c_@@_mixed_case_ \token_to_str:N #1 _tl }
{ \tl_use:c { c_@@_mixed_case_ \token_to_str:N #1 _tl } }
{
\@@_change_case_multi:v
{ c_@@_mixed_case_ \token_to_str:N #1 _tl }
}
{ \char_upper_case:N #1 }
}
\cs_new:Npn \char_fold_case:N #1
{ \@@_change_case:nNN { fold } \char_value_lccode:n #1 }
\cs_new:Npn \@@_change_case:nNN #1#2#3
{
\tl_if_exist:cTF { c_@@_ #1 _case_ \token_to_str:N #3 _tl }
{ \tl_use:c { c_@@_ #1 _case_ \token_to_str:N #3 _tl } }
{
\@@_change_case_multi:v
{ c_@@_ #1 _case_ \token_to_str:N #3 _tl }
}
{ \exp_args:Nf \@@_change_case:nN { #2 { `#3 } } #3 }
}
\cs_new:Npn \@@_change_case:nN #1#2
{
\int_compare:nNnTF {#1} = 0
{#2}
{ \@@_change_case:N #2 }
{ \char_generate:nn {#1} { \char_value_catcode:n {#1} } }
}
\cs_new:Npn \@@_change_case_multi:n #1
{ \@@_change_case_multi:NNNw #1 \q_no_value \q_no_value \q_stop }
\cs_new:Npn \@@_change_case_multi:NNNw #1#2#3#4 \q_stop
{
\quark_if_no_value:NTF #3
{
\quark_if_no_value:NTF #2
{ \@@_change_case:N #1 }
{ \@@_change_case:NN #1#2 }
}
{ \@@_change_case:NNN #1#2#3 }
}
\cs_generate_variant:Nn \@@_change_case_multi:n { v }
\cs_new:Npn \@@_change_case:NN #1#2
{
\exp_args:Nnf \use:nn
{ \@@_change_case:N #1 }
{ \@@_change_case:N #2 }
}
\cs_new:Npn \@@_change_case:NNN #1#2#3
{
\exp_args:Nnff \use:nnn
{ \@@_change_case:N #1 }
{ \@@_change_case:N #2 }
{ \@@_change_case:N #3 }
}
\cs_new:Npn \@@_change_case:N #1
{ \char_generate:nn { `#1 } { \char_value_catcode:n { `#1 } } }
\bool_lazy_or:nnF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
{
\cs_set_eq:NN \@@_change_case:nN \use_ii:nn
}
% \end{macrocode}
% Same story for the string version, except category code is easier
% to follow. This of course makes this version significantly faster.
% \begin{macrocode}
\cs_new:Npn \char_str_lower_case:N #1
{ \@@_str_change_case:nNN { lower } \char_value_lccode:n #1 }
\cs_new:Npn \char_str_upper_case:N #1
{ \@@_str_change_case:nNN { upper } \char_value_uccode:n #1 }
\cs_new:Npn \char_str_mixed_case:N #1
{
\tl_if_exist:cTF { c_@@_mixed_case_ \token_to_str:N #1 _tl }
{ \tl_to_str:c { c_@@_mixed_case_ \token_to_str:N #1 _tl } }
{ \char_str_upper_case:N #1 }
}
\cs_new:Npn \char_str_fold_case:N #1
{ \@@_str_change_case:nNN { fold } \char_value_lccode:n #1 }
\cs_new:Npn \@@_str_change_case:nNN #1#2#3
{
\tl_if_exist:cTF { c_@@_ #1 _case_ \token_to_str:N #3 _tl }
{ \tl_to_str:c { c_@@_ #1 _case_ \token_to_str:N #3 _tl } }
{ \exp_args:Nf \@@_str_change_case:nN { #2 { `#3 } } #3 }
}
\cs_new:Npn \@@_str_change_case:nN #1#2
{
\int_compare:nNnTF {#1} = 0
{ \tl_to_str:n {#2} }
{ \char_generate:nn {#1} { 12 } }
}
\bool_lazy_or:nnF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
{
\cs_set:Npn \@@_str_change_case:nN #1#2
{ \tl_to_str:n {#2} }
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
@@ -44,7 +44,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -79,7 +79,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
% \maketitle
% \tableofcontents
%
@@ -63,7 +63,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%
@@ -43,7 +43,7 @@
% }^^A
% }
%
% \date{Released 2019-05-03}
% \date{Released 2019-05-05}
%
% \maketitle
%

No commit comments for this range