diff options
author | Norbert Preining <norbert@preining.info> | 2022-10-22 03:01:21 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-10-22 03:01:21 +0000 |
commit | 3183c46c6fe93c96cf342a65ba2ac2b74a14dcbd (patch) | |
tree | 256d81eebebf8e4aee8d2885c462164404e854ff /macros/latex/contrib/qrbill | |
parent | b3bdf86b91849c38a256c86082770bf854db7610 (diff) |
CTAN sync 202210220301
Diffstat (limited to 'macros/latex/contrib/qrbill')
-rw-r--r-- | macros/latex/contrib/qrbill/README.md | 6 | ||||
-rw-r--r-- | macros/latex/contrib/qrbill/qrbill.dtx | 58 | ||||
-rw-r--r-- | macros/latex/contrib/qrbill/qrbill.pdf | bin | 86369 -> 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 Binary files differindex fe8ddd638a..3684e2c948 100644 --- a/macros/latex/contrib/qrbill/qrbill.pdf +++ b/macros/latex/contrib/qrbill/qrbill.pdf |