summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/qrbill
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-10-22 03:01:21 +0000
committerNorbert Preining <norbert@preining.info>2022-10-22 03:01:21 +0000
commit3183c46c6fe93c96cf342a65ba2ac2b74a14dcbd (patch)
tree256d81eebebf8e4aee8d2885c462164404e854ff /macros/latex/contrib/qrbill
parentb3bdf86b91849c38a256c86082770bf854db7610 (diff)
CTAN sync 202210220301
Diffstat (limited to 'macros/latex/contrib/qrbill')
-rw-r--r--macros/latex/contrib/qrbill/README.md6
-rw-r--r--macros/latex/contrib/qrbill/qrbill.dtx58
-rw-r--r--macros/latex/contrib/qrbill/qrbill.pdfbin86369 -> 86225 bytes
3 files changed, 43 insertions, 21 deletions
diff --git a/macros/latex/contrib/qrbill/README.md b/macros/latex/contrib/qrbill/README.md
index 8079883d18..03eff67b34 100644
--- a/macros/latex/contrib/qrbill/README.md
+++ b/macros/latex/contrib/qrbill/README.md
@@ -4,7 +4,7 @@ Copyright (C) Marei Peischl (peiTeX) <marei@peitex.de>, 2020–2022
This work is part of a collaborative project of Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
-qrbill 2022/10/18 v1.06
+qrbill 2022/10/20 v1.07
***************************************************************************
@@ -77,4 +77,6 @@ For further information on l3build and other options please have a look at the c
* v1.06 (2022-10-18)
- additional customization for vrule
- add possibilities to ignore data fields if empty
- - allow the usage of commas within the billing info \ No newline at end of file
+ - allow the usage of commas within the billing info
+ * v1.07 (2022-10-20)
+ - fix utf8 encoding für qrmode=package \ No newline at end of file
diff --git a/macros/latex/contrib/qrbill/qrbill.dtx b/macros/latex/contrib/qrbill/qrbill.dtx
index fab4a79821..6d169404d5 100644
--- a/macros/latex/contrib/qrbill/qrbill.dtx
+++ b/macros/latex/contrib/qrbill/qrbill.dtx
@@ -54,7 +54,7 @@
% \fi
% \iffalse
%<*driver>
-\ProvidesFile{qrbill.dtx}[2022/10/18 v1.06 \ create QR-bills based on the Swiss standard]
+\ProvidesFile{qrbill.dtx}[2022/10/20 v1.07 \ create QR-bills based on the Swiss standard]
\documentclass[english, parskip=half-]{scrartcl}
\usepackage{iftex}
\ifPDFTeX
@@ -514,7 +514,7 @@
% \section{Implementation}
% \begin{macrocode}
\RequirePackage{expl3}
-\ProvidesExplPackage{qrbill}{2022/10/18}{1.06}{
+\ProvidesExplPackage{qrbill}{2022/10/20}{1.07}{
Template for QR-bills based on the Swiss Payment Standards
}
\RequirePackage{iftex}
@@ -690,16 +690,7 @@
\dim_new:N \g_qrbill_QRcode_dim
\dim_gset:Nn \g_qrbill_QRcode_dim {46mm}
\bool_if:NT \g__qrbill_luamode_bool {
- \file_if_exist:nTF {qrencode.lua} {
- \lua_load_module:n {qrbill-latexluaqrcode}
- } {
- \msg_new:nnn {qrbill} {luaqrcode-not-found} {
- Could~not~find~the~required~library~for~qrmode=lua.\\
- I~will~switch~to~qrmode=package.
- }
- \msg_warning:nn {qrbill} {luaqrcode-not-found}
- \bool_gset_false:N \g__qrbill_luamode_bool
- }
+ \lua_load_module:n {qrbill-latexluaqrcode}
% qrcode setup
\dim_new:N \l__qrbill_QRblocksize_dim
@@ -719,6 +710,10 @@
}
}
+% \end{macrocode}
+% \changes{v1.07}{2022/10/20}{patch the qrcode package to work with utf-8 strings}
+% \begin{macrocode}
+
\bool_if:NF \g__qrbill_luamode_bool {
\usepackage{qrcode}
% modified version of \qr@encode@binary to allow utf8 qrcodes required by swiss qrbill scheme
@@ -731,17 +726,16 @@
%
%First, the mode indicator.
\def\qr@codetext{4}% %This means `binary'
- %
- %Next, the character count.
- \xdef\qr@stringlength{\tl_count:o {\qr@plaintext}}%
+ % patch character count mechanism, because we have to encode to hex before counting so the package does accept our utf8 string
+ \__qrbill_qr_get_string_length_encoded:n { \qr@plaintext }
%Set \qr@charactercountlengthinhex to \qr@charactercountbits@byte/4%
\edef\qr@charactercountlengthinhex{\int_eval:n {\qr@charactercountbits@byte / 4}}%
\qr@decimaltohex[\qr@charactercountlengthinhex]{\qr@charactercount}{\qr@stringlength}%
\xa\g@addto@macro\xa\qr@codetext\xa{\qr@charactercount}%
%
%Now comes the actual data.
- \exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str { \qr@plaintext } {iso88591} {utf8}
- \exp_args:NNV \str_set_convert:Nnnn \l_tmpa_str \l_tmpa_str {} {latin1/hex}
+ \exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str { \qr@plaintext } {} {utf8/hex}
+
\str_gput_right:NV \qr@codetext \l_tmpa_str
\xdef\qr@codetext{\exp_args:No \str_lowercase:n {\qr@codetext}}
%Now the terminator.
@@ -769,8 +763,33 @@
}
\cs_set:Nn \qrbill_parse_QRcode:n {
\cs_set_eq:NN \qr@encode@binary \__qrbill_encode_unicode_binary:n
- \raisebox{\depth}{\cs_set_eq:NN \qr@encode@binary \__qrbill_encode_unicode_binary:n\qrcode[height= \g_qrbill_QRcode_dim]{#1}}
+ \raisebox{\depth}{
+ \__qrbill_enable_unicode_qrcode_patch:
+ \qrcode[height= \g_qrbill_QRcode_dim]{#1}
+ }
}
+
+ \cs_new:Nn \__qrbill_qr_get_string_length_encoded:n {%
+ \exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str { #1 } {} {utf8/hex}
+ \xdef\qr@stringlength{\int_eval:n {\str_count:N \l_tmpa_str / 2}}
+ }
+
+ \cs_new:Nn \__qrbill_qr_padatfront:nn {%
+ % #1 = macro containing text to pad
+ % #2 = desired number of characters
+ % Pads a number with initial zeros.
+ \prg_replicate:nn {\int_max:nn {0} {#2- \tl_count:N #1}} {
+ \qr@g@preface@macro{#1}{0}
+ }
+ }
+
+ \let\orig@qr@getstringlength\qr@getstringlength
+
+ \cs_new:Nn \__qrbill_enable_unicode_qrcode_patch: {
+ \cs_set_eq:NN \qr@padatfront \__qrbill_qr_padatfront:nn
+ \AddToHook{cmd/qr@choose@best@version/before}{\cs_set_eq:NN \qr@getstringlength\__qrbill_qr_get_string_length_encoded:n}
+ \AddToHook{cmd/qr@choose@best@version/after}{\let\qr@getstringlength\orig@qr@getstringlength}
+ }
}
\cs_generate_variant:Nn \qrbill_parse_QRcode:n {V}
@@ -1182,7 +1201,8 @@
}
}
%necessary to preserve spaces!
- \str_replace_all:Nnn \l_qrbill_data_str {~ } {\ }
+ \bool_if:NF \g__qrbill_luamode_bool
+ { \str_replace_all:Nnn \l_qrbill_data_str {~ } {\ } }
\prop_map_inline:Nn \g__qrbill_replacement_prop {
\str_replace_all:Nnn \l_qrbill_data_str {##1} {##2}
}
diff --git a/macros/latex/contrib/qrbill/qrbill.pdf b/macros/latex/contrib/qrbill/qrbill.pdf
index fe8ddd638a..3684e2c948 100644
--- a/macros/latex/contrib/qrbill/qrbill.pdf
+++ b/macros/latex/contrib/qrbill/qrbill.pdf
Binary files differ