texlive[71127] Master/texmf-dist: jsonparse (29apr24)

commits+karl at tug.org commits+karl at tug.org
Mon Apr 29 22:30:21 CEST 2024


Revision: 71127
          https://tug.org/svn/texlive?view=revision&revision=71127
Author:   karl
Date:     2024-04-29 22:30:21 +0200 (Mon, 29 Apr 2024)
Log Message:
-----------
jsonparse (29apr24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/jsonparse/README.md
    trunk/Master/texmf-dist/doc/latex/jsonparse/jsonparse-doc.pdf
    trunk/Master/texmf-dist/doc/latex/jsonparse/jsonparse-doc.tex
    trunk/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/jsonparse/jason/
    trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf
    trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.svg

Modified: trunk/Master/texmf-dist/doc/latex/jsonparse/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jsonparse/README.md	2024-04-29 20:29:57 UTC (rev 71126)
+++ trunk/Master/texmf-dist/doc/latex/jsonparse/README.md	2024-04-29 20:30:21 UTC (rev 71127)
@@ -1,5 +1,7 @@
-![Version 0.8.2](https://img.shields.io/badge/version-0.8.2-blue)
+![Version 0.8.3](https://img.shields.io/badge/version-0.8.3-blue)
 
+![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/d6abde3a-fa12-4b63-a213-ad8332e32199)
+
 # The `jsonparse` package
 
 The `jsonparse` package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax.
@@ -42,6 +44,7 @@
 
 We can store it in the token variable `\myJSONdata` using the command `\JSONParseFromFile{\myJSONdata}{example.json}`. Calling the command `\JSONParseValue{\myJSONdata}{contactPoint[0].telephone}` would then result in the output `+1 (555) 555-1234` (indices are zero-based per default). 
 
-This package including all files is subject to the LPPL 1.3c license.
-Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+This package including all files is subject to the LPPL 1.3c license. Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
 
+Jason, the JSON parseing horse: Copyright 2024 Hannah Klöber.
+

Added: trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf	2024-04-29 20:29:57 UTC (rev 71126)
+++ trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf	2024-04-29 20:30:21 UTC (rev 71127)

Property changes on: trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.svg
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.svg	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/jsonparse/jason/jason.svg	2024-04-29 20:30:21 UTC (rev 71127)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="250px" height="250px" viewBox="0 0 450 450" enable-background="new 0 0 449.5 435" xml:space="preserve">
+<circle fill="#3FA9F5" cx="239" cy="226" r="206.166"/>
+<g>
+	<defs>
+		<circle id="SVGID_1_" cx="239" cy="226" r="206.166"/>
+	</defs>
+	<clipPath id="SVGID_2_">
+		<use xlink:href="#SVGID_1_"  overflow="visible"/>
+	</clipPath>
+	<path clip-path="url(#SVGID_2_)" fill="#C69C6D" d="M418.334,389.667c0,0-10.334-12.333-36-86.667S344,189.333,333.667,163
+		c-5.552-14.149-12.545-22.326-17.83-26.869c7.769-5.957,15.778-13.185,19.83-20.131c6.902-11.834,11.667-24.5,15.667-38.5
+		C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5c-1.534,2.754-3.036,5.383-4.538,7.892l-125.587,25.33
+		C141.705,137.165,130.648,151.436,126,166c-4.127,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774l12.106,48.851
+		l56.113,69.247c13.436-9.009,28.206-20.065,46.512-27.122c13.874-5.348,33.133-8.479,51.113-12.082
+		c2.555,6.323,8.828,23.014,11.387,40.332c3.25,22,4.5,91.5,4.5,91.5L418.334,389.667z"/>
+	<path clip-path="url(#SVGID_2_)" fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M465.5,307.334
+		c0,0-9.667-14.833-21.667-21c-11.409-5.863-24.5-7.167-24.5-7.167s2.853-11.646,11.167-22.833C439.667,244,456,233.667,456,233.667
+		l-51.499-17.5c0,0,17.166-6.5,25.166-13.833c9.095-8.336,13.333-30,13.333-30s-47.621,2.806-54.333-15.167
+		C383.501,143.333,402.001,114,402.001,114s-27.334-6.333-41.167-6.167c-7.572,0.091-15.827,0.876-22.104,2.556
+		c-0.978,1.889-1.986,3.764-3.063,5.611c-4.052,6.946-12.062,14.174-19.83,20.131c5.285,4.543,12.278,12.72,17.83,26.869
+		c10.333,26.333,23.001,65.666,48.667,140s36,86.667,36,86.667l32.5-36.5c-15.167-3-22.334-20.5-22.334-20.5L465.5,307.334z"/>
+	<path clip-path="url(#SVGID_2_)" fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M234,448.5
+		c0,0-1.25-69.5-4.5-91.5c-2.559-17.318-8.832-34.009-11.387-40.332c-0.185,0.037-0.369,0.074-0.554,0.111"/>
+</g>
+<path fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M267.334,75.167
+	C256.668,65.5,245.5,64.333,236.667,64c-15.107-0.57-25-26.667-25-26.667s0,15.167-3,18.333c-6.167-9.333-19.333-11.833-29.667-11
+	c-14.596,1.177-24,11.667-24,11.667s14.5-2.833,24.167,7.167c9.667,10,10.167,15.167,10.167,15.167
+	c-7.167-9-25.834-6.334-42.167,5.333s-11.5,43-11.5,43s3.667-12.833,20.667-20.667c6.572-3.028,24-3.667,24-3.667
+	S155.5,103.5,150.667,132.5c-2.909,17.455,3.667,32.333,3.667,32.333s1.5-15.5,16.333-24.667c10.31-6.371,21.833-9.333,21.833-9.333
+	c-5.167,3.833-3.166,14.833-3.166,14.833s9-15.167,32.833-13.667c30.479,1.918,43.022-10.208,55.629-31.275
+	C277.24,94.63,275.157,82.257,267.334,75.167z"/>
+<path fill="#A67C52" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.487,355.872
+	c8.348-10.395,19.908-25.626,22.763-33.622c7.5-21-1.25-30.75-6-38s3.25-11.5-10-24.25S73.5,268.25,68,265.75S63,260,61.5,249
+	s-7.183-12.182-16.5-11c-12.646,1.604-18.5,24.5-21.75,40.25s-11.549,15.507-9.75,29c0.854,6.402,4.447,12.983,15.898,15.396
+	c-0.721,5.758-0.935,12.787,0.283,20.442c3.164,19.888,34.804,29.832,58.308,27.572C98.749,369.626,109.143,363.479,120.487,355.872
+	z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M189.334,78.667c0,0-0.5-5.167-10.167-15.167
+	c-1.713-1.772-3.58-3.135-5.489-4.188c0.317,6.082,0.921,11.189,1.303,14.006C181.138,73.124,186.281,74.833,189.334,78.667z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M179,44.667c10.334-0.833,23.5,1.667,29.667,11
+	c3-3.167,3-18.333,3-18.333s7.525,19.843,19.471,25.298c-4.58-16.15-21.08-31.12-27.888-36.632
+	c-7-5.667-16.625-19.333-16.625-19.333s-8.979,11.333-11.979,29c-0.542,3.195-0.864,6.542-1.031,9.882
+	C175.318,45.129,177.115,44.819,179,44.667z"/>
+<ellipse fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" cx="223.167" cy="190.959" rx="19.5" ry="17.375"/>
+<ellipse fill="#42210B" cx="221.751" cy="193" rx="7.917" ry="7"/>
+<path fill="#603813" d="M80.519,293.464c0,0,2.443-4.219,6.106-9.089C91.052,278.49,99.007,273.351,103,273
+	c7.125-0.625,12.198,1.105,9.299,6.695S99.936,291.193,93,292.125S80.519,293.464,80.519,293.464z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M296,149.5c0,0,30.334-17.5,39.667-33.5
+	c6.902-11.834,11.667-24.5,15.667-38.5C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5
+	c-1.534,2.754-3.036,5.383-4.538,7.892"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.488,355.872
+	c13.437-9.009,28.207-20.065,46.512-27.122c24.045-9.269,64.273-11.878,85.969-21.821s24.408-43.392,24.408-43.392"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M127.5,299.5c0,0-0.749,0.729-2.083,1.995
+	C126.919,300.316,127.5,299.5,127.5,299.5z"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M39.236,323.495
+	c-0.724,4.556-1.093,11.276,2.014,15.005c5,6,14.5,15,36,2c18.048-10.912,41.196-32.388,48.167-39.005
+	c-4.023,3.157-14.707,8.937-38.917,8.755C59.839,310.05,53.549,322.611,39.236,323.495z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M29.398,322.646c1.963,0.413,4.15,0.708,6.602,0.854
+	c1.129,0.067,2.202,0.06,3.236-0.005"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M108.345,308.401
+	c-16.22,8.63-44.097,22.899-51.74,23.26c-7.288,0.344-13.568-4.744-16.966-8.201c-0.135,0.01-0.266,0.026-0.403,0.035"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M152.209,126.056
+	C141.705,137.165,130.648,151.436,126,166c-4.126,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774"/>
+</svg>

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

Modified: trunk/Master/texmf-dist/doc/latex/jsonparse/jsonparse-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/jsonparse/jsonparse-doc.tex	2024-04-29 20:29:57 UTC (rev 71126)
+++ trunk/Master/texmf-dist/doc/latex/jsonparse/jsonparse-doc.tex	2024-04-29 20:30:21 UTC (rev 71127)
@@ -11,8 +11,8 @@
 % This work has the LPPL maintenance status `maintained'.
 % 
 \documentclass[a4paper]{article}
-\def\jsonparsefileversion{0.8.2}
-\def\jsonparsefiledate{26 April 2024}
+\def\jsonparsefileversion{0.8.3}
+\def\jsonparsefiledate{28 April 2024}
 
 \usepackage[T1]{fontenc}
 \usepackage{Alegreya}
@@ -182,8 +182,8 @@
 \makedoctitle
     [The jsonparse package]
     {The \titlemacro{jsonparse} package}
-    {An easy way to parse, store and access JSON data from files or strings in LaTeX documents}
-    {Jasper Habicht}[E-mail: \href{mailto:mail at jasperhabicht.de}{mail at jasperhabicht.de}]
+    {A handy way to parse, store and access JSON data from files or strings in LaTeX documents}
+    {Jasper Habicht}[E-mail: \href{mailto:mail at jasperhabicht.de}{mail at jasperhabicht.de}. I am grateful to Joseph Wright, Jonathan P. Spratte and David Carlisle who helped me navigating the peculiarities of TeX and optimizing the code. Jason, the JSON parsing horse: Copyright 2024 Hannah Klöber.]
     {Version \jsonparsefileversion, released on \jsonparsefiledate}
 
 \changes{v0.3.0}{2024/04/08}{First public beta release.}
@@ -196,8 +196,11 @@
 \changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.}
 \changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.}
 \changes{v0.8.2}{2024/04/26}{Bug fixes, externalizing parsed data.}
+\changes{v0.8.3}{2024/04/28}{Escaping of characters with special meaning in TeX.}
 
 \begin{document}
+\vspace*{-1cm}
+\noindent\hspace*{-3.5mm}\includegraphics[width=5cm]{jason/jason.pdf}
 
 \printdoctitle
 
@@ -205,6 +208,8 @@
 
 \section{Introduction}
 
+Hello guys, I am Jason, the JSON parsing horse. JSON data is my favorite thing to parse! But I found that converting JSON to TeX can be a bit tricky. Therefore, I created this package which I am happy to introduce to you.
+
 The \macro{jsonparse} package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax.
 
 This package is still in a beta stage and not thoroughly tested. Bugs or improvements can be issued via GitHub at \url{https://github.com/jasperhabicht/jsonparse/issues}.
@@ -248,6 +253,21 @@
 \end{codeexamplecolumns}
 
 \begin{macrodef}
+|escape|={<all>}
+|escape|={<none>}
+|escape|={<number sign>}
+|escape|={<dollar sign>}
+|escape|={<percent sign>}
+|escape|={<ampersand>}
+|escape|={<circumflex accent>}
+|escape|={<low line>}
+|escape|={<tilde>}
+\end{macrodef}
+The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into their relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected. 
+
+The naming of the relevant characters follows their Unicode names. However, \macro{hash} exists as alias for \macro{number sign}, \macro{dollar} as alias for \macro{dollar sign}, \macro{percent} for \macro{percent sign}, \macro{circumflex} for \macro{circumflex accent} and \macro{underscore} for \macro{low line}.
+
+\begin{macrodef}
 replacement/|backspace|={<string>}
 replacement/|formfeed|={<string>}
 replacement/|linefeed|={<string>}
@@ -356,7 +376,7 @@
 \begin{macrodef}
 |\JSONParsePut|{<token variable>}{<key>}[<JSON string>]
 \end{macrodef}
-The commannd \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It essentially just adds a key-value pair to a property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data.
+The command \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It just adds a key-value pair to the property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data.
 
 \subsection{Changing separators, output and other settings}\label{sec:settings}
 

Modified: trunk/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty	2024-04-29 20:29:57 UTC (rev 71126)
+++ trunk/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty	2024-04-29 20:30:21 UTC (rev 71127)
@@ -10,7 +10,7 @@
 % 
 % This work has the LPPL maintenance status `maintained'.
 % 
-\ProvidesExplPackage {jsonparse} {2024-04-26} {0.8.2} 
+\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3} 
   {JSON Parse}
 
 \bool_new:N \l__jsonparse_debug_mode_bool
@@ -51,6 +51,11 @@
   Invalid ~ escape ~ sequence ~ #1 ~ in ~ key.
 }
 
+\msg_new:nnn { jsonparse } { escape-char-not-found } {
+  \msg_error_text:n { jsonparse } \iow_newline:
+  Escape ~ character ~ #1 ~ not ~ found.
+}
+
 \msg_new:nnn { jsonparse } { saving-external } {
   \msg_info_text:n { jsonparse } \iow_newline:
   Saving ~ external ~ file: ~ #1.
@@ -77,6 +82,22 @@
 \str_new:N \l__jsonparse_carriage_return_str
 \str_new:N \l__jsonparse_horizontal_tab_str
 
+\clist_new:N \l__jsonparse_escape_tex_chars_clist
+\clist_set:Nn \l__jsonparse_escape_tex_chars_clist {
+  number_sign ,
+  dollar_sign , 
+  percent_sign ,
+  ampersand ,
+  circumflex_accent , 
+  low_line , 
+  tilde 
+}
+
+\str_new:N \l__jsonparse_escape_temp_str
+\clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+  \bool_new:c { l__jsonparse_escape_ #1 _bool }
+}
+
 \keys_define:nn { jsonparse } {
   array ~ index ~ zero-based      .bool_set:N = \l__jsonparse_array_index_zero_based_bool ,
   array ~ index ~ zero-based      .default:n  = { true } ,
@@ -104,7 +125,50 @@
   replacement / carriage ~ return .str_set:N  = \l__jsonparse_carriage_return_str ,
   replacement / carriage ~ return .initial:n  = { ~ } ,
   replacement / horizontal ~ tab  .str_set:N  = \l__jsonparse_horizontal_tab_str ,
-  replacement / horizontal ~ tab  .initial:n  = { ~ } 
+  replacement / horizontal ~ tab  .initial:n  = { ~ } ,
+  escape                          .code:n     = { 
+    \str_case:nnF {#1} { 
+      { all } {
+        \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+          \bool_set_true:c { l__jsonparse_escape_ ##1 _bool }
+        }
+      } 
+      { none } {
+        \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+          \bool_set_false:c { l__jsonparse_escape_ ##1 _bool }
+        }
+      }
+    } {
+      \clist_map_inline:nn {#1} {
+        \str_set:Nn \l__jsonparse_escape_temp_str {##1}
+        \str_replace_all:Nnn \l__jsonparse_escape_temp_str { ~ } { _ }
+        \bool_if_exist:cTF { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } {
+          \bool_set_true:c { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool }
+        } {
+          \str_case:nnF {##1} { 
+            { hash } {
+              \bool_set_true:c { l__jsonparse_escape_number_sign_bool }
+            }
+            { dollar } {
+              \bool_set_true:c { l__jsonparse_escape_dollar_sign_bool }
+            }
+            { percent } {
+              \bool_set_true:c { l__jsonparse_escape_percent_sign_bool }
+            }
+            { circumflex } {
+              \bool_set_true:c { l__jsonparse_escape_circumflex_accent_bool }
+            }
+            { underscore } {
+              \bool_set_true:c { l__jsonparse_escape_low_line_bool }
+            }
+          } {
+            \msg_error:nno { jsonparse } { escape-char-not-found }
+              {##1}
+          }
+        }
+      }
+    }
+  }
 }
 
 \NewDocumentCommand { \JSONParseSet } { m } {
@@ -121,6 +185,7 @@
 \cs_generate_variant:Nn \tl_range:nnn { nne , nen }
 \cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen }
 \cs_generate_variant:Nn \tl_remove_once:Nn { NV }
+\cs_generate_variant:Nn \tl_replace_all:Nnn { Non , Noe }
 \cs_generate_variant:Nn \tl_replace_once:Nnn { Non }
 \cs_generate_variant:Nn \tl_rescan:nn { no , ne }
 \cs_generate_variant:Nn \tl_set:Nn { Ne }
@@ -132,6 +197,7 @@
 \cs_generate_variant:Nn \prop_item:Nn { Ne , ce }
 \cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee }
 \cs_generate_variant:Nn \iow_now:Nn { Ne }
+\cs_generate_variant:Nn \msg_error:nnn { nno }
 \cs_generate_variant:Nn \msg_error:nnnn { nnoo }
 \cs_generate_variant:Nn \msg_log:nnn { nne }
 
@@ -591,6 +657,27 @@
     \tl_set:Ne \l__jsonparse_temp_tl {#1}
     \cs_set_eq:NN \" \__jsonparse_tex_quote
     \cs_set_eq:NN \\ \__jsonparse_tex_backslash 
+    \bool_if:NT \l__jsonparse_escape_number_sign_bool {
+      \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_hash_str } { \c_backslash_str \c_hash_str }
+    }
+    \bool_if:NT \l__jsonparse_escape_dollar_sign_bool {
+      \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_dollar_str } { \c_backslash_str \c_dollar_str }
+    }
+    \bool_if:NT \l__jsonparse_escape_percent_sign_bool {
+      \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_percent_str } { \c_backslash_str \c_percent_str }
+    }
+    \bool_if:NT \l__jsonparse_escape_ampersand_bool {
+      \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_ampersand_str } { \c_backslash_str \c_ampersand_str }
+    }
+    \bool_if:NT \l__jsonparse_escape_circumflex_accent_bool {
+      \tl_replace_all:Non \l__jsonparse_temp_tl { \c_circumflex_str } { \textasciicircum }
+    }
+    \bool_if:NT \l__jsonparse_escape_low_line_bool {
+      \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_underscore_str } { \c_backslash_str \c_underscore_str }
+    }
+    \bool_if:NT \l__jsonparse_escape_tilde_bool {
+      \tl_replace_all:Non \l__jsonparse_temp_tl { \c_tilde_str } { \textasciitilde }
+    }
     \tl_rescan:no { } { \l__jsonparse_temp_tl }
   \group_end:
 }
@@ -670,6 +757,10 @@
   \group_end:
 }
 
+\tl_new:N \JSONParseArrayIndex 
+\tl_new:N \JSONParseArrayKey 
+\tl_new:N \JSONParseArrayValue 
+
 \NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } {
   \group_begin:
     \jsonparse_filter:Nn #2 {#3}



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