texlive[53719] trunk: l3 (8feb20)

commits+karl at tug.org commits+karl at tug.org
Sat Feb 8 23:17:44 CET 2020


Revision: 53719
          http://tug.org/svn/texlive?view=revision&revision=53719
Author:   karl
Date:     2020-02-08 23:17:44 +0100 (Sat, 08 Feb 2020)
Log Message:
-----------
l3 (8feb20)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3packages/README.md
    trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
    trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl	2020-02-08 22:17:44 UTC (rev 53719)
@@ -78,10 +78,14 @@
 
 proc do_debug {s} {
   if $::ddebug {
-    puts stderr $s
+    if {$::tcl_platform(platform) ne "windows"} {puts stderr $s}
     # On windows, stderr output goes nowhere.
     # Therefore also debug output for the log dialog.
     lappend ::dbg_log $s
+    file mkdir ${::instroot}/temp
+    set dbg [open "${::instroot}/temp/mydbglog" a]
+    puts $dbg "TCL: $s"
+    close $dbg
     # Track debug output in the log dialog if it is running:
     if [winfo exists .tllg.dbg.tx] {
       .tllg.dbg.tx configure -state normal
@@ -328,13 +332,15 @@
 # EOF is indicated by a return value of -1.
 
 proc read_err_tempfile {} {
-  set len 0
-  while 1 {
-    set len [chan gets $::err l]
-    if {$len >= 0} {
-      lappend ::err_log $l
-    } else {
-      break
+  if [info exists ::err] {
+    set len 0
+    while 1 {
+      set len [chan gets $::err l]
+      if {$len >= 0} {
+        lappend ::err_log $l
+      } else {
+        break
+      }
     }
   }
 } ; # read_err_tempfile
@@ -341,7 +347,7 @@
 
 proc err_exit {{m ""}} {
   do_debug "error exit"
-  if [info exists ::err] read_err_tempfile
+  read_err_tempfile
   if {$m ne ""} {
     set ::err_log [linsert $::err_log 0 $m]
   }
@@ -678,22 +684,19 @@
   display_packages_info
 } ; # collect_filtered
 
-# derive the set of platforms from the dictionary of packages:
-# collect the values $plname from packages 'tex\.$plname'
 proc get_platforms {} {
   # guarantee fresh start
   foreach k $::platforms {dict unset ::platforms $k}
   set ::platforms [dict create]
-  # glob-style matching: $k should start with "tex."
-  foreach k [dict keys $::pkgs "tex.*"] {
-    set plname [string range $k 4 end]
-    if {$plname eq ""} continue
-    set pl [dict create "cur" 0 "fut" 0]
-    if {[dict get $::pkgs $k "localrev"] > 0} {
-      dict set pl "cur" 1
-      dict set pl "fut" 1
+  run_cmd_waiting "platform list"
+  foreach l $::out_log {
+    if [regexp {^\(i\)\s+(\S+)\s*$} $l dum plname] {
+      set pl [dict create "cur" 1 "fut" 1]
+      dict set ::platforms $plname $pl
+    } elseif [regexp {^\s+(\S+)\s*$} $l dum plname] {
+      set pl [dict create "cur" 0 "fut" 0]
+      dict set ::platforms $plname $pl
     }
-    dict set ::platforms $plname $pl
   }
 }
 
@@ -749,13 +752,11 @@
     catch {exec -ignorestderr taskkill /pid [pid] /t /f}
   } else {
     catch {exec -ignorestderr kill -9 [pid]}
-    # kill -9 should also be ok for darwin
   }
 } ; # abort load
 
-# activate abort button
 # toplevel with abort button in case loading of a repository takes too long.
-# it should disappear if loading finishes
+# it can be closed when loading finishes
 proc splash_loading {} {
 
   create_dlg .loading .
@@ -765,37 +766,23 @@
   # wallpaper
   pack [ttk::frame .loading.bg -padding 3] -fill both -expand 1
 
-  set ::do_track_loading \
-      [expr {[dict get $::pkgs texlive.infra localrev] >= 51676}]
-
-  if $::do_track_loading {
-    set lbl [__ \
-                 "If loading takes too long, press Abort and choose another repository."]
-  } else {
-    set lbl [__ "Trying to load %s.
-
-If this takes too long, press Abort and choose another repository." \
-              $::repos(main)]
-  }
+  set lbl [__ \
+       "If loading takes too long, press Abort and choose another repository."]
   append lbl "\n([__ "Options"] \/ [__ "Repositories"] ...)"
   ppack [ttk::label .loading.l0 -text $lbl \
-             -wraplength [expr {60*$::cw}] -justify left] \
-      -in .loading.bg -anchor w
+           -wraplength [expr {60*$::cw}] -justify left] \
+    -in .loading.bg -anchor w
 
-  if $::do_track_loading {
-    pack [ttk::frame .loading.tfr] -in .loading.bg -expand 1 -fill x
-    pack [ttk::scrollbar .loading.scroll -command ".loading.tx yview"] \
-        -in .loading.tfr -side right -fill y
-    ppack [text .loading.tx -height 5 -wrap word \
-              -yscrollcommand ".loading.scroll set"] \
-        -in .loading.tfr -expand 1 -fill both
-  }
+  pack [ttk::frame .loading.tfr] -in .loading.bg -expand 1 -fill x
+  pack [ttk::scrollbar .loading.scroll -command ".loading.tx yview"] \
+      -in .loading.tfr -side right -fill y
+  ppack [text .loading.tx -height 5 -wrap word \
+            -yscrollcommand ".loading.scroll set"] \
+      -in .loading.tfr -expand 1 -fill both
   pack [ttk::frame .loading.buttons] -in .loading.bg -expand 1 -fill x
-  if $::do_track_loading {
-    ttk::button .loading.close -text [__ "Close"] -command {end_dlg "" .loading}
-    ppack .loading.close -in .loading.buttons -side right
-    .loading.close configure -state disabled
-  }
+  ttk::button .loading.close -text [__ "Close"] -command {end_dlg "" .loading}
+  ppack .loading.close -in .loading.buttons -side right
+  .loading.close configure -state disabled
   ttk::button .loading.abo -text [__ "Abort"] -command abort_load
   ppack .loading.abo -in .loading.buttons -side right
   wm protocol .loading {cancel_or_destroy .loading.abo .loading}
@@ -803,22 +790,24 @@
   place_dlg .loading .
 } ; # splash_loading
 
+
 proc track_err {} {
-  if $::do_track_loading {
-    set inx0 [llength $::err_log]
-    #puts stderr "track_err: $inx0"
-    read_err_tempfile
+  set inx0 [llength $::err_log]
+  read_err_tempfile
+  .loading.tx configure -state normal
+  for {set i $inx0} {$i < [llength $::err_log]} {incr i} {
+    .loading.tx insert end "[lindex $::err_log $i]\n"
+  }
+  .loading.tx configure -state disabled
+  update idletasks
+  if {![info exists ::loaded]} {
+    after 500 track_err
+  } else {
+    .loading.close state !disabled
+    .loading.abo state disabled
     .loading.tx configure -state normal
-    for {set i $inx0} {$i < [llength $::err_log]} {incr i} {
-      .loading.tx insert end "[lindex $::err_log $i]\n"
-    }
+    .loading.tx insert end [__ "Done loading"]
     .loading.tx configure -state disabled
-    if {![info exists ::loaded]} {
-      after 500 track_err
-    } else {
-      .loading.close state !disabled
-      .loading.abo state disabled
-    }
   }
 }
 
@@ -837,7 +826,7 @@
   splash_loading
 
   unset -nocomplain ::loaded
-  track_err ; # is a no-op unless $::do_track_loading
+  track_err
   if [catch {run_cmd \
     "info --data name,localrev,remoterev,cat-version,category,shortdesc"}] {
     do_debug [get_stacktrace]
@@ -846,9 +835,6 @@
   }
   vwait ::done_waiting
   set ::loaded 1
-  if {! $::do_track_loading} {
-    destroy .loading
-  } ; # otherwise, .loading destroyed by close button of track_err
   set re {^([^,]+),([0-9]+),([0-9]+),([^,]*),([^,]*),(.*)$}
   foreach l $::out_log {
     if [regexp $re $l m nm lrev rrev rcatv catg pdescr] {
@@ -1136,10 +1122,11 @@
 proc repos_commit {} {
   set changes 0
   # set repositories then add pinning if appropriate
-  if {! [regexp {^\s*$} [.tlr.new get]]} {
-    # repository entry widget non-empty: retrieve it
-    if {$::repos(main) ne [.tlr.new get]} {
-      set ::repos(main) [.tlr.new get]
+  set new_repo [forward_slashify [.tlr.new get]]
+  if {! [regexp {^\s*$} $new_repo]} {
+    # repository entry widget non-empty: use it
+    if {$::repos(main) ne $new_repo} {
+      set ::repos(main) $new_repo
       set changes 1
     }
   }
@@ -1587,16 +1574,27 @@
 
 ##### package-related #####
 
-proc update_self_w32 {} {
-  if $::multiuser {
-    set mess \
-        [__ "Close this shell and run in an administrative command-prompt:"]
-  } else {
-    set mess [__ "Close this shell and run in a command-prompt:"]
+### updating
+
+proc update_tlmgr_w32 {} {
+  close_tlmgr
+  # cannot overwrite runscript.dll because it is in use.
+  # move it aside instead and put a copy in its place.
+  set runbk [file join $::instroot "temp" "runbk"]
+  if [file exists $runbk] {
+    file delete -force $runbk
   }
-  set mess [string cat $mess "\n\ntlmgr update --self"]
-  tk_messageBox -message $mess
-  return
+  file mkdir $runbk
+  file rename -force -- "${::instroot}/bin/win32/runscript.dll"  $runbk
+  file copy "$runbk/runscript.dll" "${::instroot}/bin/win32"
+  # tell tlmgr via an environment variable that it was invoked by tlshell
+  set ::env(from_tcl) 1
+  # don't try pipes or capturing, because of
+  # tlmgr's acrobatics with nested command prompts
+  wm iconify .
+  exec -ignorestderr cmd /k "start cmd /k tlmgr update --self"
+  exec $::progname &
+  destroy .
 }
 
 proc update_tlmgr {} {
@@ -1605,7 +1603,7 @@
     return
   }
   if {$::tcl_platform(platform) eq "windows"} {
-    update_self_w32
+    update_tlmgr_w32
     return
   }
   run_cmd "update --self" 1

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2020-02-08 22:17:44 UTC (rev 53719)
@@ -7,6 +7,15 @@
 
 ## [Unreleased]
 
+## [2020-02-08]
+
+### Added
+- `\l_keys_key_str` and `\l_keys_path_str`
+
+### Deprecated
+- `\l_keys_key_tl` and `\l_keys_path_tl`, replaced by `\l_keys_key_str` and
+  `\l_keys_path_str`, respectively
+
 ## [2020-02-03]
 
 ### Changed
@@ -586,7 +595,8 @@
 - Step func­tions have been added for dim vari­ables,
   e.g. `\dim_step_in­line:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-03...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-08...HEAD
+[2020-02-08]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-08
 [2020-02-03]: https://github.com/latex3/latex3/compare/2020-01-31...2020-02-03
 [2020-01-31]: https://github.com/latex3/latex3/compare/2020-01-22...2020-01-31
 [2020-01-22]: https://github.com/latex3/latex3/compare/2020-01-12...2020-01-22

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2020-02-08 22:17:44 UTC (rev 53719)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2020-02-03
+Release 2020-02-08
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -54,7 +54,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2020-02-03}
+\date{Released 2020-02-08}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt	2020-02-08 22:17:44 UTC (rev 53719)
@@ -58,6 +58,8 @@
 \etex_....:D                      2019
 \hbox_unpack_clear:c              2020
 \hbox_unpack_clear:N              2020
+\l_keys_key_tl                    2022
+\l_keys_path_tl                   2022
 \lua_escape_x:n                   2019
 \luatex_...:D                     2019
 \msg_interrupt:nn                 2019

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-02-03}
+\date{Released 2020-02-08}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-02-03}
+\date{Released 2020-02-08}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2020-02-03}
+\date{Released 2020-02-08}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2020-02-03}
+\date{Released 2020-02-08}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2020-02-08 22:17:44 UTC (rev 53719)
@@ -7,6 +7,12 @@
 
 ## [Unreleased]
 
+## [2020-02-08]
+
+### Changed
+- Document that `\CurrentOption` is available and should be used in
+  `l3keys2e`
+
 ## [2020-02-03]
 
 ### Fixed
@@ -65,7 +71,8 @@
 - Switch to ISO date format
 - Improve cross-module use of internal functions
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-03...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-02-08...HEAD
+[2020-02-08]: https://github.com/latex3/latex3/compare/2020-02-03...2020-02-08
 [2020-02-03]: https://github.com/latex3/latex3/compare/2020-01-12...2020-02-03
 [2020-01-12]: https://github.com/latex3/latex3/compare/2019-10-11...2020-01-12
 [2019-10-11]: https://github.com/latex3/latex3/compare/2019-05-28...2019-10-11

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2020-02-08 22:17:44 UTC (rev 53719)
@@ -1,7 +1,7 @@
 LaTeX3 High-Level Concepts
 ==========================
 
-Release 2020-02-03
+Release 2020-02-08
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -24,7 +24,7 @@
 %
 %<*driver|generic|package|2ekernel>
 %</driver|generic|package|2ekernel>
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 %<*driver>
 \documentclass[full]{l3doc}
 \usepackage{graphicx}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -2,7 +2,7 @@
 %
 %% File: l3basics.dtx
 %
-% Copyright (C) 1990-2019 The LaTeX3 project
+% Copyright (C) 1990-2020 The LaTeX3 Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -969,7 +969,7 @@
 %<@@=keys>
   \__kernel_patch:nnn
     {
-      \cs_if_exist:cF { \c_@@_code_root_tl #1 }
+      \cs_if_exist:cF { \c_@@_code_root_str #1 }
         { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
     }
     { }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -79,7 +79,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -639,8 +639,8 @@
 %   later.
 % \end{function}
 %
-% \begin{variable}[updated = 2015-07-14]
-%   {\l_keys_key_tl, \l_keys_path_tl, \l_keys_value_tl}
+% \begin{variable}[updated = 2020-02-08]
+%   {\l_keys_key_str, \l_keys_path_str, \l_keys_value_tl}
 %   For each key processed, information of the full \emph{path} of the
 %   key, the \emph{name} of the key and the \emph{value} of the key is
 %   available within three token list variables. These may be used within
@@ -661,13 +661,12 @@
 %     \keys_set:nn { mymodule } { subset  / key-a = some-value }
 %   \end{verbatim}
 %   has path \texttt{mymodule/subset/key-a}. This information is stored in
-%   \cs{l_keys_path_tl}, and will have been processed by \cs{tl_to_str:n}.
+%   \cs{l_keys_path_str}.
 %
 %   The \emph{name} of the key is the part of the path after the last
 %   \texttt{/}, and thus is not unique. In the preceding examples, both keys
 %   have name \texttt{key-a} despite having different paths.  This information
-%   is stored in \cs{l_keys_key_tl}, and will have been processed by
-%   \cs{tl_to_str:n}.
+%   is stored in \cs{l_keys_key_str}.
 % \end{variable}
 %
 % \section{Handling of unknown keys}
@@ -681,7 +680,7 @@
 %   \keys_define:nn { mymodule }
 %     {
 %       unknown .code:n =
-%         You~tried~to~set~key~'\l_keys_key_tl'~to~'#1'.
+%         You~tried~to~set~key~'\l_keys_key_str'~to~'#1'.
 %     }
 % \end{verbatim}
 %
@@ -1169,28 +1168,28 @@
 %
 % \begin{variable}
 %   {
-%     \c_@@_code_root_tl    ,
-%     \c_@@_default_root_tl ,
-%     \c_@@_groups_root_tl  ,
-%     \c_@@_inherit_root_tl  ,
-%     \c_@@_type_root_tl    ,
-%     \c_@@_validate_root_tl
+%     \c_@@_code_root_str    ,
+%     \c_@@_default_root_str ,
+%     \c_@@_groups_root_str  ,
+%     \c_@@_inherit_root_str  ,
+%     \c_@@_type_root_str    ,
+%     \c_@@_validate_root_str
 %   }
 %   Various storage areas for the different data which make up keys.
 %    \begin{macrocode}
-\tl_const:Nn \c_@@_code_root_tl     { key~code~>~ }
-\tl_const:Nn \c_@@_default_root_tl  { key~default~>~ }
-\tl_const:Nn \c_@@_groups_root_tl   { key~groups~>~ }
-\tl_const:Nn \c_@@_inherit_root_tl  { key~inherit~>~ }
-\tl_const:Nn \c_@@_type_root_tl     { key~type~>~ }
-\tl_const:Nn \c_@@_validate_root_tl { key~validate~>~ }
+\str_const:Nn \c_@@_code_root_str     { key~code~>~ }
+\str_const:Nn \c_@@_default_root_str  { key~default~>~ }
+\str_const:Nn \c_@@_groups_root_str   { key~groups~>~ }
+\str_const:Nn \c_@@_inherit_root_str  { key~inherit~>~ }
+\str_const:Nn \c_@@_type_root_str     { key~type~>~ }
+\str_const:Nn \c_@@_validate_root_str { key~validate~>~ }
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\c_@@_props_root_tl}
+% \begin{variable}{\c_@@_props_root_str}
 %   The prefix for storing properties.
 %    \begin{macrocode}
-\tl_const:Nn \c_@@_props_root_tl { key~prop~>~ }
+\str_const:Nn \c_@@_props_root_str { key~prop~>~ }
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1212,17 +1211,19 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_keys_key_tl}
-%   The name of a key itself: needed when setting keys.
+% \begin{variable}{\l_keys_key_str, \l_keys_key_tl}
+%   The name of a key itself: needed when setting keys. The |tl| version
+%   is deprecated but has to be handled manually.
 %    \begin{macrocode}
+\str_new:N \l_keys_key_str
 \tl_new:N \l_keys_key_tl
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_@@_module_tl}
+% \begin{variable}{\l_@@_module_str}
 %   The module for an entire set of keys.
 %    \begin{macrocode}
-\tl_new:N \l_@@_module_tl
+\str_new:N \l_@@_module_str
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1241,22 +1242,25 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_keys_path_tl}
+% \begin{variable}{\l_keys_path_str, \l_keys_path_tl}
 %   The \enquote{path} of the current key is stored here: this is
-%   available to the programmer and so is public.
+%   available to the programmer and so is public. The older version is
+%   deprecated but has to be handled manually.
 %    \begin{macrocode}
+\str_new:N \l_keys_path_str
 \tl_new:N \l_keys_path_tl
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_@@_inherit_tl}
+% \begin{variable}{\l_@@_inherit_str}
 %    \begin{macrocode}
-\tl_new:N \l_@@_inherit_tl
+\str_new:N \l_@@_inherit_str
 %    \end{macrocode}
 % \end{variable}
 %
 % \begin{variable}{\l_@@_relative_tl}
-%   The relative path for passing keys back to the user.
+%   The relative path for passing keys back to the user. As this can
+%   be explicitly no-value, it must be a token list.
 %    \begin{macrocode}
 \tl_new:N \l_@@_relative_tl
 \tl_set:Nn \l_@@_relative_tl { \q_no_value }
@@ -1263,11 +1267,11 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_@@_property_tl}
+% \begin{variable}{\l_@@_property_str}
 %   The \enquote{property} begin set for a key at definition time is
 %   stored here.
 %    \begin{macrocode}
-\tl_new:N \l_@@_property_tl
+\str_new:N \l_@@_property_str
 %    \end{macrocode}
 % \end{variable}
 %
@@ -1321,12 +1325,12 @@
 %   removing any leading |/| (which is not needed here).
 %    \begin{macrocode}
 \cs_new_protected:Npn \keys_define:nn
-  { \@@_define:onn \l_@@_module_tl }
+  { \@@_define:onn \l_@@_module_str }
 \cs_new_protected:Npn \@@_define:nnn #1#2#3
   {
-    \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} }
+    \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} }
     \keyval_parse:NNn \@@_define:n \@@_define:nn {#3}
-    \tl_set:Nn \l_@@_module_tl {#1}
+    \str_set:Nn \l_@@_module_str {#1}
   }
 \cs_generate_variant:Nn \@@_define:nnn { o }
 %    \end{macrocode}
@@ -1354,14 +1358,13 @@
 \cs_new_protected:Npn \@@_define_aux:nn #1#2
   {
     \@@_property_find:n {#1}
-    \cs_if_exist:cTF { \c_@@_props_root_tl \l_@@_property_tl }
-      { \@@_define_code:n {#2}
-      }
+    \cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str }
+      { \@@_define_code:n {#2} }
       {
-         \tl_if_empty:NF \l_@@_property_tl
+         \str_if_empty:NF \l_@@_property_str
            {
              \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
-              { \l_@@_property_tl } { \l_keys_path_tl }
+              { \l_@@_property_str } { \l_keys_path_str }
            }
       }
   }
@@ -1378,8 +1381,8 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_property_find:n #1
   {
-    \tl_set:Nx \l_@@_property_tl { \@@_trim_spaces:n {#1} }
-    \exp_after:wN \@@_property_find:w \l_@@_property_tl . .
+    \str_set:Nx \l_@@_property_str { \@@_trim_spaces:n {#1} }
+    \exp_after:wN \@@_property_find:w \l_@@_property_str . .
       \q_stop {#1}
   }
 \cs_new_protected:Npn \@@_property_find:w #1 . #2 . #3 \q_stop #4
@@ -1386,24 +1389,25 @@
   {
     \tl_if_blank:nTF {#3}
       {
-        \tl_clear:N \l_@@_property_tl
+        \str_clear:N \l_@@_property_str
         \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
       }
       {
         \str_if_eq:nnTF {#3} { . }
           {
-            \tl_set:Nx \l_keys_path_tl
+            \str_set:Nx \l_keys_path_str
               {
-                \tl_if_empty:NF \l_@@_module_tl
-                  { \l_@@_module_tl  / }
+                \str_if_empty:NF \l_@@_module_str
+                  { \l_@@_module_str  / }
                \tl_trim_spaces:n {#1}
               }
-            \tl_set:Nn \l_@@_property_tl { . #2 }
+            \str_set:Nn \l_@@_property_str { . #2 }
           }
           {
-            \tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / #1 . #2 }
+            \str_set:Nx \l_keys_path_str { \l_@@_module_str / #1 . #2 }
             \@@_property_search:w #3 \q_stop
           }
+        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
       }
   }
 \cs_new_protected:Npn \@@_property_search:w #1 . #2 \q_stop
@@ -1410,11 +1414,11 @@
   {
     \str_if_eq:nnTF {#2} { . }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl }
-        \tl_set:Nn \l_@@_property_tl { . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str }
+        \str_set:Nn \l_@@_property_str { . #1 }
       }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
         \@@_property_search:w #2 \q_stop
       }
   }
@@ -1435,15 +1439,15 @@
     \bool_if:NTF \l_@@_no_value_bool
       {
         \exp_after:wN \@@_define_code:w
-          \l_@@_property_tl \q_stop
-          { \use:c { \c_@@_props_root_tl \l_@@_property_tl } }
+          \l_@@_property_str \q_stop
+          { \use:c { \c_@@_props_root_str \l_@@_property_str } }
           {
             \__kernel_msg_error:nnxx { kernel }
-              { key-property-requires-value } { \l_@@_property_tl }
-              { \l_keys_path_tl }
+              { key-property-requires-value } { \l_@@_property_str }
+              { \l_keys_path_str }
             }
       }
-      { \use:c { \c_@@_props_root_tl \l_@@_property_tl } {#1} }
+      { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
   }
 \exp_last_unbraced:NNNNo
   \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \q_stop
@@ -1463,14 +1467,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \@@_choice_make:
-    \@@_cmd_set:nx { \l_keys_path_tl / true }
+    \@@_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \@@_cmd_set:nx { \l_keys_path_tl / false }
+    \@@_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \@@_cmd_set:nn { \l_keys_path_tl / unknown }
+    \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \@@_default_set:n { true }
   }
@@ -1485,14 +1489,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \@@_choice_make:
-    \@@_cmd_set:nx { \l_keys_path_tl / true }
+    \@@_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \@@_cmd_set:nx { \l_keys_path_tl / false }
+    \@@_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \@@_cmd_set:nn { \l_keys_path_tl / unknown }
+    \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \@@_default_set:n { true }
   }
@@ -1514,14 +1518,14 @@
 \cs_new_protected:Npn \@@_choice_make:N #1
   {
     \cs_if_exist:cTF
-      { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl }
+      { \c_@@_type_root_str \@@_parent:o \l_keys_path_str }
       {
         \str_if_eq:vnTF
-          { \c_@@_type_root_tl \@@_parent:o \l_keys_path_tl }
+          { \c_@@_type_root_str \@@_parent:o \l_keys_path_str }
           { choice }
           {
             \__kernel_msg_error:nnxx { kernel } { nested-choice-key }
-              { \l_keys_path_tl } { \@@_parent:o \l_keys_path_tl }
+              { \l_keys_path_tl } { \@@_parent:o \l_keys_path_str }
           }
           { \@@_choice_make_aux:N #1 }
       }
@@ -1529,13 +1533,13 @@
   }
 \cs_new_protected:Npn \@@_choice_make_aux:N #1
   {
-    \cs_set_nopar:cpn { \c_@@_type_root_tl \l_keys_path_tl }
+    \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
       { choice }
-    \@@_cmd_set:nn { \l_keys_path_tl } { #1 {##1} }
-    \@@_cmd_set:nn { \l_keys_path_tl / unknown }
+    \@@_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+    \@@_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
-          { \l_keys_path_tl } {##1}
+          { \l_keys_path_str } {##1}
       }
   }
 %    \end{macrocode}
@@ -1560,7 +1564,7 @@
       {
         \int_incr:N \l_keys_choice_int
         \@@_cmd_set:nx
-          { \l_keys_path_tl / \@@_trim_spaces:n {##1} }
+          { \l_keys_path_str / \@@_trim_spaces:n {##1} }
           {
             \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1}
             \int_set:Nn \exp_not:N \l_keys_choice_int
@@ -1579,7 +1583,7 @@
 %   defining a new key, then saves the code.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_cmd_set:nn #1#2
-  { \cs_set_protected:cpn { \c_@@_code_root_tl #1 } ##1 {#2} }
+  { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
 \cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
 %    \end{macrocode}
 % \end{macro}
@@ -1593,12 +1597,12 @@
     \tl_if_empty:nTF {#1}
       {
         \cs_set_eq:cN
-          { \c_@@_default_root_tl \l_keys_path_tl }
+          { \c_@@_default_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
         \cs_set_nopar:cpx
-          { \c_@@_default_root_tl \l_keys_path_tl }
+          { \c_@@_default_root_str \l_keys_path_str }
           { \exp_not:n {#1} }
         \@@_value_requirement:nn { required } { false }
       }
@@ -1618,11 +1622,11 @@
     \clist_set:Nn \l_@@_groups_clist {#1}
     \clist_if_empty:NTF \l_@@_groups_clist
       {
-        \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
-        \cs_set_eq:cN { \c_@@_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str }
           \l_@@_groups_clist
       }
   }
@@ -1636,7 +1640,7 @@
 \cs_new_protected:Npn \@@_inherit:n #1
   {
     \@@_undefine:
-    \cs_set_nopar:cpn { \c_@@_inherit_root_tl \l_keys_path_tl } {#1}
+    \cs_set_nopar:cpn { \c_@@_inherit_root_str \l_keys_path_str } {#1}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1647,11 +1651,11 @@
 \cs_new_protected:Npn \@@_initialise:n #1
   {
     \cs_if_exist:cTF
-      { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+      { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
       { \@@_execute_inherit: }
       {
-        \tl_clear:N \l_@@_inherit_tl
-        \cs_if_exist_use:cT { \c_@@_code_root_tl \l_keys_path_tl } { {#1} }
+        \str_clear:N \l_@@_inherit_str
+        \cs_if_exist_use:cT { \c_@@_code_root_str \l_keys_path_str } { {#1} }
       }
   }
 %    \end{macrocode}
@@ -1663,14 +1667,14 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_meta_make:n #1
   {
-    \@@_cmd_set:Vo \l_keys_path_tl
+    \@@_cmd_set:Vo \l_keys_path_str
       {
         \exp_after:wN \keys_set:nn
-        \exp_after:wN { \l_@@_module_tl } {#1}
+        \exp_after:wN { \l_@@_module_str } {#1}
       }
   }
 \cs_new_protected:Npn \@@_meta_make:nn #1#2
-  { \@@_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } }
+  { \@@_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1684,8 +1688,8 @@
     \exp_after:wN \@@_find_key_module:NNw
       \exp_after:wN \l_@@_tmpa_tl
       \exp_after:wN \l_@@_tmpb_tl
-      \l_keys_path_tl / \q_stop
-    \@@_cmd_set:nx { \l_keys_path_tl }
+      \l_keys_path_str / \q_stop
+    \@@_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -1707,7 +1711,7 @@
       { code , default , groups , inherit , type , validate }
       {
         \cs_set_eq:cN
-          { \tl_use:c { c_@@_ ##1 _root_tl } \l_keys_path_tl }
+          { \tl_use:c { c_@@_ ##1 _root_str } \l_keys_path_str }
           \tex_undefined:D
       }
   }
@@ -1730,17 +1734,17 @@
         { true }
           {
             \cs_set_eq:cc
-              { \c_@@_validate_root_tl \l_keys_path_tl }
+              { \c_@@_validate_root_str \l_keys_path_str }
               { @@_validate_ #1 : }
           }
         { false }
           {
             \cs_if_eq:ccT
-              { \c_@@_validate_root_tl \l_keys_path_tl }
+              { \c_@@_validate_root_str \l_keys_path_str }
               { @@_validate_ #1 : }
               {
                 \cs_set_eq:cN
-                  { \c_@@_validate_root_tl \l_keys_path_tl }
+                  { \c_@@_validate_root_str \l_keys_path_str }
                   \tex_undefined:D
               }
           }
@@ -1756,7 +1760,7 @@
     \bool_if:NF \l_@@_no_value_bool
       {
         \__kernel_msg_error:nnxx { kernel } { value-forbidden }
-          { \l_keys_path_tl } { \l_keys_value_tl }
+          { \l_keys_path_str } { \l_keys_value_tl }
         \@@_validate_cleanup:w
       }
   }
@@ -1765,7 +1769,7 @@
     \bool_if:NT \l_@@_no_value_bool
       {
         \__kernel_msg_error:nnx { kernel } { value-required }
-          { \l_keys_path_tl }
+          { \l_keys_path_str }
         \@@_validate_cleanup:w
       }
   }
@@ -1783,7 +1787,7 @@
 \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \@@_cmd_set:nx { \l_keys_path_tl }
+    \@@_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -1816,13 +1820,13 @@
 % \begin{macro}{.bool_gset:N, .bool_gset:c}
 %   One function for this.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:N } #1
   { \@@_bool_set:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_set:c } #1
   { \@@_bool_set:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:N } #1
   { \@@_bool_set:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset:c } #1
   { \@@_bool_set:cn {#1} { g } }
 %    \end{macrocode}
 % \end{macro}
@@ -1832,13 +1836,13 @@
 % \begin{macro}{.bool_gset_inverse:N, .bool_gset_inverse:c}
 %   One function for this.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:N } #1
   { \@@_bool_set_inverse:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_set_inverse:c } #1
   { \@@_bool_set_inverse:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:N } #1
   { \@@_bool_set_inverse:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .bool_gset_inverse:c } #1
   { \@@_bool_set_inverse:cn {#1} { g } }
 %    \end{macrocode}
 % \end{macro}
@@ -1848,7 +1852,7 @@
 %   Making a choice is handled internally, as it is also needed by
 %   \texttt{.generate_choices:n}.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .choice: }
+\cs_new_protected:cpn { \c_@@_props_root_str .choice: }
   { \@@_choice_make: }
 %    \end{macrocode}
 % \end{macro}
@@ -1859,13 +1863,13 @@
 %   Here, |#1| consists of two separate
 %   arguments, hence the slightly odd-looking implementation.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .choices:nn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .choices:nn } #1
   { \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .choices:Vn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1
   { \exp_args:NV \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .choices:on } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1
   { \exp_args:No \@@_choices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .choices:xn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1
   { \exp_args:Nx \@@_choices_make:nn #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -1874,8 +1878,8 @@
 %   Creating code is simply a case of passing through to the underlying
 %   \texttt{set} function.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .code:n } #1
-  { \@@_cmd_set:nn { \l_keys_path_tl } {#1} }
+\cs_new_protected:cpn { \c_@@_props_root_str .code:n } #1
+  { \@@_cmd_set:nn { \l_keys_path_str } {#1} }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1882,13 +1886,13 @@
 % \begin{macro}{.clist_set:N, .clist_set:c}
 % \begin{macro}{.clist_gset:N, .clist_gset:c}
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:N } #1
   { \@@_variable_set:NnnN #1 { clist } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .clist_set:c } #1
   { \@@_variable_set:cnnN {#1} { clist } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:N } #1
   { \@@_variable_set:NnnN #1 { clist } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .clist_gset:c } #1
   { \@@_variable_set:cnnN {#1} { clist } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -1897,13 +1901,13 @@
 % \begin{macro}{.default:n, .default:V, .default:o, .default:x}
 %   Expansion is left to the internal functions.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .default:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1
   { \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .default:V } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1
   { \exp_args:NV \@@_default_set:n #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .default:o } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1
   { \exp_args:No \@@_default_set:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .default:x } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1
   { \exp_args:Nx \@@_default_set:n {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -1912,13 +1916,13 @@
 % \begin{macro}{.dim_gset:N, .dim_gset:c}
 % Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:N } #1
   { \@@_variable_set_required:NnnN #1 { dim } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .dim_set:c } #1
   { \@@_variable_set_required:cnnN {#1} { dim } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:N } #1
   { \@@_variable_set_required:NnnN #1 { dim } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .dim_gset:c } #1
   { \@@_variable_set_required:cnnN {#1} { dim } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -1928,13 +1932,13 @@
 % \begin{macro}{.fp_gset:N, .fp_gset:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:N } #1
   { \@@_variable_set_required:NnnN #1 { fp } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .fp_set:c } #1
   { \@@_variable_set_required:cnnN {#1} { fp } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:N } #1
   { \@@_variable_set_required:NnnN #1 { fp } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .fp_gset:c } #1
   { \@@_variable_set_required:cnnN {#1} { fp } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -1943,7 +1947,7 @@
 % \begin{macro}{.groups:n}
 %   A single property to create groups of keys.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .groups:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .groups:n } #1
   { \@@_groups_set:n {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -1951,7 +1955,7 @@
 % \begin{macro}{.inherit:n}
 %   Nothing complex: only one variant at the moment!
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .inherit:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .inherit:n } #1
   { \@@_inherit:n {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -1959,13 +1963,13 @@
 % \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x}
 %   The standard hand-off approach.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .initial:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1
   { \@@_initialise:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .initial:V } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1
   { \exp_args:NV \@@_initialise:n #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .initial:o } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1
   { \exp_args:No \@@_initialise:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .initial:x } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1
   { \exp_args:Nx \@@_initialise:n {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -1974,13 +1978,13 @@
 % \begin{macro}{.int_gset:N, .int_gset:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .int_set:N } #1
   { \@@_variable_set_required:NnnN #1 { int } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .int_set:c } #1
   { \@@_variable_set_required:cnnN {#1} { int } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:N } #1
   { \@@_variable_set_required:NnnN #1 { int } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .int_gset:c } #1
   { \@@_variable_set_required:cnnN {#1} { int } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -1989,7 +1993,7 @@
 % \begin{macro}{.meta:n}
 %   Making a meta is handled internally.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .meta:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .meta:n } #1
   { \@@_meta_make:n {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -1998,7 +2002,7 @@
 %   Meta with path: potentially lots of variants, but for the moment
 %   no so many defined.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .meta:nn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .meta:nn } #1
   { \@@_meta_make:nn #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -2012,15 +2016,15 @@
 %   The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but
 %   where more than one choice is allowed.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .multichoice: }
+\cs_new_protected:cpn { \c_@@_props_root_str .multichoice: }
   { \@@_multichoice_make: }
-\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:nn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:nn } #1
   { \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:Vn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1
   { \exp_args:NV \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:on } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1
   { \exp_args:No \@@_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:xn } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1
   { \exp_args:Nx \@@_multichoices_make:nn #1 }
 %    \end{macrocode}
 % \end{macro}
@@ -2029,13 +2033,13 @@
 % \begin{macro}{.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:N } #1
   { \@@_variable_set_required:NnnN #1 { muskip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .muskip_set:c } #1
   { \@@_variable_set_required:cnnN {#1} { muskip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:N } #1
   { \@@_variable_set_required:NnnN #1 { muskip } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .muskip_gset:c } #1
   { \@@_variable_set_required:cnnN {#1} { muskip } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -2043,13 +2047,13 @@
 % \begin{macro}{.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:N } #1
   { \@@_prop_put:Nn #1 { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .prop_put:c } #1
   { \@@_prop_put:cn {#1} { } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:N } #1
   { \@@_prop_put:Nn #1 { g } }
-\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .prop_gput:c } #1
   { \@@_prop_put:cn {#1} { g } }
 %    \end{macrocode}
 % \end{macro}
@@ -2058,13 +2062,13 @@
 % \begin{macro}{.skip_gset:N, .skip_gset:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:N } #1
   { \@@_variable_set_required:NnnN #1 { skip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .skip_set:c } #1
   { \@@_variable_set_required:cnnN {#1} { skip } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:N } #1
   { \@@_variable_set_required:NnnN #1 { skip } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .skip_gset:c } #1
   { \@@_variable_set_required:cnnN {#1} { skip } { g } n }
 %    \end{macrocode}
 % \end{macro}
@@ -2076,21 +2080,21 @@
 % \begin{macro}{.tl_gset_x:N, .tl_gset_x:c}
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1
   { \@@_variable_set:NnnN #1 { tl } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
   { \@@_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1
   { \@@_variable_set:NnnN #1 { tl } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { g } n }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:N } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
   { \@@_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:c } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
   { \@@_variable_set:cnnN {#1} { tl } { g } x }
 %    \end{macrocode}
 % \end{macro}
@@ -2101,7 +2105,7 @@
 % \begin{macro}{.undefine:}
 %   Another simple wrapper.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .undefine: }
+\cs_new_protected:cpn { \c_@@_props_root_str .undefine: }
   { \@@_undefine: }
 %    \end{macrocode}
 % \end{macro}
@@ -2110,9 +2114,9 @@
 % \begin{macro}{.value_required:n}
 %   These are very similar, so both call the same function.
 %    \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_tl .value_forbidden:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .value_forbidden:n } #1
   { \@@_value_requirement:nn { forbidden } {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .value_required:n } #1
+\cs_new_protected:cpn { \c_@@_props_root_str .value_required:n } #1
   { \@@_value_requirement:nn { required } {#1} }
 %    \end{macrocode}
 % \end{macro}
@@ -2150,12 +2154,12 @@
   }
 \cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
 \cs_new_protected:Npn \@@_set:nn #1#2
-  { \exp_args:No \@@_set:nnn \l_@@_module_tl {#1} {#2} }
+  { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} }
 \cs_new_protected:Npn \@@_set:nnn #1#2#3
   {
-    \tl_set:Nx \l_@@_module_tl { \@@_trim_spaces:n {#2} }
+    \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} }
     \keyval_parse:NNn \@@_set_keyval:n \@@_set_keyval:nn {#3}
-    \tl_set:Nn \l_@@_module_tl {#1}
+    \str_set:Nn \l_@@_module_str {#1}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2354,12 +2358,12 @@
 \cs_new_protected:Npn \@@_set_keyval:n #1
   {
     \bool_set_true:N \l_@@_no_value_bool
-    \@@_set_keyval:onn \l_@@_module_tl {#1} { }
+    \@@_set_keyval:onn \l_@@_module_str {#1} { }
   }
 \cs_new_protected:Npn \@@_set_keyval:nn #1#2
   {
     \bool_set_false:N \l_@@_no_value_bool
-    \@@_set_keyval:onn \l_@@_module_tl {#1} {#2}
+    \@@_set_keyval:onn \l_@@_module_str {#1} {#2}
   }
 %    \end{macrocode}
 %   The key path here can be fully defined, after which there is a search
@@ -2370,33 +2374,34 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3
   {
-    \tl_set:Nx \l_keys_path_tl
+    \tl_set:Nx \l_keys_path_str
       {
         \tl_if_blank:nF {#1}
           { #1 / }
         \@@_trim_spaces:n {#2}
       }
-    \tl_clear:N \l_@@_module_tl
-    \tl_clear:N \l_@@_inherit_tl
+    \str_clear:N \l_@@_module_str
+    \str_clear:N \l_@@_inherit_str
     \exp_after:wN \@@_find_key_module:NNw
-      \exp_after:wN \l_@@_module_tl
-      \exp_after:wN \l_keys_key_tl
-      \l_keys_path_tl / \q_stop
+      \exp_after:wN \l_@@_module_str
+      \exp_after:wN \l_keys_key_str
+      \l_keys_path_str / \q_stop
+    \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \@@_value_or_default:n {#3}
     \bool_if:NTF \l_@@_selective_bool
       { \@@_set_selective: }
       { \@@_execute: }
-    \tl_set:Nn \l_@@_module_tl {#1}
+    \str_set:Nn \l_@@_module_str {#1}
   }
 \cs_generate_variant:Nn \@@_set_keyval:nnn { o }
 \cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \q_stop
   {
     \tl_if_blank:nTF {#4}
-      { \tl_set:Nn #2 {#3} }
+      { \str_set:Nn #2 {#3} }
       {
-        \tl_put_right:Nx #1
+        \str_put_right:Nx #1
           {
-            \tl_if_empty:NF #1 { / }
+            \str_if_empty:NF #1 { / }
             #3
           }
         \@@_find_key_module:NNw #1#2 #4 \q_stop
@@ -2410,10 +2415,10 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_set_selective:
   {
-    \cs_if_exist:cTF { \c_@@_groups_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c_@@_groups_root_str \l_keys_path_str }
       {
         \clist_set_eq:Nc \l_@@_groups_clist
-          { \c_@@_groups_root_tl \l_keys_path_tl }
+          { \c_@@_groups_root_str \l_keys_path_str }
         \@@_check_groups:
       }
       {
@@ -2469,16 +2474,16 @@
   {
     \bool_if:NTF \l_@@_no_value_bool
       {
-        \cs_if_exist:cTF { \c_@@_default_root_tl \l_keys_path_tl }
+        \cs_if_exist:cTF { \c_@@_default_root_str \l_keys_path_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c_@@_default_root_tl \l_keys_path_tl }
+              { \c_@@_default_root_str \l_keys_path_str }
           }
           {
             \tl_clear:N \l_keys_value_tl
             \cs_if_exist:cT
-              { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+              { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
               { \@@_default_inherit: }
           }
       }
@@ -2487,14 +2492,14 @@
 \cs_new_protected:Npn \@@_default_inherit:
   {
     \clist_map_inline:cn
-      { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+      { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c_@@_default_root_tl ##1 / \l_keys_key_tl }
+          { \c_@@_default_root_str ##1 / \l_keys_key_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c_@@_default_root_tl ##1 / \l_keys_key_tl }
+              { \c_@@_default_root_str ##1 / \l_keys_key_str }
             \clist_map_break:
           }
       }
@@ -2514,15 +2519,15 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_execute:
   {
-    \cs_if_exist:cTF { \c_@@_code_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c_@@_code_root_str \l_keys_path_str }
       {
-        \cs_if_exist_use:c { \c_@@_validate_root_tl \l_keys_path_tl }
-        \cs:w \c_@@_code_root_tl \l_keys_path_tl \exp_after:wN \cs_end:
+        \cs_if_exist_use:c { \c_@@_validate_root_str \l_keys_path_str }
+        \cs:w \c_@@_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {
         \cs_if_exist:cTF
-          { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+          { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
           { \@@_execute_inherit: }
           { \@@_execute_unknown: }
       }
@@ -2535,14 +2540,14 @@
 \cs_new_protected:Npn \@@_execute_inherit:
   {
     \clist_map_inline:cn
-      { \c_@@_inherit_root_tl \@@_parent:o \l_keys_path_tl }
+      { \c_@@_inherit_root_str \@@_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c_@@_code_root_tl ##1 / \l_keys_key_tl }
+          { \c_@@_code_root_str ##1 / \l_keys_key_str }
           {
-            \tl_set:Nn \l_@@_inherit_tl {##1}
-            \cs_if_exist_use:c { \c_@@_validate_root_tl ##1 / \l_keys_key_tl }
-            \cs:w \c_@@_code_root_tl ##1 / \l_keys_key_tl
+            \str_set:Nn \l_@@_inherit_str {##1}
+            \cs_if_exist_use:c { \c_@@_validate_root_str ##1 / \l_keys_key_str }
+            \cs:w \c_@@_code_root_str ##1 / \l_keys_key_str
               \exp_after:wN \cs_end: \exp_after:wN
               { \l_keys_value_tl }
             \clist_map_break:n { \use_none:n }
@@ -2556,22 +2561,22 @@
       { \@@_store_unused: }
       {
         \cs_if_exist:cTF
-          { \c_@@_code_root_tl \l_@@_module_tl / unknown }
+          { \c_@@_code_root_str \l_@@_module_str / unknown }
           {
-            \cs:w \c_@@_code_root_tl \l_@@_module_tl / unknown
+            \cs:w \c_@@_code_root_str \l_@@_module_str / unknown
               \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
           }
           {
             \__kernel_msg_error:nnxx { kernel } { key-unknown }
-             { \l_keys_path_tl } { \l_@@_module_tl }
+             { \l_keys_path_str } { \l_@@_module_str }
           }
       }
   }
 \cs_new:Npn \@@_execute:nn #1#2
   {
-    \cs_if_exist:cTF { \c_@@_code_root_tl #1 }
+    \cs_if_exist:cTF { \c_@@_code_root_str #1 }
       {
-        \cs:w \c_@@_code_root_tl #1 \exp_after:wN \cs_end:
+        \cs:w \c_@@_code_root_str #1 \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {#2}
@@ -2589,7 +2594,7 @@
       {
         \clist_put_right:Nx \l_@@_unused_clist
           {
-            \exp_not:o \l_keys_key_tl
+            \exp_not:o \l_keys_key_str
             \bool_if:NF \l_@@_no_value_bool
               { = { \exp_not:o \l_keys_value_tl } }
           }
@@ -2599,7 +2604,7 @@
           {
             \clist_put_right:Nx \l_@@_unused_clist
               {
-                \exp_not:o \l_keys_path_tl
+                \exp_not:o \l_keys_path_str
                 \bool_if:NF \l_@@_no_value_bool
                   { = { \exp_not:o \l_keys_value_tl } }
               }
@@ -2622,7 +2627,7 @@
           \tl_if_blank:nF {##1}
             {
               \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path }
-                \l_keys_path_tl
+                \l_keys_path_str
                 \l_@@_relative_tl
             }
           \clist_put_right:Nx \l_@@_unused_clist
@@ -2634,7 +2639,7 @@
         }
     \use:x
       {
-        \@@_store_unused:w \l_keys_path_tl
+        \@@_store_unused:w \l_keys_path_str
           \l_@@_relative_tl / \l_@@_relative_tl /
           \exp_not:N \q_stop
       }
@@ -2655,18 +2660,18 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_choice_find:n #1
   {
-    \tl_if_empty:NTF \l_@@_inherit_tl
-      { \@@_choice_find:nn { \l_keys_path_tl } {#1} }
+    \str_if_empty:NTF \l_@@_inherit_str
+      { \@@_choice_find:nn { \l_keys_path_str } {#1} }
       {
         \@@_choice_find:nn
-          { \l_@@_inherit_tl / \l_keys_key_tl } {#1}
+          { \l_@@_inherit_str / \l_keys_key_str } {#1}
       }
   }
 \cs_new:Npn \@@_choice_find:nn #1#2
   {
-    \cs_if_exist:cTF { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} }
-      { \use:c { \c_@@_code_root_tl #1 / \@@_trim_spaces:n {#2} } {#2} }
-      { \use:c { \c_@@_code_root_tl #1 / unknown } {#2} }
+    \cs_if_exist:cTF { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} }
+      { \use:c { \c_@@_code_root_str #1 / \@@_trim_spaces:n {#2} } {#2} }
+      { \use:c { \c_@@_code_root_str #1 / unknown } {#2} }
   }
 \cs_new:Npn \@@_multichoice_find:n #1
   { \clist_map_function:nN {#1} \@@_choice_find:n }
@@ -2742,7 +2747,7 @@
 \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 } }
+      { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -2756,7 +2761,7 @@
   { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c_@@_code_root_tl \@@_trim_spaces:n { #1 / #2 / #3 } }
+      { \c_@@_code_root_str \@@_trim_spaces:n { #1 / #2 / #3 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -2781,7 +2786,7 @@
               {
                 \exp_args:Nc \cs_replacement_spec:N
                   {
-                    \c_@@_code_root_tl
+                    \c_@@_code_root_str
                     \@@_trim_spaces:n { #2 / #3 }
                   }
               }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -25,8 +25,8 @@
 %<*driver|package>
 % The version of expl3 required is tested as early as possible, as
 % some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2018/02/21]
-%<package>\@ifpackagelater{expl3}{2018/02/21}
+\RequirePackage{expl3}[2020/02/08]
+%<package>\@ifpackagelater{expl3}{2020/02/08}
 %<package>  {}
 %<package>  {%
 %<package>    \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -62,7 +62,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -118,6 +118,12 @@
 %   \LaTeXe{} kernel function \cs{ProcessOptions}).
 % \end{function}
 %
+% When passing unknown keys to other packages, the standard \LaTeX{}
+% \tn{CurrentOption} command is available and should be used. In contrast
+% to \cs{l_keys_key_str}, \cs{CurrentOption} is a token list and thus retains
+% category code information. Depending on how options are used by third-party
+% packages, this may be essential for the option to be recognised.
+%
 %\end{documentation}
 %
 %\begin{implementation}
@@ -133,7 +139,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2020-02-03}{}
+\ProvidesExplPackage{l3keys2e}{2020-02-08}{}
   {LaTeX2e option processing using LaTeX3 keys}
 %    \end{macrocode}
 %
@@ -180,7 +186,7 @@
             unknown .code:n =
               {
                 \msg_error:nnxx { keyvalue } { option-unknown }
-                  { \l_keys_key_tl } { \@currname }
+                  { \l_keys_key_str } { \@currname }
               }
           }
         \AtEndOfPackage

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -64,7 +64,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -167,7 +167,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfp}{2020-02-03}{}
+\ProvidesExplPackage{xfp}{2020-02-08}{}
   {L3 Floating point unit}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -65,7 +65,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -535,7 +535,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfrac}{2020-02-03}{}
+\ProvidesExplPackage{xfrac}{2020-02-08}{}
   {L3 Experimental split-level fractions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -67,7 +67,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -916,7 +916,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xparse}{2020-02-03}{}
+\ProvidesExplPackage{xparse}{2020-02-08}{}
   {L3 Experimental document command parser}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2020-02-03}
+% \date{Released 2020-02-08}
 %
 % \maketitle
 %
@@ -682,7 +682,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xtemplate}{2020-02-03}{}
+\ProvidesExplPackage{xtemplate}{2020-02-08}{}
   {L3 Experimental prototype document functions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -67,7 +67,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -12660,25 +12660,27 @@
     LaTeX~is~attempting~to~parse~some~key-value~input~but~found~
     two~equals~signs~not~separated~by~a~comma.
   }
-\tl_const:Nn \c__keys_code_root_tl     { key~code~>~ }
-\tl_const:Nn \c__keys_default_root_tl  { key~default~>~ }
-\tl_const:Nn \c__keys_groups_root_tl   { key~groups~>~ }
-\tl_const:Nn \c__keys_inherit_root_tl  { key~inherit~>~ }
-\tl_const:Nn \c__keys_type_root_tl     { key~type~>~ }
-\tl_const:Nn \c__keys_validate_root_tl { key~validate~>~ }
-\tl_const:Nn \c__keys_props_root_tl { key~prop~>~ }
+\str_const:Nn \c__keys_code_root_str     { key~code~>~ }
+\str_const:Nn \c__keys_default_root_str  { key~default~>~ }
+\str_const:Nn \c__keys_groups_root_str   { key~groups~>~ }
+\str_const:Nn \c__keys_inherit_root_str  { key~inherit~>~ }
+\str_const:Nn \c__keys_type_root_str     { key~type~>~ }
+\str_const:Nn \c__keys_validate_root_str { key~validate~>~ }
+\str_const:Nn \c__keys_props_root_str { key~prop~>~ }
 \int_new:N \l_keys_choice_int
 \tl_new:N \l_keys_choice_tl
 \clist_new:N \l__keys_groups_clist
+\str_new:N \l_keys_key_str
 \tl_new:N \l_keys_key_tl
-\tl_new:N \l__keys_module_tl
+\str_new:N \l__keys_module_str
 \bool_new:N \l__keys_no_value_bool
 \bool_new:N \l__keys_only_known_bool
+\str_new:N \l_keys_path_str
 \tl_new:N \l_keys_path_tl
-\tl_new:N \l__keys_inherit_tl
+\str_new:N \l__keys_inherit_str
 \tl_new:N \l__keys_relative_tl
 \tl_set:Nn \l__keys_relative_tl { \q_no_value }
-\tl_new:N \l__keys_property_tl
+\str_new:N \l__keys_property_str
 \bool_new:N \l__keys_selective_bool
 \bool_new:N \l__keys_filtered_bool
 \seq_new:N \l__keys_selective_seq
@@ -12688,12 +12690,12 @@
 \tl_new:N \l__keys_tmpa_tl
 \tl_new:N \l__keys_tmpb_tl
 \cs_new_protected:Npn \keys_define:nn
-  { \__keys_define:onn \l__keys_module_tl }
+  { \__keys_define:onn \l__keys_module_str }
 \cs_new_protected:Npn \__keys_define:nnn #1#2#3
   {
-    \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} }
+    \str_set:Nx \l__keys_module_str { \__keys_trim_spaces:n {#2} }
     \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#3}
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_generate_variant:Nn \__keys_define:nnn { o }
 \cs_new_protected:Npn \__keys_define:n #1
@@ -12709,21 +12711,20 @@
 \cs_new_protected:Npn \__keys_define_aux:nn #1#2
   {
     \__keys_property_find:n {#1}
-    \cs_if_exist:cTF { \c__keys_props_root_tl \l__keys_property_tl }
-      { \__keys_define_code:n {#2}
-      }
+    \cs_if_exist:cTF { \c__keys_props_root_str \l__keys_property_str }
+      { \__keys_define_code:n {#2} }
       {
-         \tl_if_empty:NF \l__keys_property_tl
+         \str_if_empty:NF \l__keys_property_str
            {
              \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
-              { \l__keys_property_tl } { \l_keys_path_tl }
+              { \l__keys_property_str } { \l_keys_path_str }
            }
       }
   }
 \cs_new_protected:Npn \__keys_property_find:n #1
   {
-    \tl_set:Nx \l__keys_property_tl { \__keys_trim_spaces:n {#1} }
-    \exp_after:wN \__keys_property_find:w \l__keys_property_tl . .
+    \str_set:Nx \l__keys_property_str { \__keys_trim_spaces:n {#1} }
+    \exp_after:wN \__keys_property_find:w \l__keys_property_str . .
       \q_stop {#1}
   }
 \cs_new_protected:Npn \__keys_property_find:w #1 . #2 . #3 \q_stop #4
@@ -12730,24 +12731,25 @@
   {
     \tl_if_blank:nTF {#3}
       {
-        \tl_clear:N \l__keys_property_tl
+        \str_clear:N \l__keys_property_str
         \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
       }
       {
         \str_if_eq:nnTF {#3} { . }
           {
-            \tl_set:Nx \l_keys_path_tl
+            \str_set:Nx \l_keys_path_str
               {
-                \tl_if_empty:NF \l__keys_module_tl
-                  { \l__keys_module_tl  / }
+                \str_if_empty:NF \l__keys_module_str
+                  { \l__keys_module_str  / }
                \tl_trim_spaces:n {#1}
               }
-            \tl_set:Nn \l__keys_property_tl { . #2 }
+            \str_set:Nn \l__keys_property_str { . #2 }
           }
           {
-            \tl_set:Nx \l_keys_path_tl { \l__keys_module_tl / #1 . #2 }
+            \str_set:Nx \l_keys_path_str { \l__keys_module_str / #1 . #2 }
             \__keys_property_search:w #3 \q_stop
           }
+        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
       }
   }
 \cs_new_protected:Npn \__keys_property_search:w #1 . #2 \q_stop
@@ -12754,11 +12756,11 @@
   {
     \str_if_eq:nnTF {#2} { . }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl }
-        \tl_set:Nn \l__keys_property_tl { . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str }
+        \str_set:Nn \l__keys_property_str { . #1 }
       }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
         \__keys_property_search:w #2 \q_stop
       }
   }
@@ -12767,15 +12769,15 @@
     \bool_if:NTF \l__keys_no_value_bool
       {
         \exp_after:wN \__keys_define_code:w
-          \l__keys_property_tl \q_stop
-          { \use:c { \c__keys_props_root_tl \l__keys_property_tl } }
+          \l__keys_property_str \q_stop
+          { \use:c { \c__keys_props_root_str \l__keys_property_str } }
           {
             \__kernel_msg_error:nnxx { kernel }
-              { key-property-requires-value } { \l__keys_property_tl }
-              { \l_keys_path_tl }
+              { key-property-requires-value } { \l__keys_property_str }
+              { \l_keys_path_str }
             }
       }
-      { \use:c { \c__keys_props_root_tl \l__keys_property_tl } {#1} }
+      { \use:c { \c__keys_props_root_str \l__keys_property_str } {#1} }
   }
 \exp_last_unbraced:NNNNo
   \cs_new:Npn \__keys_define_code:w #1 \c_colon_str #2 \q_stop
@@ -12784,14 +12786,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_tl / true }
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl / false }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \__keys_default_set:n { true }
   }
@@ -12800,14 +12802,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_tl / true }
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl / false }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \__keys_default_set:n { true }
   }
@@ -12819,14 +12821,14 @@
 \cs_new_protected:Npn \__keys_choice_make:N #1
   {
     \cs_if_exist:cTF
-      { \c__keys_type_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_type_root_str \__keys_parent:o \l_keys_path_str }
       {
         \str_if_eq:vnTF
-          { \c__keys_type_root_tl \__keys_parent:o \l_keys_path_tl }
+          { \c__keys_type_root_str \__keys_parent:o \l_keys_path_str }
           { choice }
           {
             \__kernel_msg_error:nnxx { kernel } { nested-choice-key }
-              { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_tl }
+              { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_str }
           }
           { \__keys_choice_make_aux:N #1 }
       }
@@ -12834,13 +12836,13 @@
   }
 \cs_new_protected:Npn \__keys_choice_make_aux:N #1
   {
-    \cs_set_nopar:cpn { \c__keys_type_root_tl \l_keys_path_tl }
+    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
       { choice }
-    \__keys_cmd_set:nn { \l_keys_path_tl } { #1 {##1} }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
-          { \l_keys_path_tl } {##1}
+          { \l_keys_path_str } {##1}
       }
   }
 \cs_new_protected:Npn \__keys_choices_make:nn
@@ -12855,7 +12857,7 @@
       {
         \int_incr:N \l_keys_choice_int
         \__keys_cmd_set:nx
-          { \l_keys_path_tl / \__keys_trim_spaces:n {##1} }
+          { \l_keys_path_str / \__keys_trim_spaces:n {##1} }
           {
             \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1}
             \int_set:Nn \exp_not:N \l_keys_choice_int
@@ -12865,7 +12867,7 @@
       }
   }
 \cs_new_protected:Npn \__keys_cmd_set:nn #1#2
-  { \cs_set_protected:cpn { \c__keys_code_root_tl #1 } ##1 {#2} }
+  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
 \cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
 \cs_new_protected:Npn \__keys_default_set:n #1
   {
@@ -12872,12 +12874,12 @@
     \tl_if_empty:nTF {#1}
       {
         \cs_set_eq:cN
-          { \c__keys_default_root_tl \l_keys_path_tl }
+          { \c__keys_default_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
         \cs_set_nopar:cpx
-          { \c__keys_default_root_tl \l_keys_path_tl }
+          { \c__keys_default_root_str \l_keys_path_str }
           { \exp_not:n {#1} }
         \__keys_value_requirement:nn { required } { false }
       }
@@ -12887,11 +12889,11 @@
     \clist_set:Nn \l__keys_groups_clist {#1}
     \clist_if_empty:NTF \l__keys_groups_clist
       {
-        \cs_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
-        \cs_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
           \l__keys_groups_clist
       }
   }
@@ -12898,28 +12900,28 @@
 \cs_new_protected:Npn \__keys_inherit:n #1
   {
     \__keys_undefine:
-    \cs_set_nopar:cpn { \c__keys_inherit_root_tl \l_keys_path_tl } {#1}
+    \cs_set_nopar:cpn { \c__keys_inherit_root_str \l_keys_path_str } {#1}
   }
 \cs_new_protected:Npn \__keys_initialise:n #1
   {
     \cs_if_exist:cTF
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       { \__keys_execute_inherit: }
       {
-        \tl_clear:N \l__keys_inherit_tl
-        \cs_if_exist_use:cT { \c__keys_code_root_tl \l_keys_path_tl } { {#1} }
+        \str_clear:N \l__keys_inherit_str
+        \cs_if_exist_use:cT { \c__keys_code_root_str \l_keys_path_str } { {#1} }
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:n #1
   {
-    \__keys_cmd_set:Vo \l_keys_path_tl
+    \__keys_cmd_set:Vo \l_keys_path_str
       {
         \exp_after:wN \keys_set:nn
-        \exp_after:wN { \l__keys_module_tl } {#1}
+        \exp_after:wN { \l__keys_module_str } {#1}
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:nn #1#2
-  { \__keys_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } }
+  { \__keys_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } }
 \cs_new_protected:Npn \__keys_prop_put:Nn #1#2
   {
     \prop_if_exist:NF #1 { \prop_new:N #1 }
@@ -12926,8 +12928,8 @@
     \exp_after:wN \__keys_find_key_module:NNw
       \exp_after:wN \l__keys_tmpa_tl
       \exp_after:wN \l__keys_tmpb_tl
-      \l_keys_path_tl / \q_stop
-    \__keys_cmd_set:nx { \l_keys_path_tl }
+      \l_keys_path_str / \q_stop
+    \__keys_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -12942,7 +12944,7 @@
       { code , default , groups , inherit , type , validate }
       {
         \cs_set_eq:cN
-          { \tl_use:c { c__keys_ ##1 _root_tl } \l_keys_path_tl }
+          { \tl_use:c { c__keys_ ##1 _root_str } \l_keys_path_str }
           \tex_undefined:D
       }
   }
@@ -12953,17 +12955,17 @@
         { true }
           {
             \cs_set_eq:cc
-              { \c__keys_validate_root_tl \l_keys_path_tl }
+              { \c__keys_validate_root_str \l_keys_path_str }
               { __keys_validate_ #1 : }
           }
         { false }
           {
             \cs_if_eq:ccT
-              { \c__keys_validate_root_tl \l_keys_path_tl }
+              { \c__keys_validate_root_str \l_keys_path_str }
               { __keys_validate_ #1 : }
               {
                 \cs_set_eq:cN
-                  { \c__keys_validate_root_tl \l_keys_path_tl }
+                  { \c__keys_validate_root_str \l_keys_path_str }
                   \tex_undefined:D
               }
           }
@@ -12979,7 +12981,7 @@
     \bool_if:NF \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnxx { kernel } { value-forbidden }
-          { \l_keys_path_tl } { \l_keys_value_tl }
+          { \l_keys_path_str } { \l_keys_value_tl }
         \__keys_validate_cleanup:w
       }
   }
@@ -12988,7 +12990,7 @@
     \bool_if:NT \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnx { kernel } { value-required }
-          { \l_keys_path_tl }
+          { \l_keys_path_str }
         \__keys_validate_cleanup:w
       }
   }
@@ -12996,7 +12998,7 @@
 \cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl }
+    \__keys_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -13010,145 +13012,145 @@
     \__keys_value_requirement:nn { required } { true }
   }
 \cs_generate_variant:Nn \__keys_variable_set_required:NnnN { c }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set:N } #1
   { \__keys_bool_set:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set:c } #1
   { \__keys_bool_set:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset:N } #1
   { \__keys_bool_set:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset:c } #1
   { \__keys_bool_set:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set_inverse:N } #1
   { \__keys_bool_set_inverse:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set_inverse:c } #1
   { \__keys_bool_set_inverse:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset_inverse:N } #1
   { \__keys_bool_set_inverse:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset_inverse:c } #1
   { \__keys_bool_set_inverse:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choice: }
+\cs_new_protected:cpn { \c__keys_props_root_str .choice: }
   { \__keys_choice_make: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:nn } #1
   { \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:Vn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:Vn } #1
   { \exp_args:NV \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:on } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:on } #1
   { \exp_args:No \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:xn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:xn } #1
   { \exp_args:Nx \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .code:n } #1
-  { \__keys_cmd_set:nn { \l_keys_path_tl } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .code:n } #1
+  { \__keys_cmd_set:nn { \l_keys_path_str } {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:N } #1
   { \__keys_variable_set:NnnN #1 { clist } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:c } #1
   { \__keys_variable_set:cnnN {#1} { clist } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_gset:N } #1
   { \__keys_variable_set:NnnN #1 { clist } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_gset:c } #1
   { \__keys_variable_set:cnnN {#1} { clist } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:n } #1
   { \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:V } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:V } #1
   { \exp_args:NV \__keys_default_set:n #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:o } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:o } #1
   { \exp_args:No \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:x } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:x } #1
   { \exp_args:Nx \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { dim } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { dim } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { dim } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { dim } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { fp } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { fp } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { fp } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { fp } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .groups:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .groups:n } #1
   { \__keys_groups_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .inherit:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .inherit:n } #1
   { \__keys_inherit:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:n } #1
   { \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:V } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:V } #1
   { \exp_args:NV \__keys_initialise:n #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:o } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:o } #1
   { \exp_args:No \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:x } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:x } #1
   { \exp_args:Nx \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { int } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { int } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { int } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { int } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .meta:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .meta:n } #1
   { \__keys_meta_make:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .meta:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .meta:nn } #1
   { \__keys_meta_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoice: }
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoice: }
   { \__keys_multichoice_make: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:nn } #1
   { \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:Vn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:Vn } #1
   { \exp_args:NV \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:on } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:on } #1
   { \exp_args:No \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:xn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:xn } #1
   { \exp_args:Nx \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { muskip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { muskip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { muskip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { muskip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_put:N } #1
   { \__keys_prop_put:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_put:c } #1
   { \__keys_prop_put:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_gput:N } #1
   { \__keys_prop_put:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_gput:c } #1
   { \__keys_prop_put:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { skip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { skip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { skip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { skip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set_x:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set_x:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset_x:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset_x:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { g } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .undefine: }
+\cs_new_protected:cpn { \c__keys_props_root_str .undefine: }
   { \__keys_undefine: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .value_forbidden:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .value_forbidden:n } #1
   { \__keys_value_requirement:nn { forbidden } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .value_required:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .value_required:n } #1
   { \__keys_value_requirement:nn { required } {#1} }
 \cs_new_protected:Npn \keys_set:nn #1#2
   {
@@ -13172,12 +13174,12 @@
   }
 \cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
 \cs_new_protected:Npn \__keys_set:nn #1#2
-  { \exp_args:No \__keys_set:nnn \l__keys_module_tl {#1} {#2} }
+  { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} }
 \cs_new_protected:Npn \__keys_set:nnn #1#2#3
   {
-    \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} }
+    \str_set:Nx \l__keys_module_str { \__keys_trim_spaces:n {#2} }
     \keyval_parse:NNn \__keys_set_keyval:n \__keys_set_keyval:nn {#3}
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_new_protected:Npn \keys_set_known:nnN #1#2#3
   {
@@ -13294,42 +13296,43 @@
 \cs_new_protected:Npn \__keys_set_keyval:n #1
   {
     \bool_set_true:N \l__keys_no_value_bool
-    \__keys_set_keyval:onn \l__keys_module_tl {#1} { }
+    \__keys_set_keyval:onn \l__keys_module_str {#1} { }
   }
 \cs_new_protected:Npn \__keys_set_keyval:nn #1#2
   {
     \bool_set_false:N \l__keys_no_value_bool
-    \__keys_set_keyval:onn \l__keys_module_tl {#1} {#2}
+    \__keys_set_keyval:onn \l__keys_module_str {#1} {#2}
   }
 \cs_new_protected:Npn \__keys_set_keyval:nnn #1#2#3
   {
-    \tl_set:Nx \l_keys_path_tl
+    \tl_set:Nx \l_keys_path_str
       {
         \tl_if_blank:nF {#1}
           { #1 / }
         \__keys_trim_spaces:n {#2}
       }
-    \tl_clear:N \l__keys_module_tl
-    \tl_clear:N \l__keys_inherit_tl
+    \str_clear:N \l__keys_module_str
+    \str_clear:N \l__keys_inherit_str
     \exp_after:wN \__keys_find_key_module:NNw
-      \exp_after:wN \l__keys_module_tl
-      \exp_after:wN \l_keys_key_tl
-      \l_keys_path_tl / \q_stop
+      \exp_after:wN \l__keys_module_str
+      \exp_after:wN \l_keys_key_str
+      \l_keys_path_str / \q_stop
+    \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \__keys_value_or_default:n {#3}
     \bool_if:NTF \l__keys_selective_bool
       { \__keys_set_selective: }
       { \__keys_execute: }
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_generate_variant:Nn \__keys_set_keyval:nnn { o }
 \cs_new_protected:Npn \__keys_find_key_module:NNw #1#2#3 / #4 \q_stop
   {
     \tl_if_blank:nTF {#4}
-      { \tl_set:Nn #2 {#3} }
+      { \str_set:Nn #2 {#3} }
       {
-        \tl_put_right:Nx #1
+        \str_put_right:Nx #1
           {
-            \tl_if_empty:NF #1 { / }
+            \str_if_empty:NF #1 { / }
             #3
           }
         \__keys_find_key_module:NNw #1#2 #4 \q_stop
@@ -13337,10 +13340,10 @@
   }
 \cs_new_protected:Npn \__keys_set_selective:
   {
-    \cs_if_exist:cTF { \c__keys_groups_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c__keys_groups_root_str \l_keys_path_str }
       {
         \clist_set_eq:Nc \l__keys_groups_clist
-          { \c__keys_groups_root_tl \l_keys_path_tl }
+          { \c__keys_groups_root_str \l_keys_path_str }
         \__keys_check_groups:
       }
       {
@@ -13379,16 +13382,16 @@
   {
     \bool_if:NTF \l__keys_no_value_bool
       {
-        \cs_if_exist:cTF { \c__keys_default_root_tl \l_keys_path_tl }
+        \cs_if_exist:cTF { \c__keys_default_root_str \l_keys_path_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c__keys_default_root_tl \l_keys_path_tl }
+              { \c__keys_default_root_str \l_keys_path_str }
           }
           {
             \tl_clear:N \l_keys_value_tl
             \cs_if_exist:cT
-              { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+              { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
               { \__keys_default_inherit: }
           }
       }
@@ -13397,14 +13400,14 @@
 \cs_new_protected:Npn \__keys_default_inherit:
   {
     \clist_map_inline:cn
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c__keys_default_root_tl ##1 / \l_keys_key_tl }
+          { \c__keys_default_root_str ##1 / \l_keys_key_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c__keys_default_root_tl ##1 / \l_keys_key_tl }
+              { \c__keys_default_root_str ##1 / \l_keys_key_str }
             \clist_map_break:
           }
       }
@@ -13411,15 +13414,15 @@
   }
 \cs_new_protected:Npn \__keys_execute:
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c__keys_code_root_str \l_keys_path_str }
       {
-        \cs_if_exist_use:c { \c__keys_validate_root_tl \l_keys_path_tl }
-        \cs:w \c__keys_code_root_tl \l_keys_path_tl \exp_after:wN \cs_end:
+        \cs_if_exist_use:c { \c__keys_validate_root_str \l_keys_path_str }
+        \cs:w \c__keys_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {
         \cs_if_exist:cTF
-          { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+          { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
           { \__keys_execute_inherit: }
           { \__keys_execute_unknown: }
       }
@@ -13427,14 +13430,14 @@
 \cs_new_protected:Npn \__keys_execute_inherit:
   {
     \clist_map_inline:cn
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c__keys_code_root_tl ##1 / \l_keys_key_tl }
+          { \c__keys_code_root_str ##1 / \l_keys_key_str }
           {
-            \tl_set:Nn \l__keys_inherit_tl {##1}
-            \cs_if_exist_use:c { \c__keys_validate_root_tl ##1 / \l_keys_key_tl }
-            \cs:w \c__keys_code_root_tl ##1 / \l_keys_key_tl
+            \str_set:Nn \l__keys_inherit_str {##1}
+            \cs_if_exist_use:c { \c__keys_validate_root_str ##1 / \l_keys_key_str }
+            \cs:w \c__keys_code_root_str ##1 / \l_keys_key_str
               \exp_after:wN \cs_end: \exp_after:wN
               { \l_keys_value_tl }
             \clist_map_break:n { \use_none:n }
@@ -13448,22 +13451,22 @@
       { \__keys_store_unused: }
       {
         \cs_if_exist:cTF
-          { \c__keys_code_root_tl \l__keys_module_tl / unknown }
+          { \c__keys_code_root_str \l__keys_module_str / unknown }
           {
-            \cs:w \c__keys_code_root_tl \l__keys_module_tl / unknown
+            \cs:w \c__keys_code_root_str \l__keys_module_str / unknown
               \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
           }
           {
             \__kernel_msg_error:nnxx { kernel } { key-unknown }
-             { \l_keys_path_tl } { \l__keys_module_tl }
+             { \l_keys_path_str } { \l__keys_module_str }
           }
       }
   }
 \cs_new:Npn \__keys_execute:nn #1#2
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl #1 }
+    \cs_if_exist:cTF { \c__keys_code_root_str #1 }
       {
-        \cs:w \c__keys_code_root_tl #1 \exp_after:wN \cs_end:
+        \cs:w \c__keys_code_root_str #1 \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {#2}
@@ -13474,7 +13477,7 @@
       {
         \clist_put_right:Nx \l__keys_unused_clist
           {
-            \exp_not:o \l_keys_key_tl
+            \exp_not:o \l_keys_key_str
             \bool_if:NF \l__keys_no_value_bool
               { = { \exp_not:o \l_keys_value_tl } }
           }
@@ -13484,7 +13487,7 @@
           {
             \clist_put_right:Nx \l__keys_unused_clist
               {
-                \exp_not:o \l_keys_path_tl
+                \exp_not:o \l_keys_path_str
                 \bool_if:NF \l__keys_no_value_bool
                   { = { \exp_not:o \l_keys_value_tl } }
               }
@@ -13507,7 +13510,7 @@
           \tl_if_blank:nF {##1}
             {
               \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path }
-                \l_keys_path_tl
+                \l_keys_path_str
                 \l__keys_relative_tl
             }
           \clist_put_right:Nx \l__keys_unused_clist
@@ -13519,7 +13522,7 @@
         }
     \use:x
       {
-        \__keys_store_unused:w \l_keys_path_tl
+        \__keys_store_unused:w \l_keys_path_str
           \l__keys_relative_tl / \l__keys_relative_tl /
           \exp_not:N \q_stop
       }
@@ -13527,18 +13530,18 @@
 \cs_new_protected:Npn \__keys_store_unused:w { }
 \cs_new:Npn \__keys_choice_find:n #1
   {
-    \tl_if_empty:NTF \l__keys_inherit_tl
-      { \__keys_choice_find:nn { \l_keys_path_tl } {#1} }
+    \str_if_empty:NTF \l__keys_inherit_str
+      { \__keys_choice_find:nn { \l_keys_path_str } {#1} }
       {
         \__keys_choice_find:nn
-          { \l__keys_inherit_tl / \l_keys_key_tl } {#1}
+          { \l__keys_inherit_str / \l_keys_key_str } {#1}
       }
   }
 \cs_new:Npn \__keys_choice_find:nn #1#2
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} }
-      { \use:c { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} } {#2} }
-      { \use:c { \c__keys_code_root_tl #1 / unknown } {#2} }
+    \cs_if_exist:cTF { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} }
+      { \use:c { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} } {#2} }
+      { \use:c { \c__keys_code_root_str #1 / unknown } {#2} }
   }
 \cs_new:Npn \__keys_multichoice_find:n #1
   { \clist_map_function:nN {#1} \__keys_choice_find:n }
@@ -13582,7 +13585,7 @@
 \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 } }
+      { \c__keys_code_root_str \__keys_trim_spaces:n { #1 / #2 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -13590,7 +13593,7 @@
   { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 / #3 } }
+      { \c__keys_code_root_str \__keys_trim_spaces:n { #1 / #2 / #3 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -13609,7 +13612,7 @@
               {
                 \exp_args:Nc \cs_replacement_spec:N
                   {
-                    \c__keys_code_root_tl
+                    \c__keys_code_root_str
                     \__keys_trim_spaces:n { #2 / #3 }
                   }
               }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2020-02-08 22:17:44 UTC (rev 53719)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx	2020-02-08 22:17:44 UTC (rev 53719)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \everyjob\expandafter{\the\everyjob
   \message{L3 programming layer <\ExplFileDate>}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def	2020-02-08 22:17:44 UTC (rev 53719)
@@ -605,7 +605,7 @@
     { \__cs_generate_variant:wwNN  }
   \__kernel_patch:nnn
     {
-      \cs_if_exist:cF { \c__keys_code_root_tl #1 }
+      \cs_if_exist:cF { \c__keys_code_root_str #1 }
         { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
     }
     { }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -19,8 +19,8 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: l3keys2e.dtx
-\RequirePackage{expl3}[2018/02/21]
-\@ifpackagelater{expl3}{2018/02/21}
+\RequirePackage{expl3}[2020/02/08]
+\@ifpackagelater{expl3}{2020/02/08}
   {}
   {%
     \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3keys2e}{2020-02-03}{}
+\ProvidesExplPackage{l3keys2e}{2020-02-08}{}
   {LaTeX2e option processing using LaTeX3 keys}
 \cs_generate_variant:Nn \clist_put_right:Nn { Nv }
 \cs_generate_variant:Nn \keys_if_exist:nnT  { nx }
@@ -51,7 +51,7 @@
             unknown .code:n =
               {
                 \msg_error:nnxx { keyvalue } { option-unknown }
-                  { \l_keys_key_tl } { \@currname }
+                  { \l_keys_key_str } { \@currname }
               }
           }
         \AtEndOfPackage

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{xparse}
-\ProvidesExplPackage{xfp}{2020-02-03}{}
+\ProvidesExplPackage{xfp}{2020-02-08}{}
   {L3 Floating point unit}
 \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
 \NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\ProvidesExplPackage{xfrac}{2020-02-03}{}
+\ProvidesExplPackage{xfrac}{2020-02-08}{}
   {L3 Experimental split-level fractions}
 \keys_define:nn { xfrac }
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xparse}{2020-02-03}{}
+\ProvidesExplPackage{xparse}{2020-02-08}{}
   {L3 Experimental document command parser}
 \tl_new:N \l__xparse_arg_spec_tl
 \tl_new:N \l__xparse_args_tl

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2020-02-08 22:16:20 UTC (rev 53718)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2020-02-08 22:17:44 UTC (rev 53719)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xtemplate}{2020-02-03}{}
+\ProvidesExplPackage{xtemplate}{2020-02-08}{}
   {L3 Experimental prototype document functions}
 \tl_const:Nn \c__xtemplate_code_root_tl      { template~code~>~ }
 \tl_const:Nn \c__xtemplate_defaults_root_tl  { template~defaults~>~ }



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