texlive[64773] Master/texmf-dist: qrbill (21oct22)

commits+karl at tug.org commits+karl at tug.org
Fri Oct 21 21:40:14 CEST 2022


Revision: 64773
          http://tug.org/svn/texlive?view=revision&revision=64773
Author:   karl
Date:     2022-10-21 21:40:14 +0200 (Fri, 21 Oct 2022)
Log Message:
-----------
qrbill (21oct22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/qrbill/README.md
    trunk/Master/texmf-dist/doc/latex/qrbill/qrbill.pdf
    trunk/Master/texmf-dist/source/latex/qrbill/qrbill.dtx
    trunk/Master/texmf-dist/source/latex/qrbill/qrbill.ins
    trunk/Master/texmf-dist/tex/latex/qrbill/qrbill.sty
    trunk/Master/texmf-dist/tex/latex/qrbill/swiss.qrbill-cfg.tex

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-letter-demo.tex
    trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-standalone-demo.tex

Modified: trunk/Master/texmf-dist/doc/latex/qrbill/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/qrbill/README.md	2022-10-21 19:39:53 UTC (rev 64772)
+++ trunk/Master/texmf-dist/doc/latex/qrbill/README.md	2022-10-21 19:40:14 UTC (rev 64773)
@@ -4,7 +4,7 @@
 
 This work is part of a collaborative project of Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
 
-qrbill 2022/09/15 v1.05
+qrbill 2022/10/20 v1.07
 
 ***************************************************************************
 
@@ -65,12 +65,18 @@
  * v1.03 (2021-05-10)
    - Update to swiss qrbill payments standard v2.2
    - Add seb-iban and sep-reference to the example files
- * v1.04 (2022/07/02)
+ * v1.04 (2022-07-02)
    - add basic support for EPC QR codes
    - add date parsing mechanism to preset the dates to values of `\today`
- * v1.05 (2022/09/15)
+ * v1.05 (2022-09-15)
    - add option to convert all data to strings
    - add mechanism to do custom replacements within the data
    - fix qrcode encoding to support UTF-8
    - add support for speedata's luaqrcode library for qrcode generation http://speedata.github.io/luaqrcode/
-   - small layout and documentation fixes
\ No newline at end of file
+   - small layout and documentation fixes
+ * 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
+ * v1.07 (2022-10-20)
+   - fix utf8 encoding für qrmode=package
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-letter-demo.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-letter-demo.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-letter-demo.tex	2022-10-21 19:40:14 UTC (rev 64773)
@@ -0,0 +1,95 @@
+%%
+%% This is file `qrbill-letter-demo.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% qrbill.dtx  (with options: `qrbill-letter-demo.tex')
+%% 
+%% Copyright (C) 2020–2022 by Marei Peischl (peiTeX) <marei at peitex.de>
+%% 
+%% This work is a collaboration of
+%%   Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status `maintained'.
+%% 
+%% The Current Maintainer of this work is
+%%   Marei Peischl <qrbill at peitex.de>.
+%% 
+%% This work consists of the files
+%% qrbill.dtx and qrbill.ins, qrbill-vocab.csv
+%% and the derived files
+%% qrbill.sty, swiss.qrbill-cfg.tex, epc.qrbill-cfg.tex,
+%% qrbill-letter-demo.tex, qrbill-standalone-demo.tex.
+%% 
+%% The development repository can be found at
+%% https://github.com/peitex/qrbill
+%% Please use the issue tracker for feedback!
+%% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[foldmarks=b]{scrletter}
+\usepackage[
+  frame=top,
+  sep-iban=4,
+  sep-reference=-5,
+]{qrbill}
+
+\DeclareNewLayer[
+align=bl,
+voffset=\paperheight,
+hoffset=0pt,
+contents={\QRbill},
+width=\paperwidth,
+height=105mm,
+]{qrbill}
+
+\begin{document}
+
+\qrbillsetdata{
+  creditor*={foobar LLC\\
+Postfach\\
+404\\
+2342\\
+Zurich\\
+CH},
+  Account=CH1280808005649899718,
+  vat=123123123,% VAT number with stripped CH and periods
+  debtor*={peiTeX\\
+TeXnikerweg\\
+78\\
+23420\\
+Hamburg\\
+DE},
+  Amount=1337.42,
+  Message=Bestellung vom 27.06.2020,
+  invoicenum=100-4242,
+  vatdetails=0,% 0% VAT
+  AV1=LX;F00BAR;2342,
+}
+
+\setkomavar{fromaddress}{\insertcreditor}
+
+\begin{letter}{\insertdebtor}
+
+\opening{opening}
+
+Text
+
+\closing{closing}
+
+\AddLayersToPageStyle{@everystyle@}{qrbill}
+
+\end{letter}
+\end{document}
+\endinput
+%%
+%% End of file `qrbill-letter-demo.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-letter-demo.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-standalone-demo.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-standalone-demo.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-standalone-demo.tex	2022-10-21 19:40:14 UTC (rev 64773)
@@ -0,0 +1,77 @@
+%%
+%% This is file `qrbill-standalone-demo.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% qrbill.dtx  (with options: `qrbill-standalone-demo.tex')
+%% 
+%% Copyright (C) 2020–2022 by Marei Peischl (peiTeX) <marei at peitex.de>
+%% 
+%% This work is a collaboration of
+%%   Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%    http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status `maintained'.
+%% 
+%% The Current Maintainer of this work is
+%%   Marei Peischl <qrbill at peitex.de>.
+%% 
+%% This work consists of the files
+%% qrbill.dtx and qrbill.ins, qrbill-vocab.csv
+%% and the derived files
+%% qrbill.sty, swiss.qrbill-cfg.tex, epc.qrbill-cfg.tex,
+%% qrbill-letter-demo.tex, qrbill-standalone-demo.tex.
+%% 
+%% The development repository can be found at
+%% https://github.com/peitex/qrbill
+%% Please use the issue tracker for feedback!
+%% 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass{standalone}
+\usepackage[nswissgerman]{babel}
+
+\RequirePackage{xcolor}
+\usepackage[
+  icon=swiss-cross,
+  separate=false,
+  sep-iban=4,
+  sep-reference=-5
+]{qrbill}
+
+\begin{document}
+
+\QRbill[
+  creditor*={foobar LLC\\
+Postfach\\
+404\\
+2342\\
+Zurich\\
+CH},
+  Account=CH1280808005649899718,
+  vat=123123123,% VAT number with stripped CH and periods
+  debtor*={peiTeX\\
+TeXnikerweg\\
+78\\
+23420\\
+Hamburg\\
+DE},
+  Amount=1337.42,
+  Message=Bestellung vom 27.06.2020,
+  invoicenum=100-4242,
+  vatdetails=0,% 0% VAT
+  AV1=LX;F00BAR;2342,
+]
+
+\end{document}
+\endinput
+%%
+%% End of file `qrbill-standalone-demo.tex'.


Property changes on: trunk/Master/texmf-dist/doc/latex/qrbill/qrbill-standalone-demo.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/qrbill/qrbill.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/qrbill/qrbill.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/qrbill/qrbill.dtx	2022-10-21 19:39:53 UTC (rev 64772)
+++ trunk/Master/texmf-dist/source/latex/qrbill/qrbill.dtx	2022-10-21 19:40:14 UTC (rev 64773)
@@ -54,7 +54,7 @@
 % \fi
 % \iffalse
 %<*driver>
-\ProvidesFile{qrbill.dtx}[2022/09/15 v1.05 \ 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
@@ -86,9 +86,9 @@
 \newcommand*\repl[1]{\meta{#1}}
 \newcommand*\opt[1]{\colorbox{black!20}{\meta{#1}}}
 \newcommand*\marg[1]{%
-        {\ttfamily\char`\{}\repl{#1}{\ttfamily\char`\}}}
+	{\ttfamily\char`\{}\repl{#1}{\ttfamily\char`\}}}
 \newcommand*\oarg[1]{%
-        {\ttfamily[}\opt{#1}{\ttfamily]}
+	{\ttfamily[}\opt{#1}{\ttfamily]}
 }
 \newcommand*{\sarg}{\texttt{*}}
 
@@ -174,7 +174,7 @@
 % \GetFileInfo{qrbill.dtx}
 %
 % \DoNotIndex{\newcommand,\newenvironment}
-% \title{qrbill v1.03}
+% \title{qrbill \fileversion}
 % \subtitle{\LaTeX-package to create QR-bills based on the Swiss payments standards}
 % \author{Marei Peischl \href{mailto:marei at peitex.de}{<marei at peitex.de>}}
 % \publishers{A collaborative project of pei\TeX{} and foobar LLC}
@@ -192,16 +192,16 @@
 % \fi
 % \section{Example of use}
 % The easies way to use the qrbill package is to create a bill with the standalone documentclass:
-% 
+%
 % \begin{doccode}
 % \documentclass{standalone}
 % \usepackage[ngerman]{babel}
-% 
+%
 % \usepackage{xcolor}
 % \usepackage{qrbill}
-% 
+%
 % \begin{document}
-% 	
+%
 % \QRbill[
 % creditor={foobar LLC\\
 % 	Postfach 404\\
@@ -210,7 +210,7 @@
 % Account=CH1280808005649899718,
 % % insert additional data here
 % ]
-% 
+%
 % \end{document}
 % \end{doccode}
 %
@@ -278,6 +278,11 @@
 % \item[iconwidth (length) (7mm)]
 % This option allows custom scaling for custom icons.
 %
+% \item[ignore-if-empty (comma list) (<empty>)]
+% Allows to define a list of fields for the qrscheme to be ignored if they have empty values.
+% For the swiss QRbill standard this is recommended for the fields \enquote{AV1-Parameters}, \enquote{AV2-Parameters} and \enquote{BillingInfo}.
+% \changes{v1.06}{2022/10/18}{Add ignore-if-empty option}
+%
 % \item[qrmode (package/lua) (package)] Selects the mechanism for QRcode generation.
 % With Version 2.0 the package supports usage of the the luaqrcode library \cite{luaqrcode}. This can be enabled by using the \latexinline{qmode=lua} option.
 % In that case the luaqrcode libary has to be installed within the \verb+$LUAINPUTS+.
@@ -319,7 +324,11 @@
 % Similarly the replace-umlauts options is mapping Umlauts to the two character representation. This can be used  if UTF-8 is not supported.
 % Custom replacements can be set up using \latexinline{\QRbillAddCustomReplacement} as described in section \ref{sec:custom-replacement}.
 % \changes{v1.05}{2022/09/15}{Add replace-tilde/replace-umlauts options}
-% 
+%
+% \item[vrule (true/false/symbol) (true)]
+% Allows customization of the vertical rule between payment part and receipt. The value \latexinline{vrule=symbol} acts similar to the \latexinline{separator=symbol} option.
+% \changes{v1.06}{2022/10/18}{Add vrule=symbol option.}
+%
 % \end{optionlist}
 %
 % \section{Data setup}
@@ -505,7 +514,7 @@
 % \section{Implementation}
 %    \begin{macrocode}
 \RequirePackage{expl3}
-\ProvidesExplPackage{qrbill}{2022/09/15}{1.05}{
+\ProvidesExplPackage{qrbill}{2022/10/20}{1.07}{
   Template for QR-bills based on the Swiss Payment Standards
 }
 \RequirePackage{iftex}
@@ -529,7 +538,7 @@
 
 \keys_define:nn {qrbill} {
   font .choices:nn = {Frutiger, Arial, Helvetica, Liberation Sans} {
-    \tl_gset_eq:NN \g__qrbill_font_tl \l_keys_choice_tl
+		\tl_gset_eq:NN \g__qrbill_font_tl \l_keys_choice_tl
   },
   font .initial:n = Liberation Sans,
   font / custom .code:n = {\tl_gclear:N \g__qrbill_font_tl},
@@ -545,42 +554,54 @@
   qrmode .initial:n = package,
   frame .choice:,
   frame / false .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+		\bool_gset_false:N \g__qrbill_top_frame_bool
+		\bool_gset_false:N \g__qrbill_bottom_frame_bool
+		\bool_gset_false:N \g__qrbill_left_frame_bool
+		\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / true .code:n = {
-    \bool_gset_true:N \g__qrbill_top_frame_bool
-    \bool_gset_true:N \g__qrbill_bottom_frame_bool
-    \bool_gset_true:N \g__qrbill_left_frame_bool
-    \bool_gset_true:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+		\bool_gset_true:N \g__qrbill_top_frame_bool
+		\bool_gset_true:N \g__qrbill_bottom_frame_bool
+		\bool_gset_true:N \g__qrbill_left_frame_bool
+		\bool_gset_true:N \g__qrbill_right_frame_bool
   },
   frame / top .code:n = {
-    \bool_gset_true:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+		\bool_gset_true:N \g__qrbill_top_frame_bool
+		\bool_gset_false:N \g__qrbill_bottom_frame_bool
+		\bool_gset_false:N \g__qrbill_left_frame_bool
+		\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / bottom .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_true:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+		\bool_gset_false:N \g__qrbill_top_frame_bool
+		\bool_gset_true:N \g__qrbill_bottom_frame_bool
+		\bool_gset_false:N \g__qrbill_left_frame_bool
+		\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / none .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_false:N \g__qrbill_vrule_bool
+		\bool_gset_false:N \g__qrbill_top_frame_bool
+		\bool_gset_false:N \g__qrbill_bottom_frame_bool
+		\bool_gset_false:N \g__qrbill_left_frame_bool
+		\bool_gset_false:N \g__qrbill_right_frame_bool
+		\keys_set:nn {qrbill} {vrule=false}
   },
-
   frame .initial:n = true,
+  vrule .choice:,
+  vrule / true .code:n = \tl_gset:Nn \g__qrbill_vrule_tl {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}},
+  vrule / false .code:n = \tl_gset:Nn \g__qrbill_vrule_tl {\rule{\g__qrbill_rule_dim}{\c_zero_dim}},
+	vrule / symbol .code:n =  {
+		\RequirePackage{marvosym}
+		\tl_gset:Nn \g__qrbill_vrule_tl {
+			\rotatebox{90}{
+				\hbox_to_wd:nn {\c_qrbill_height_dim}{
+					\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
+					\llap{\raisebox{-.5\height}[\c_zero_dim][\c_zero_dim]{\LeftScissors}}
+					\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
+					\hbox{\rule{1mm}{\g__qrbill_rule_dim}}
+				}
+			}
+		}
+	},
+	vrule .initial:n = true,
   billinginfo .bool_gset:N = \g__grbill_billinginfo_auto_bool,
   billinginfo .default:n = true,
   billinginfo .initial:n = true,
@@ -592,31 +613,30 @@
   iconwidth .initial:n = 7mm,
   separate .choice:,
   separate / symbol .code:n = {
-    \bool_gset_true:N \g__qrbill_separateinfo_bool
-    \RequirePackage{marvosym}
-    \cs_set:Nn \qrbill_print_separate_info: {
-      \par\leaders\vbox_to_ht:nn {1sp} {
-        \smash{
-        \hbox_to_wd:nn {\c_qrbill_width_dim }{
-            \leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
-            \llap{\raisebox{-.5\height}{\LeftScissors}}
-            \leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
-        }
-        }
-      }
-      \vskip 1sp
-      \vskip -1sp
-    }
-    },
+		\bool_gset_true:N \g__qrbill_separateinfo_bool
+		\RequirePackage{marvosym}
+		\cs_set:Nn \qrbill_print_separate_info: {
+			\par\leaders\vbox_to_ht:nn {1sp} {
+				\smash{
+					\hbox_to_wd:nn {\c_qrbill_width_dim }{
+						\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
+						\llap{\raisebox{-.5\height}{\LeftScissors}}
+						\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
+					}
+				}
+			}
+			\vskip 1sp
+			\vskip -1sp
+		}
+	},
   separate / text .code:n = {
-    \bool_gset_true:N \g__qrbill_separateinfo_bool
-    \cs_set:Nn \qrbill_print_separate_info: {
-        \centerline{\raisebox{\dimexpr\depth+.3ex\relax}[0pt][0pt]{\footnotesize\qrbillseparatename}}
-    \par\nointerlineskip
-    \rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}
-    }
-  }
-  ,
+		\bool_gset_true:N \g__qrbill_separateinfo_bool
+		\cs_set:Nn \qrbill_print_separate_info: {
+			\centerline{\raisebox{\dimexpr\depth+.3ex\relax}[0pt][0pt]{\footnotesize\qrbillseparatename}}
+			\par\nointerlineskip
+			\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}
+		}
+  },
   separate / false .code:n = {\bool_gset_false:N \g__qrbill_separateinfo_bool},
   separate .initial:n = text,
   sep-iban .int_gset:N = \g__qrbill_ibansep_int,
@@ -636,6 +656,8 @@
   replace-umlauts / true .code:n = \prop_gput_from_keyval:Nn \g__qrbill_replacement_prop {ä=ae,Ä=AE,ü=ue,Ü=UE,ö=oe,Ö=OE,ß=ss,ẞ=SS},
   replace-umlauts / false .code:n = \clist_map_inline:nn {ä,Ä,ü,Ü,ö,Ö,ß,ẞ} {\prop_gremove:Nn \g__qrbill_replacement_prop {##1}},
   data-to-string .bool_gset:N = \g__qrbill_to_string_bool,
+  ignore-if-empty  .clist_gset:N = \g__qrbill_ignore_if_empty_clist,
+  ignore-if-empty .initial:n = ,
 }
 
 \ProcessKeysOptions{qrbill}
@@ -668,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
@@ -697,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 at encode@binary to allow utf8 qrcodes required by swiss qrbill scheme
@@ -709,9 +726,8 @@
 		%
 		%First, the mode indicator.
 		\def\qr at codetext{4}% %This means `binary'
-		%
-		%Next, the character count.
-		\xdef\qr at stringlength{\tl_count:o {\qr at 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 at plaintext }
 		%Set \qr at charactercountlengthinhex to \qr at charactercountbits@byte/4%
 		\edef\qr at charactercountlengthinhex{\int_eval:n {\qr at charactercountbits@byte / 4}}%
 		\qr at decimaltohex[\qr at charactercountlengthinhex]{\qr at charactercount}{\qr at stringlength}%
@@ -718,8 +734,8 @@
 		\xa\g at addto@macro\xa\qr at codetext\xa{\qr at charactercount}%
 		%
 		%Now comes the actual data.
-		\exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str  { \qr at 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 at plaintext }  {} {utf8/hex}
+
 		\str_gput_right:NV \qr at codetext \l_tmpa_str
 		\xdef\qr at codetext{\exp_args:No \str_lowercase:n {\qr at codetext}}
 		%Now the terminator.
@@ -747,8 +763,33 @@
 	}
   \cs_set:Nn \qrbill_parse_QRcode:n {
 		\cs_set_eq:NN \qr at encode@binary \__qrbill_encode_unicode_binary:n
-		\raisebox{\depth}{\cs_set_eq:NN \qr at 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 at 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 at g@preface at macro{#1}{0}
+		}
+	}
+
+	\let\orig at qr@getstringlength\qr at getstringlength
+
+	\cs_new:Nn \__qrbill_enable_unicode_qrcode_patch: {
+		\cs_set_eq:NN \qr at padatfront \__qrbill_qr_padatfront:nn
+		\AddToHook{cmd/qr at choose@best at version/before}{\cs_set_eq:NN \qr at getstringlength\__qrbill_qr_get_string_length_encoded:n}
+		\AddToHook{cmd/qr at choose@best at version/after}{\let\qr at getstringlength\orig at qr@getstringlength}
+	}
 }
 
 \cs_generate_variant:Nn \qrbill_parse_QRcode:n {V}
@@ -797,13 +838,13 @@
 
 \cs_new:Nn \__qrbill_placeholder:nn {
   \vbox_to_ht:nn {#2} {
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
-    \nointerlineskip
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
-    \vfill
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
-    \nointerlineskip
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
+		\hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
+		\nointerlineskip
+		\hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
+		\vfill
+		\hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
+		\nointerlineskip
+		\hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
   }
 }
 
@@ -813,172 +854,170 @@
   \qrbillfont
   \setlength{\parindent}{\z@}
   \parbox{\c_qrbill_width_dim }{
-    \vbox to \c_qrbill_height_dim {
-      \bool_if:NTF \g__qrbill_top_frame_bool
-        {
-          \bool_if:NTF \g__qrbill_separateinfo_bool
-            {\qrbill_print_separate_info:}
-            {\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}
-        }
-        {\rule{\c_zero_dim}{\g__qrbill_rule_dim}}
-      \par\nointerlineskip
-      \skip_vertical:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
-      \skip_horizontal:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
-      \begin{minipage}[c][95mm][t]{52mm}
-        \vbox_to_ht:nn {7mm} {\qrbill_title_font:\qrbillreceiptname}
-        \par\nointerlineskip
-        \vbox_to_ht:nn {56mm}{
-          {\qrbill_headingR_font:\qrbillaccountname\par}
-          {
-            \qrbill_valueR_font:
-            \__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl\par
-            \qrbill_insert_address:N \g__qrbill_creditorprefix_tl
-            \par\vskip\baselineskip
-          }
-          \tl_if_empty:NF \l_qrbill_data_Reference_tl {
-            {\qrbill_headingR_font:\qrbillreferencename\par}
-            {
-              \qrbill_valueR_font:
-              \__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
-              \par\vskip\baselineskip
-            }
-          }
-          \tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl}
-             {
-               {\qrbill_headingR_font:\qrbilldebtoraddrname\par}
-               \__qrbill_placeholder:nn {52mm} {20mm}
-             }{
-               {\qrbill_headingR_font:\qrbilldebtorname\par}
-               {
-                 \qrbill_valueR_font:
-                 \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
-                 \par
-               }
-             }
-        }
-        \par\nointerlineskip
-        \vbox_to_ht:nn {14mm}{
-          \qrbill_headingR_font:
-          \begin{tabular}[t]{@{}ll@{}}
-            \qrbillcurrencyname&\qrbill_headingR_font:\qrbillamountname\\
-            \qrbill_amountR_font:\l_qrbill_data_Currency_tl
-              &\qrbill_amountR_font:
-                \tl_if_empty:NF \l_qrbill_data_Amount_tl
-                   {\numprint{\l_qrbill_data_Amount_tl}}
-          \end{tabular}
-          \tl_if_empty:NTF \l_qrbill_data_Amount_tl {
-            \hfill
-            \raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{\llap{
-                \__qrbill_placeholder:nn {30mm} {10mm}
-            }}
-          }
-          \vfill
-        }
-        \par\nointerlineskip
-        \vbox_to_ht:nn {18mm} {
-          \makebox[\linewidth][r]{\qrbill_headingR_font:\qrbillacceptantname}\par
-        }
-      \end{minipage}%
-      \skip_horizontal:n {2\c_qrbill_sep_dim}
-      \begin{minipage}[c][95mm][t]{138mm}
-        \begin{minipage}[c][85mm][t]{51mm}
-          \parbox[t][7mm][t]{\linewidth}{\qrbill_title_font:\qrbillpaymentpartname}
-          \par\nointerlineskip
-          \skip_vertical:n {\c_qrbill_sep_dim}
-          \qrcode_setup_QRcode:
-          \leavevmode\qrbill_parse_QRcode:V \l_qrbill_data_str
-          \tl_if_empty:NF \g_qrbill_icon_tl {
-            \llap{\hbox_to_wd:nn {\g_qrbill_QRcode_dim} {
-                \hfill
-                \raisebox{\dimexpr-.5\height+.5\g_qrbill_QRcode_dim}[0pt][0pt]{
-                  \includegraphics[width=\g_qrbill_iconwidth_dim]{\g_qrbill_icon_tl}
-                }
-                \hfill
-            }}
-          }
-          \skip_vertical:n {\c_qrbill_sep_dim}
-          \vbox_to_ht:nn {22mm}{
-            \begin{tabular}[b]{@{}ll@{}}
-              \qrbill_headingP_font:\qrbillcurrencyname&\qrbill_headingP_font:
-                \qrbillamountname\\
-              \qrbill_amountP_font:\tl_use:c {l_qrbill_data_Currency_tl}&
-              \tl_if_empty:NF \l_qrbill_data_Amount_tl {
-                \qrbill_amountP_font:\numprint{\l_qrbill_data_Amount_tl}
-              }
-            \end{tabular}
-            \tl_if_empty:NTF \l_qrbill_data_Amount_tl {
-              \hfill
-              \raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{
-                \llap{\__qrbill_placeholder:nn {40mm} {15mm}
-              }}
-            }
-          }
-        \end{minipage}
-        \begin{minipage}[c][85mm][t]{87mm}
-          \par\nointerlineskip
-          {\qrbill_headingP_font:\qrbillaccountname\par}
-          {
-            \qrbill_valueP_font:
-            \__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl \par
-            \qrbill_insert_address:N \g__qrbill_creditorprefix_tl
-            \par\vskip\baselineskip
-          }
-          \tl_if_empty:NF \l_qrbill_data_Reference_tl {
-            {\qrbill_headingP_font:\qrbillreferencename\par}
-            {\qrbill_valueP_font:
-              \__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
-              \par\vskip\baselineskip}
-          }
-          \exp_args:Nf \tl_if_empty:nF  {
-            \l_qrbill_data_BillingInfo_tl
-            \l_qrbill_data_Message_tl
-          }{
-            {\qrbill_headingP_font:\qrbilladdinfoname\par}
-            {
-              \qrbill_valueP_font:
-              \l_qrbill_data_Message_tl\par
-              \tl_replace_all:Nnn \l_qrbill_data_BillingInfo_tl {/} {\discretionary{}{}{}/}
-              \l_qrbill_data_BillingInfo_tl
-              \par\vskip\baselineskip
-            }
-          }
-          \tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl} {
-            {\qrbill_headingP_font:\qrbilldebtoraddrname\par}
-            \__qrbill_placeholder:nn {65mm} {25mm}
-          }{
-            {\qrbill_headingP_font:\qrbilldebtorname\par}
-            {
-              \qrbill_valueP_font:
-              \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
-              \par
-            }
-          }
-        \end{minipage}\par\nointerlineskip
-        \begin{minipage}[b][10mm][t]{\linewidth}
-          \strut
-          \qrbill_insert_AV_parameters:NNn
-            \qrbill_infoheading_font:
-            \qrbill_info_font:
-            {AV1,AV2}
-        \end{minipage}
-      \end{minipage}
-      \par\nointerlineskip\skip_vertical:n  {\c_qrbill_sep_dim}
-      \smash{
-      \bool_if:NT \g__qrbill_bottom_frame_bool
-        {\rlap{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}}
-      \bool_if:NTF \g__qrbill_left_frame_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      \hspace{\dimexpr62mm-1.5\g__qrbill_rule_dim}
-      \bool_if:NTF \g__qrbill_vrule_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      \hspace{\dimexpr148mm-1.5\g__qrbill_rule_dim}
-      \bool_if:NTF \g__qrbill_right_frame_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      }
-    }
+		\vbox to \c_qrbill_height_dim {
+			\bool_if:NTF \g__qrbill_top_frame_bool
+			{
+				\bool_if:NTF \g__qrbill_separateinfo_bool
+				{\qrbill_print_separate_info:}
+				{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}
+			}
+			{\rule{\c_zero_dim}{\g__qrbill_rule_dim}}
+			\par\nointerlineskip
+			\skip_vertical:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
+			\skip_horizontal:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
+			\begin{minipage}[c][95mm][t]{52mm}
+			\vbox_to_ht:nn {7mm} {\qrbill_title_font:\qrbillreceiptname}
+			\par\nointerlineskip
+			\vbox_to_ht:nn {56mm}{
+				{\qrbill_headingR_font:\qrbillaccountname\par}
+				{
+				\qrbill_valueR_font:
+				\__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl\par
+				\qrbill_insert_address:N \g__qrbill_creditorprefix_tl
+				\par\vskip\baselineskip
+				}
+				\tl_if_empty:NF \l_qrbill_data_Reference_tl {
+				{\qrbill_headingR_font:\qrbillreferencename\par}
+				{
+					\qrbill_valueR_font:
+					\__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
+					\par\vskip\baselineskip
+				}
+				}
+				\tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl}
+				 {
+					 {\qrbill_headingR_font:\qrbilldebtoraddrname\par}
+					 \__qrbill_placeholder:nn {52mm} {20mm}
+				 }{
+					 {\qrbill_headingR_font:\qrbilldebtorname\par}
+					 {
+					 \qrbill_valueR_font:
+					 \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
+					 \par
+					 }
+				 }
+			}
+			\par\nointerlineskip
+			\vbox_to_ht:nn {14mm}{
+				\qrbill_headingR_font:
+				\begin{tabular}[t]{@{}ll@{}}
+				\qrbillcurrencyname&\qrbill_headingR_font:\qrbillamountname\\
+				\qrbill_amountR_font:\l_qrbill_data_Currency_tl
+					&\qrbill_amountR_font:
+					\tl_if_empty:NF \l_qrbill_data_Amount_tl
+						 {\numprint{\l_qrbill_data_Amount_tl}}
+				\end{tabular}
+				\tl_if_empty:NTF \l_qrbill_data_Amount_tl {
+				\hfill
+				\raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{\llap{
+					\__qrbill_placeholder:nn {30mm} {10mm}
+				}}
+				}
+				\vfill
+			}
+			\par\nointerlineskip
+			\vbox_to_ht:nn {18mm} {
+				\makebox[\linewidth][r]{\qrbill_headingR_font:\qrbillacceptantname}\par
+			}
+			\end{minipage}%
+			\skip_horizontal:n {2\c_qrbill_sep_dim}
+			\begin{minipage}[c][95mm][t]{138mm}
+			\begin{minipage}[c][85mm][t]{51mm}
+				\parbox[t][7mm][t]{\linewidth}{\qrbill_title_font:\qrbillpaymentpartname}
+				\par\nointerlineskip
+				\skip_vertical:n {\c_qrbill_sep_dim}
+				\qrcode_setup_QRcode:
+				\leavevmode\qrbill_parse_QRcode:V \l_qrbill_data_str
+				\tl_if_empty:NF \g_qrbill_icon_tl {
+				\llap{\hbox_to_wd:nn {\g_qrbill_QRcode_dim} {
+					\hfill
+					\raisebox{\dimexpr-.5\height+.5\g_qrbill_QRcode_dim}[0pt][0pt]{
+						\includegraphics[width=\g_qrbill_iconwidth_dim]{\g_qrbill_icon_tl}
+					}
+					\hfill
+				}}
+				}
+				\skip_vertical:n {\c_qrbill_sep_dim}
+				\vbox_to_ht:nn {22mm}{
+				\begin{tabular}[b]{@{}ll@{}}
+					\qrbill_headingP_font:\qrbillcurrencyname&\qrbill_headingP_font:
+					\qrbillamountname\\
+					\qrbill_amountP_font:\tl_use:c {l_qrbill_data_Currency_tl}&
+					\tl_if_empty:NF \l_qrbill_data_Amount_tl {
+					\qrbill_amountP_font:\numprint{\l_qrbill_data_Amount_tl}
+					}
+				\end{tabular}
+				\tl_if_empty:NTF \l_qrbill_data_Amount_tl {
+					\hfill
+					\raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{
+					\llap{\__qrbill_placeholder:nn {40mm} {15mm}
+					}}
+				}
+				}
+			\end{minipage}
+			\begin{minipage}[c][85mm][t]{87mm}
+				\par\nointerlineskip
+				{\qrbill_headingP_font:\qrbillaccountname\par}
+				{
+				\qrbill_valueP_font:
+				\__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl \par
+				\qrbill_insert_address:N \g__qrbill_creditorprefix_tl
+				\par\vskip\baselineskip
+				}
+				\tl_if_empty:NF \l_qrbill_data_Reference_tl {
+				{\qrbill_headingP_font:\qrbillreferencename\par}
+				{\qrbill_valueP_font:
+					\__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
+					\par\vskip\baselineskip}
+				}
+				\exp_args:Nf \tl_if_empty:nF  {
+				\l_qrbill_data_BillingInfo_tl
+				\l_qrbill_data_Message_tl
+				}{
+				{\qrbill_headingP_font:\qrbilladdinfoname\par}
+				{
+					\qrbill_valueP_font:
+					\l_qrbill_data_Message_tl\par
+					\tl_replace_all:Nnn \l_qrbill_data_BillingInfo_tl {/} {\discretionary{}{}{}/}
+					\l_qrbill_data_BillingInfo_tl
+					\par\vskip\baselineskip
+				}
+				}
+				\tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl} {
+				{\qrbill_headingP_font:\qrbilldebtoraddrname\par}
+				\__qrbill_placeholder:nn {65mm} {25mm}
+				}{
+				{\qrbill_headingP_font:\qrbilldebtorname\par}
+				{
+					\qrbill_valueP_font:
+					\qrbill_insert_address:N \g__qrbill_debtorprefix_tl
+					\par
+				}
+				}
+			\end{minipage}\par\nointerlineskip
+			\begin{minipage}[b][10mm][t]{\linewidth}
+				\strut
+				\qrbill_insert_AV_parameters:NNn
+				\qrbill_infoheading_font:
+				\qrbill_info_font:
+				{AV1,AV2}
+			\end{minipage}
+			\end{minipage}
+			\par\nointerlineskip\skip_vertical:n  {\c_qrbill_sep_dim}
+			\smash{
+			\bool_if:NT \g__qrbill_bottom_frame_bool
+			{\rlap{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}}
+			\bool_if:NTF \g__qrbill_left_frame_bool
+			{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
+			{\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
+			\hspace{\dimexpr62mm-1.5\g__qrbill_rule_dim}
+			\g__qrbill_vrule_tl
+			\hspace{\dimexpr148mm-1.5\g__qrbill_rule_dim}
+			\bool_if:NTF \g__qrbill_right_frame_bool
+			{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
+			{\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
+			}
+		}
   }
   \endgroup
 }
@@ -1006,10 +1045,10 @@
 
 \ior_str_map_inline:Nn \qrbill_ior {
   \int_step_inline:nnn {2} {\l_tmpa_int } {
-    \exp_args:Nnx \use:n {\exp_args:NNx \exp_args:Nnc \defcaptionname
-      {\clist_item:Nn \l_qrbill_tmpa_clist {##1}}
-      {qrbill\clist_item:nn {#1} {1}name}}
-        {\clist_item:nn {#1} {##1}}
+		\exp_args:Nnx \use:n {\exp_args:NNx \exp_args:Nnc \defcaptionname
+			{\clist_item:Nn \l_qrbill_tmpa_clist {##1}}
+			{qrbill\clist_item:nn {#1} {1}name}}
+			{\clist_item:nn {#1} {##1}}
   }
 }
 
@@ -1026,13 +1065,13 @@
 		\seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
 	}
   \exp_args:Nnx \keys_set:nn {qrbill/data} {
-    #1AddressType=K,
-    #1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
-    #1Address1=\seq_item:Nn \l_qrbill_tmp_seq {2},
-    #1Address2=\seq_item:Nn \l_qrbill_tmp_seq {3},
-    #1PostalCode=,
-    #1City=,
-    #1Country=\seq_item:Nn \l_qrbill_tmp_seq {4},
+		#1AddressType=K,
+		#1Name={\seq_item:Nn \l_qrbill_tmp_seq {1}},
+		#1Address1={\seq_item:Nn \l_qrbill_tmp_seq {2}},
+		#1Address2={\seq_item:Nn \l_qrbill_tmp_seq {3}},
+		#1PostalCode=,
+		#1City=,
+		#1Country={\seq_item:Nn \l_qrbill_tmp_seq {4}},
   }
 }
 
@@ -1045,13 +1084,13 @@
 		\seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
 	}
   \exp_args:Nnx \keys_set:nn {qrbill/data} {
-    #1AddressType=S,
-    #1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
-    #1Address1=\seq_item:Nn \l_qrbill_tmp_seq {2},
-    #1Address2=\seq_item:Nn \l_qrbill_tmp_seq {3},
-    #1PostalCode=\seq_item:Nn \l_qrbill_tmp_seq {4},
-    #1City=\seq_item:Nn \l_qrbill_tmp_seq {5},
-    #1Country=\seq_item:Nn \l_qrbill_tmp_seq {6},
+		#1AddressType=S,
+		#1Name={\seq_item:Nn \l_qrbill_tmp_seq {1}},
+		#1Address1={\seq_item:Nn \l_qrbill_tmp_seq {2}},
+		#1Address2={\seq_item:Nn \l_qrbill_tmp_seq {3}},
+		#1PostalCode={\seq_item:Nn \l_qrbill_tmp_seq {4}},
+		#1City={\seq_item:Nn \l_qrbill_tmp_seq {5}},
+		#1Country={\seq_item:Nn \l_qrbill_tmp_seq {6}},
   }
 }
 
@@ -1058,27 +1097,27 @@
 \cs_new:Nn \qrbill_insert_address:N {
   \tl_use:c {l_qrbill_data_#1Name_tl}\ifhmode\\\fi
   \str_case_e:nnF {\use:c {l_qrbill_data_#1AddressType_tl}}
-      {
-        {K}     {
-          \tl_use:c {l_qrbill_data_#1Address1_tl}
-          \tl_if_empty:cF {l_qrbill_data_#1Address2_tl} {
-            \ifhmode\\\fi
-            \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
-              {\tl_use:c {l_qrbill_data_#1Country_tl}-}
-              \tl_use:c {l_qrbill_data_#1Address2_tl}
-           }
-        }
-      }{
-        \tl_use:c {l_qrbill_data_#1Address1_tl}~
-        \tl_use:c {l_qrbill_data_#1Address2_tl}
-        \tl_if_empty:cF {l_qrbill_data_#1City_tl} {
-          \ifhmode\\\fi
-          \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
-            {\tl_use:c {l_qrbill_data_#1Country_tl}-}
-          \tl_use:c {l_qrbill_data_#1PostalCode_tl}~
-          \tl_use:c {l_qrbill_data_#1City_tl}
-        }
-      }
+	  {
+		{K}     {
+		  \tl_use:c {l_qrbill_data_#1Address1_tl}
+		  \tl_if_empty:cF {l_qrbill_data_#1Address2_tl} {
+			\ifhmode\\\fi
+			\tl_if_empty:cF {l_qrbill_data_#1Country_tl}
+			  {\tl_use:c {l_qrbill_data_#1Country_tl}-}
+			  \tl_use:c {l_qrbill_data_#1Address2_tl}
+		   }
+		}
+	  }{
+		\tl_use:c {l_qrbill_data_#1Address1_tl}~
+		\tl_use:c {l_qrbill_data_#1Address2_tl}
+		\tl_if_empty:cF {l_qrbill_data_#1City_tl} {
+		  \ifhmode\\\fi
+		  \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
+			{\tl_use:c {l_qrbill_data_#1Country_tl}-}
+		  \tl_use:c {l_qrbill_data_#1PostalCode_tl}~
+		  \tl_use:c {l_qrbill_data_#1City_tl}
+		}
+	  }
 }
 
 \cs_new:Nn \__qrbill_sep_tl:nn {
@@ -1124,15 +1163,15 @@
 
 \clist_map_inline:nn {AV1, AV2} {
   \keys_define:nn {qrbill/data} {
-    #1 .code:n = {
-      \tl_if_empty:nF {##1}{
-        \exp_args:Nnx \keys_set:nn {qrbill/data} {
-          #1-Parameters={\qrbill_av_prefix:n {#1}##1}
-        }
-      }
-      \tl_set:cn {l_qrbill_#1_tl} {##1}
-    },
-    #1 .initial:n =,
+		#1 .code:n = {
+			\tl_if_empty:nF {##1}{
+			\exp_args:Nnx \keys_set:nn {qrbill/data} {
+				#1-Parameters={\qrbill_av_prefix:n {#1}##1}
+			}
+			}
+			\tl_set:cn {l_qrbill_#1_tl} {##1}
+		},
+		#1 .initial:n =,
   }
 }
 
@@ -1149,13 +1188,21 @@
   \str_clear:N \l_qrbill_data_str
   \bool_set_false:N \l_tmpa_bool
   \seq_map_inline:Nn \g__qrbill_qrscheme_seq {
-    \bool_if:NTF \l_tmpa_bool
-         {\str_put_right:Nn\l_qrbill_data_str  {^^J}}
-         {\bool_set_true:N \l_tmpa_bool}
-         \exp_args:NNv \str_put_right:Nn \l_qrbill_data_str {l_qrbill_data_##1_tl}
+		\clist_if_in:NnTF \g__qrbill_ignore_if_empty_clist {##1}
+			{
+				\tl_if_empty:cTF {l_qrbill_data_##1_tl} \use_none:n \use:n
+			}
+			\use:n
+			{
+				\bool_if:NTF \l_tmpa_bool
+	       {\str_put_right:Nn\l_qrbill_data_str  {^^J}}
+	       {\bool_set_true:N \l_tmpa_bool}
+	     \exp_args:NNv \str_put_right:Nn \l_qrbill_data_str {l_qrbill_data_##1_tl}
+	    }
   }
   %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}
 	}
@@ -1164,18 +1211,16 @@
 
 \seq_new:N \g__qrbill_qrscheme_seq
 \newcommand*\SetQrScheme[1]{
-  \seq_gset_from_clist:Nn \g__qrbill_qrscheme_seq {#1}
-  \seq_map_inline:Nn \g__qrbill_qrscheme_seq {
-    \keys_define:nn {qrbill/data} {
-      ##1 .tl_set:c = l_qrbill_data_##1_tl,
-      ##1 .initial:n =,
-    }
-  }
+		\seq_gset_from_clist:Nn \g__qrbill_qrscheme_seq {#1}
+		\seq_map_inline:Nn \g__qrbill_qrscheme_seq {
+			\keys_define:nn {qrbill/data} {
+				##1 .tl_set:c = l_qrbill_data_##1_tl,
+				##1 .initial:n =,
+			}
+		}
 }
 
-
-
-\prop_new:N \g__qrbill_billing_info_prop 
+\prop_new:N \g__qrbill_billing_info_prop
 \seq_new:N \g__qrbill_billing_info_seq
 
 \clist_new:N \g__qrbill_billing_info_static_clist
@@ -1185,13 +1230,13 @@
   \prop_gset_from_keyval:Nn \g__qrbill_billing_info_prop {#1}
   \seq_gclear:N  \g__qrbill_billing_info_seq
   \prop_map_inline:Nn \g__qrbill_billing_info_prop {
-    \clist_if_in:NnF \g__qrbill_billing_info_static_clist {##1} {
-      \seq_push:Nn \g__qrbill_billing_info_seq {##1}
-    }
-    \keys_define:nn {qrbill/data} {
-      ##2 .tl_set:c = l_qrbill_##2_tl,
-      ##2 .initial:n =,
-    }
+		\clist_if_in:NnF \g__qrbill_billing_info_static_clist {##1} {
+			\seq_push:Nn \g__qrbill_billing_info_seq {##1}
+		}
+		\keys_define:nn {qrbill/data} {
+			##2 .tl_set:c = l_qrbill_##2_tl,
+			##2 .initial:n =,
+		}
   }
 	\seq_if_empty:NF \g__qrbill_billing_info_seq {
 		\prop_map_inline:Nn \g__qrbill_billing_info_prop {
@@ -1203,9 +1248,9 @@
 		}
 	}
   \seq_sort:Nn \g__qrbill_billing_info_seq {
-    \int_compare:nNnTF { ##1 } > { ##2 }
-        { \sort_return_swapped: }
-        { \sort_return_same: }
+		\int_compare:nNnTF { ##1 } > { ##2 }
+			{ \sort_return_swapped: }
+			{ \sort_return_same: }
   }
 }
 
@@ -1213,17 +1258,17 @@
 
 \cs_new:Nn \qrbill_parse_BillingInfo: {
   \bool_if:NT \g__grbill_billinginfo_auto_bool {
-    \str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
-      \prop_item:Nn \g__qrbill_billing_info_prop  {prefix}
-    }
-    \seq_map_inline:Nn \g__qrbill_billing_info_seq {
-      \prop_get:NnN \g__qrbill_billing_info_prop {##1} \l_tmpa_tl
-      \tl_if_empty:cF {l_qrbill_\l_tmpa_tl _tl} {
-        \str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
-          /##1/\tl_use:c {l_qrbill_\l_tmpa_tl _tl}
-        }
-      }
-    }
+		\str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
+			\prop_item:Nn \g__qrbill_billing_info_prop  {prefix}
+		}
+		\seq_map_inline:Nn \g__qrbill_billing_info_seq {
+			\prop_get:NnN \g__qrbill_billing_info_prop {##1} \l_tmpa_tl
+			\tl_if_empty:cF {l_qrbill_\l_tmpa_tl _tl} {
+			\str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
+				/##1/\tl_use:c {l_qrbill_\l_tmpa_tl _tl}
+			}
+			}
+		}
   }
 }
 
@@ -1241,9 +1286,9 @@
 
 \cs_new:Nn \qrbill_insert_AV_parameters:NNn {
   \clist_map_inline:nn {#3} {
-    \tl_if_empty:cF {l_qrbill_##1_tl}
-       {{#1\qrbill_av_prefix:n {##1}}{#2 \tl_use:c {l_qrbill_##1_tl}}}
-  }
+		\tl_if_empty:cF {l_qrbill_##1_tl}
+			 {{#1\qrbill_av_prefix:n {##1}}{#2 \tl_use:c {l_qrbill_##1_tl}}}
+	}
 }
 
 \cs_new:Nn \qrbill_av_prefix:n {Name~#1:~}
@@ -1256,8 +1301,13 @@
 % \section{The file swiss.qrbill-cfg.tex as a custom qrbill scheme}
 %<*swiss.qrbill-cfg.tex>
 \qrbillsetup{
-        creditorprefix =CR-,
-        debtorprefix =UD-,
+	creditorprefix=CR-,
+	debtorprefix=UD-,
+	ignore-if-empty={
+		AV1-Parameters,
+		AV2-Parameters,
+		BillingInfo
+	}
 }
 
 \SetQrScheme{
@@ -1320,12 +1370,12 @@
 \ExplSyntaxOff
 
 \SetupQrBill{
-        QRType=SPC,
-        Version=0200,
-        CodingType=1,
-        Trailer=EPD,
-        Currency=CHF,
-        ReferenceType=NON,
+	QRType=SPC,
+	Version=0200,
+	CodingType=1,
+	Trailer=EPD,
+	Currency=CHF,
+	ReferenceType=NON,
 }
 
 \qrbillsetdata*{
@@ -1402,24 +1452,24 @@
 
 \QRbill[
   creditor*={foobar LLC\\
-    Postfach\\
-    404\\
-    2342\\
-    Zurich\\
-    CH},
+		Postfach\\
+		404\\
+		2342\\
+		Zurich\\
+		CH},
   Account=CH1280808005649899718,
   vat=123123123,% VAT number with stripped CH and periods
   debtor*={peiTeX\\
-    TeXnikerweg\\
-    78\\
-    23420\\
-    Hamburg\\
-    DE},
+		TeXnikerweg\\
+		78\\
+		23420\\
+		Hamburg\\
+		DE},
   Amount=1337.42,
   Message=Bestellung vom 27.06.2020,
   invoicenum=100-4242,
 % invoicedate=200701,%yymmdd, preset to todays values
-  vatdetails=0,% 0% VAT 
+  vatdetails=0,% 0% VAT
 % invoicedate=200701,%yymmdd, preset to todays values
   AV1=LX;F00BAR;2342,
 ]
@@ -1452,39 +1502,39 @@
 	width=\paperwidth,
 	height=105mm,
 	]{qrbill}
-	
 
 
+
 \begin{document}
 
 \qrbillsetdata{
   creditor*={foobar LLC\\
-    Postfach\\
-    404\\
-    2342\\
-    Zurich\\
-    CH},
+		Postfach\\
+		404\\
+		2342\\
+		Zurich\\
+		CH},
   Account=CH1280808005649899718,
   vat=123123123,% VAT number with stripped CH and periods
   debtor*={peiTeX\\
-    TeXnikerweg\\
-    78\\
-    23420\\
-    Hamburg\\
-    DE},
+		TeXnikerweg\\
+		78\\
+		23420\\
+		Hamburg\\
+		DE},
   Amount=1337.42,
   Message=Bestellung vom 27.06.2020,
   invoicenum=100-4242,
 %  invoicedate=200701,%yymmdd, preset to todays values
-  vatdetails=0,% 0% VAT 
+  vatdetails=0,% 0% VAT
 %  vatdate=200701,%yymmdd, preset to todays values
   AV1=LX;F00BAR;2342,
 }
 
 \setkomavar{fromaddress}{\insertcreditor}
-	
+
 \begin{letter}{\insertdebtor}
-	
+
 \opening{opening}
 
 Text
@@ -1492,13 +1542,13 @@
 \closing{closing}
 
 % Add qbill on last page
-% For more details 
+% For more details
 \AddLayersToPageStyle{@everystyle@}{qrbill}
-	
+
 \end{letter}
 \end{document}
 %    \end{macrocode}
-% 
+%
 % \iffalse
 %    \begin{macrocode}
 %</qrbill-letter-demo.tex>

Modified: trunk/Master/texmf-dist/source/latex/qrbill/qrbill.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/qrbill/qrbill.ins	2022-10-21 19:39:53 UTC (rev 64772)
+++ trunk/Master/texmf-dist/source/latex/qrbill/qrbill.ins	2022-10-21 19:40:14 UTC (rev 64773)
@@ -1,8 +1,5 @@
 \input l3docstrip
 
-\def\filedate{2022/07/02}
-\def\fileversion{1.04}
-
 \preamble
 
 Copyright (C) 2020–2022 by Marei Peischl (peiTeX) <marei at peitex.de>

Modified: trunk/Master/texmf-dist/tex/latex/qrbill/qrbill.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/qrbill/qrbill.sty	2022-10-21 19:39:53 UTC (rev 64772)
+++ trunk/Master/texmf-dist/tex/latex/qrbill/qrbill.sty	2022-10-21 19:40:14 UTC (rev 64773)
@@ -37,7 +37,7 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \RequirePackage{expl3}
-\ProvidesExplPackage{qrbill}{2022/09/15}{1.05}{
+\ProvidesExplPackage{qrbill}{2022/10/20}{1.07}{
   Template for QR-bills based on the Swiss Payment Standards
 }
 \RequirePackage{iftex}
@@ -61,7 +61,7 @@
 
 \keys_define:nn {qrbill} {
   font .choices:nn = {Frutiger, Arial, Helvetica, Liberation Sans} {
-    \tl_gset_eq:NN \g__qrbill_font_tl \l_keys_choice_tl
+\tl_gset_eq:NN \g__qrbill_font_tl \l_keys_choice_tl
   },
   font .initial:n = Liberation Sans,
   font / custom .code:n = {\tl_gclear:N \g__qrbill_font_tl},
@@ -77,42 +77,54 @@
   qrmode .initial:n = package,
   frame .choice:,
   frame / false .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+\bool_gset_false:N \g__qrbill_top_frame_bool
+\bool_gset_false:N \g__qrbill_bottom_frame_bool
+\bool_gset_false:N \g__qrbill_left_frame_bool
+\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / true .code:n = {
-    \bool_gset_true:N \g__qrbill_top_frame_bool
-    \bool_gset_true:N \g__qrbill_bottom_frame_bool
-    \bool_gset_true:N \g__qrbill_left_frame_bool
-    \bool_gset_true:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+\bool_gset_true:N \g__qrbill_top_frame_bool
+\bool_gset_true:N \g__qrbill_bottom_frame_bool
+\bool_gset_true:N \g__qrbill_left_frame_bool
+\bool_gset_true:N \g__qrbill_right_frame_bool
   },
   frame / top .code:n = {
-    \bool_gset_true:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+\bool_gset_true:N \g__qrbill_top_frame_bool
+\bool_gset_false:N \g__qrbill_bottom_frame_bool
+\bool_gset_false:N \g__qrbill_left_frame_bool
+\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / bottom .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_true:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_true:N \g__qrbill_vrule_bool
+\bool_gset_false:N \g__qrbill_top_frame_bool
+\bool_gset_true:N \g__qrbill_bottom_frame_bool
+\bool_gset_false:N \g__qrbill_left_frame_bool
+\bool_gset_false:N \g__qrbill_right_frame_bool
   },
   frame / none .code:n = {
-    \bool_gset_false:N \g__qrbill_top_frame_bool
-    \bool_gset_false:N \g__qrbill_bottom_frame_bool
-    \bool_gset_false:N \g__qrbill_left_frame_bool
-    \bool_gset_false:N \g__qrbill_right_frame_bool
-    \bool_gset_false:N \g__qrbill_vrule_bool
+\bool_gset_false:N \g__qrbill_top_frame_bool
+\bool_gset_false:N \g__qrbill_bottom_frame_bool
+\bool_gset_false:N \g__qrbill_left_frame_bool
+\bool_gset_false:N \g__qrbill_right_frame_bool
+\keys_set:nn {qrbill} {vrule=false}
   },
-
   frame .initial:n = true,
+  vrule .choice:,
+  vrule / true .code:n = \tl_gset:Nn \g__qrbill_vrule_tl {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}},
+  vrule / false .code:n = \tl_gset:Nn \g__qrbill_vrule_tl {\rule{\g__qrbill_rule_dim}{\c_zero_dim}},
+vrule / symbol .code:n =  {
+\RequirePackage{marvosym}
+\tl_gset:Nn \g__qrbill_vrule_tl {
+\rotatebox{90}{
+\hbox_to_wd:nn {\c_qrbill_height_dim}{
+\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
+\llap{\raisebox{-.5\height}[\c_zero_dim][\c_zero_dim]{\LeftScissors}}
+\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
+\hbox{\rule{1mm}{\g__qrbill_rule_dim}}
+}
+}
+}
+},
+vrule .initial:n = true,
   billinginfo .bool_gset:N = \g__grbill_billinginfo_auto_bool,
   billinginfo .default:n = true,
   billinginfo .initial:n = true,
@@ -124,31 +136,30 @@
   iconwidth .initial:n = 7mm,
   separate .choice:,
   separate / symbol .code:n = {
-    \bool_gset_true:N \g__qrbill_separateinfo_bool
-    \RequirePackage{marvosym}
-    \cs_set:Nn \qrbill_print_separate_info: {
-      \par\leaders\vbox_to_ht:nn {1sp} {
-        \smash{
-        \hbox_to_wd:nn {\c_qrbill_width_dim }{
-            \leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
-            \llap{\raisebox{-.5\height}{\LeftScissors}}
-            \leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
-        }
-        }
-      }
-      \vskip 1sp
-      \vskip -1sp
-    }
-    },
+\bool_gset_true:N \g__qrbill_separateinfo_bool
+\RequirePackage{marvosym}
+\cs_set:Nn \qrbill_print_separate_info: {
+\par\leaders\vbox_to_ht:nn {1sp} {
+\smash{
+\hbox_to_wd:nn {\c_qrbill_width_dim }{
+\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus1 fill\relax
+\llap{\raisebox{-.5\height}{\LeftScissors}}
+\leaders\hbox{\rule{1mm}{\g__qrbill_rule_dim}\hspace{1mm}}\hskip 0pt\@plus4 fill\relax
+}
+}
+}
+\vskip 1sp
+\vskip -1sp
+}
+},
   separate / text .code:n = {
-    \bool_gset_true:N \g__qrbill_separateinfo_bool
-    \cs_set:Nn \qrbill_print_separate_info: {
-        \centerline{\raisebox{\dimexpr\depth+.3ex\relax}[0pt][0pt]{\footnotesize\qrbillseparatename}}
-    \par\nointerlineskip
-    \rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}
-    }
-  }
-  ,
+\bool_gset_true:N \g__qrbill_separateinfo_bool
+\cs_set:Nn \qrbill_print_separate_info: {
+\centerline{\raisebox{\dimexpr\depth+.3ex\relax}[0pt][0pt]{\footnotesize\qrbillseparatename}}
+\par\nointerlineskip
+\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}
+}
+  },
   separate / false .code:n = {\bool_gset_false:N \g__qrbill_separateinfo_bool},
   separate .initial:n = text,
   sep-iban .int_gset:N = \g__qrbill_ibansep_int,
@@ -168,6 +179,8 @@
   replace-umlauts / true .code:n = \prop_gput_from_keyval:Nn \g__qrbill_replacement_prop {ä=ae,Ä=AE,ü=ue,Ü=UE,ö=oe,Ö=OE,ß=ss,ẞ=SS},
   replace-umlauts / false .code:n = \clist_map_inline:nn {ä,Ä,ü,Ü,ö,Ö,ß,ẞ} {\prop_gremove:Nn \g__qrbill_replacement_prop {##1}},
   data-to-string .bool_gset:N = \g__qrbill_to_string_bool,
+  ignore-if-empty  .clist_gset:N = \g__qrbill_ignore_if_empty_clist,
+  ignore-if-empty .initial:n = ,
 }
 
 \ProcessKeysOptions{qrbill}
@@ -200,16 +213,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
-}
 
 \dim_new:N \l__qrbill_QRblocksize_dim
 \cs_set_protected:Npn \qrbill_qrcode_black: {\rule{\l__qrbill_QRblocksize_dim}{\l__qrbill_QRblocksize_dim}}
@@ -228,6 +232,7 @@
 }
 }
 
+
 \bool_if:NF \g__qrbill_luamode_bool {
   \usepackage{qrcode}
   % modified version of \qr at encode@binary to allow utf8 qrcodes required by swiss qrbill scheme
@@ -235,12 +240,12 @@
 \cs_set:Nn \__qrbill_encode_unicode_binary:n {
 \edef\qr at plaintext{#1}%
 \def\qr at codetext{4}% %This means `binary'
-\xdef\qr at stringlength{\tl_count:o {\qr at plaintext}}%
+\__qrbill_qr_get_string_length_encoded:n { \qr at plaintext }
 \edef\qr at charactercountlengthinhex{\int_eval:n {\qr at charactercountbits@byte / 4}}%
 \qr at decimaltohex[\qr at charactercountlengthinhex]{\qr at charactercount}{\qr at stringlength}%
 \xa\g at addto@macro\xa\qr at codetext\xa{\qr at charactercount}%
-\exp_args:NNx \str_set_convert:Nnnn \l_tmpa_str  { \qr at 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 at plaintext }  {} {utf8/hex}
+
 \str_gput_right:NV \qr at codetext \l_tmpa_str
 \xdef\qr at codetext{\exp_args:No \str_lowercase:n {\qr at codetext}}
 \g at addto@macro\qr at codetext{0}% %This is '0000' in binary.
@@ -260,10 +265,32 @@
 }
   \cs_set:Nn \qrbill_parse_QRcode:n {
 \cs_set_eq:NN \qr at encode@binary \__qrbill_encode_unicode_binary:n
-\raisebox{\depth}{\cs_set_eq:NN \qr at 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 at stringlength{\int_eval:n {\str_count:N \l_tmpa_str / 2}}
 }
 
+\cs_new:Nn \__qrbill_qr_padatfront:nn {%
+\prg_replicate:nn {\int_max:nn {0} {#2- \tl_count:N #1}} {
+\qr at g@preface at macro{#1}{0}
+}
+}
+
+\let\orig at qr@getstringlength\qr at getstringlength
+
+\cs_new:Nn \__qrbill_enable_unicode_qrcode_patch: {
+\cs_set_eq:NN \qr at padatfront \__qrbill_qr_padatfront:nn
+\AddToHook{cmd/qr at choose@best at version/before}{\cs_set_eq:NN \qr at getstringlength\__qrbill_qr_get_string_length_encoded:n}
+\AddToHook{cmd/qr at choose@best at version/after}{\let\qr at getstringlength\orig at qr@getstringlength}
+}
+}
+
 \cs_generate_variant:Nn \qrbill_parse_QRcode:n {V}
 
 \newcommand*{\QRbillAddCustomReplacement}[2]{
@@ -309,13 +336,13 @@
 
 \cs_new:Nn \__qrbill_placeholder:nn {
   \vbox_to_ht:nn {#2} {
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
-    \nointerlineskip
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
-    \vfill
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
-    \nointerlineskip
-    \hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
+\hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
+\nointerlineskip
+\hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
+\vfill
+\hbox_to_wd:nn {#1} {\__qrbill_placeholder_vmark: \hfill \__qrbill_placeholder_vmark:}
+\nointerlineskip
+\hbox_to_wd:nn {#1} {\__qrbill_placeholder_hmark: \hfill \__qrbill_placeholder_hmark:}
   }
 }
 
@@ -325,172 +352,170 @@
   \qrbillfont
   \setlength{\parindent}{\z@}
   \parbox{\c_qrbill_width_dim }{
-    \vbox to \c_qrbill_height_dim {
-      \bool_if:NTF \g__qrbill_top_frame_bool
-        {
-          \bool_if:NTF \g__qrbill_separateinfo_bool
-            {\qrbill_print_separate_info:}
-            {\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}
-        }
-        {\rule{\c_zero_dim}{\g__qrbill_rule_dim}}
-      \par\nointerlineskip
-      \skip_vertical:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
-      \skip_horizontal:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
-      \begin{minipage}[c][95mm][t]{52mm}
-        \vbox_to_ht:nn {7mm} {\qrbill_title_font:\qrbillreceiptname}
-        \par\nointerlineskip
-        \vbox_to_ht:nn {56mm}{
-          {\qrbill_headingR_font:\qrbillaccountname\par}
-          {
-            \qrbill_valueR_font:
-            \__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl\par
-            \qrbill_insert_address:N \g__qrbill_creditorprefix_tl
-            \par\vskip\baselineskip
-          }
-          \tl_if_empty:NF \l_qrbill_data_Reference_tl {
-            {\qrbill_headingR_font:\qrbillreferencename\par}
-            {
-              \qrbill_valueR_font:
-              \__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
-              \par\vskip\baselineskip
-            }
-          }
-          \tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl}
-             {
-               {\qrbill_headingR_font:\qrbilldebtoraddrname\par}
-               \__qrbill_placeholder:nn {52mm} {20mm}
-             }{
-               {\qrbill_headingR_font:\qrbilldebtorname\par}
-               {
-                 \qrbill_valueR_font:
-                 \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
-                 \par
-               }
-             }
-        }
-        \par\nointerlineskip
-        \vbox_to_ht:nn {14mm}{
-          \qrbill_headingR_font:
-          \begin{tabular}[t]{@{}ll@{}}
-            \qrbillcurrencyname&\qrbill_headingR_font:\qrbillamountname\\
-            \qrbill_amountR_font:\l_qrbill_data_Currency_tl
-              &\qrbill_amountR_font:
-                \tl_if_empty:NF \l_qrbill_data_Amount_tl
-                   {\numprint{\l_qrbill_data_Amount_tl}}
-          \end{tabular}
-          \tl_if_empty:NTF \l_qrbill_data_Amount_tl {
-            \hfill
-            \raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{\llap{
-                \__qrbill_placeholder:nn {30mm} {10mm}
-            }}
-          }
-          \vfill
-        }
-        \par\nointerlineskip
-        \vbox_to_ht:nn {18mm} {
-          \makebox[\linewidth][r]{\qrbill_headingR_font:\qrbillacceptantname}\par
-        }
-      \end{minipage}%
-      \skip_horizontal:n {2\c_qrbill_sep_dim}
-      \begin{minipage}[c][95mm][t]{138mm}
-        \begin{minipage}[c][85mm][t]{51mm}
-          \parbox[t][7mm][t]{\linewidth}{\qrbill_title_font:\qrbillpaymentpartname}
-          \par\nointerlineskip
-          \skip_vertical:n {\c_qrbill_sep_dim}
-          \qrcode_setup_QRcode:
-          \leavevmode\qrbill_parse_QRcode:V \l_qrbill_data_str
-          \tl_if_empty:NF \g_qrbill_icon_tl {
-            \llap{\hbox_to_wd:nn {\g_qrbill_QRcode_dim} {
-                \hfill
-                \raisebox{\dimexpr-.5\height+.5\g_qrbill_QRcode_dim}[0pt][0pt]{
-                  \includegraphics[width=\g_qrbill_iconwidth_dim]{\g_qrbill_icon_tl}
-                }
-                \hfill
-            }}
-          }
-          \skip_vertical:n {\c_qrbill_sep_dim}
-          \vbox_to_ht:nn {22mm}{
-            \begin{tabular}[b]{@{}ll@{}}
-              \qrbill_headingP_font:\qrbillcurrencyname&\qrbill_headingP_font:
-                \qrbillamountname\\
-              \qrbill_amountP_font:\tl_use:c {l_qrbill_data_Currency_tl}&
-              \tl_if_empty:NF \l_qrbill_data_Amount_tl {
-                \qrbill_amountP_font:\numprint{\l_qrbill_data_Amount_tl}
-              }
-            \end{tabular}
-            \tl_if_empty:NTF \l_qrbill_data_Amount_tl {
-              \hfill
-              \raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{
-                \llap{\__qrbill_placeholder:nn {40mm} {15mm}
-              }}
-            }
-          }
-        \end{minipage}
-        \begin{minipage}[c][85mm][t]{87mm}
-          \par\nointerlineskip
-          {\qrbill_headingP_font:\qrbillaccountname\par}
-          {
-            \qrbill_valueP_font:
-            \__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl \par
-            \qrbill_insert_address:N \g__qrbill_creditorprefix_tl
-            \par\vskip\baselineskip
-          }
-          \tl_if_empty:NF \l_qrbill_data_Reference_tl {
-            {\qrbill_headingP_font:\qrbillreferencename\par}
-            {\qrbill_valueP_font:
-              \__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
-              \par\vskip\baselineskip}
-          }
-          \exp_args:Nf \tl_if_empty:nF  {
-            \l_qrbill_data_BillingInfo_tl
-            \l_qrbill_data_Message_tl
-          }{
-            {\qrbill_headingP_font:\qrbilladdinfoname\par}
-            {
-              \qrbill_valueP_font:
-              \l_qrbill_data_Message_tl\par
-              \tl_replace_all:Nnn \l_qrbill_data_BillingInfo_tl {/} {\discretionary{}{}{}/}
-              \l_qrbill_data_BillingInfo_tl
-              \par\vskip\baselineskip
-            }
-          }
-          \tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl} {
-            {\qrbill_headingP_font:\qrbilldebtoraddrname\par}
-            \__qrbill_placeholder:nn {65mm} {25mm}
-          }{
-            {\qrbill_headingP_font:\qrbilldebtorname\par}
-            {
-              \qrbill_valueP_font:
-              \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
-              \par
-            }
-          }
-        \end{minipage}\par\nointerlineskip
-        \begin{minipage}[b][10mm][t]{\linewidth}
-          \strut
-          \qrbill_insert_AV_parameters:NNn
-            \qrbill_infoheading_font:
-            \qrbill_info_font:
-            {AV1,AV2}
-        \end{minipage}
-      \end{minipage}
-      \par\nointerlineskip\skip_vertical:n  {\c_qrbill_sep_dim}
-      \smash{
-      \bool_if:NT \g__qrbill_bottom_frame_bool
-        {\rlap{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}}
-      \bool_if:NTF \g__qrbill_left_frame_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      \hspace{\dimexpr62mm-1.5\g__qrbill_rule_dim}
-      \bool_if:NTF \g__qrbill_vrule_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      \hspace{\dimexpr148mm-1.5\g__qrbill_rule_dim}
-      \bool_if:NTF \g__qrbill_right_frame_bool
-        {\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
-        {\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
-      }
-    }
+\vbox to \c_qrbill_height_dim {
+\bool_if:NTF \g__qrbill_top_frame_bool
+{
+\bool_if:NTF \g__qrbill_separateinfo_bool
+{\qrbill_print_separate_info:}
+{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}
+}
+{\rule{\c_zero_dim}{\g__qrbill_rule_dim}}
+\par\nointerlineskip
+\skip_vertical:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
+\skip_horizontal:n {\c_qrbill_sep_dim-\g__qrbill_rule_dim}
+\begin{minipage}[c][95mm][t]{52mm}
+\vbox_to_ht:nn {7mm} {\qrbill_title_font:\qrbillreceiptname}
+\par\nointerlineskip
+\vbox_to_ht:nn {56mm}{
+{\qrbill_headingR_font:\qrbillaccountname\par}
+{
+\qrbill_valueR_font:
+\__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl\par
+\qrbill_insert_address:N \g__qrbill_creditorprefix_tl
+\par\vskip\baselineskip
+}
+\tl_if_empty:NF \l_qrbill_data_Reference_tl {
+{\qrbill_headingR_font:\qrbillreferencename\par}
+{
+\qrbill_valueR_font:
+\__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
+\par\vskip\baselineskip
+}
+}
+\tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl}
+ {
+ {\qrbill_headingR_font:\qrbilldebtoraddrname\par}
+ \__qrbill_placeholder:nn {52mm} {20mm}
+ }{
+ {\qrbill_headingR_font:\qrbilldebtorname\par}
+ {
+ \qrbill_valueR_font:
+ \qrbill_insert_address:N \g__qrbill_debtorprefix_tl
+ \par
+ }
+ }
+}
+\par\nointerlineskip
+\vbox_to_ht:nn {14mm}{
+\qrbill_headingR_font:
+\begin{tabular}[t]{@{}ll@{}}
+\qrbillcurrencyname&\qrbill_headingR_font:\qrbillamountname\\
+\qrbill_amountR_font:\l_qrbill_data_Currency_tl
+&\qrbill_amountR_font:
+\tl_if_empty:NF \l_qrbill_data_Amount_tl
+ {\numprint{\l_qrbill_data_Amount_tl}}
+\end{tabular}
+\tl_if_empty:NTF \l_qrbill_data_Amount_tl {
+\hfill
+\raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{\llap{
+\__qrbill_placeholder:nn {30mm} {10mm}
+}}
+}
+\vfill
+}
+\par\nointerlineskip
+\vbox_to_ht:nn {18mm} {
+\makebox[\linewidth][r]{\qrbill_headingR_font:\qrbillacceptantname}\par
+}
+\end{minipage}%
+\skip_horizontal:n {2\c_qrbill_sep_dim}
+\begin{minipage}[c][95mm][t]{138mm}
+\begin{minipage}[c][85mm][t]{51mm}
+\parbox[t][7mm][t]{\linewidth}{\qrbill_title_font:\qrbillpaymentpartname}
+\par\nointerlineskip
+\skip_vertical:n {\c_qrbill_sep_dim}
+\qrcode_setup_QRcode:
+\leavevmode\qrbill_parse_QRcode:V \l_qrbill_data_str
+\tl_if_empty:NF \g_qrbill_icon_tl {
+\llap{\hbox_to_wd:nn {\g_qrbill_QRcode_dim} {
+\hfill
+\raisebox{\dimexpr-.5\height+.5\g_qrbill_QRcode_dim}[0pt][0pt]{
+\includegraphics[width=\g_qrbill_iconwidth_dim]{\g_qrbill_icon_tl}
+}
+\hfill
+}}
+}
+\skip_vertical:n {\c_qrbill_sep_dim}
+\vbox_to_ht:nn {22mm}{
+\begin{tabular}[b]{@{}ll@{}}
+\qrbill_headingP_font:\qrbillcurrencyname&\qrbill_headingP_font:
+\qrbillamountname\\
+\qrbill_amountP_font:\tl_use:c {l_qrbill_data_Currency_tl}&
+\tl_if_empty:NF \l_qrbill_data_Amount_tl {
+\qrbill_amountP_font:\numprint{\l_qrbill_data_Amount_tl}
+}
+\end{tabular}
+\tl_if_empty:NTF \l_qrbill_data_Amount_tl {
+\hfill
+\raisebox{\dimexpr-\height+\ht\strutbox}[\z@]{
+\llap{\__qrbill_placeholder:nn {40mm} {15mm}
+}}
+}
+}
+\end{minipage}
+\begin{minipage}[c][85mm][t]{87mm}
+\par\nointerlineskip
+{\qrbill_headingP_font:\qrbillaccountname\par}
+{
+\qrbill_valueP_font:
+\__qrbill_sep_tl:nV {iban} \l_qrbill_data_Account_tl \par
+\qrbill_insert_address:N \g__qrbill_creditorprefix_tl
+\par\vskip\baselineskip
+}
+\tl_if_empty:NF \l_qrbill_data_Reference_tl {
+{\qrbill_headingP_font:\qrbillreferencename\par}
+{\qrbill_valueP_font:
+\__qrbill_sep_tl:nV {reference} \l_qrbill_data_Reference_tl
+\par\vskip\baselineskip}
+}
+\exp_args:Nf \tl_if_empty:nF  {
+\l_qrbill_data_BillingInfo_tl
+\l_qrbill_data_Message_tl
+}{
+{\qrbill_headingP_font:\qrbilladdinfoname\par}
+{
+\qrbill_valueP_font:
+\l_qrbill_data_Message_tl\par
+\tl_replace_all:Nnn \l_qrbill_data_BillingInfo_tl {/} {\discretionary{}{}{}/}
+\l_qrbill_data_BillingInfo_tl
+\par\vskip\baselineskip
+}
+}
+\tl_if_empty:cTF {l_qrbill_data_\g__qrbill_debtorprefix_tl Name_tl} {
+{\qrbill_headingP_font:\qrbilldebtoraddrname\par}
+\__qrbill_placeholder:nn {65mm} {25mm}
+}{
+{\qrbill_headingP_font:\qrbilldebtorname\par}
+{
+\qrbill_valueP_font:
+\qrbill_insert_address:N \g__qrbill_debtorprefix_tl
+\par
+}
+}
+\end{minipage}\par\nointerlineskip
+\begin{minipage}[b][10mm][t]{\linewidth}
+\strut
+\qrbill_insert_AV_parameters:NNn
+\qrbill_infoheading_font:
+\qrbill_info_font:
+{AV1,AV2}
+\end{minipage}
+\end{minipage}
+\par\nointerlineskip\skip_vertical:n  {\c_qrbill_sep_dim}
+\smash{
+\bool_if:NT \g__qrbill_bottom_frame_bool
+{\rlap{\rule{\c_qrbill_width_dim}{\g__qrbill_rule_dim}}}
+\bool_if:NTF \g__qrbill_left_frame_bool
+{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
+{\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
+\hspace{\dimexpr62mm-1.5\g__qrbill_rule_dim}
+\g__qrbill_vrule_tl
+\hspace{\dimexpr148mm-1.5\g__qrbill_rule_dim}
+\bool_if:NTF \g__qrbill_right_frame_bool
+{\rule{\g__qrbill_rule_dim}{\c_qrbill_height_dim}}
+{\rule{\g__qrbill_rule_dim}{\c_zero_dim}}
+}
+}
   }
   \endgroup
 }
@@ -518,10 +543,10 @@
 
 \ior_str_map_inline:Nn \qrbill_ior {
   \int_step_inline:nnn {2} {\l_tmpa_int } {
-    \exp_args:Nnx \use:n {\exp_args:NNx \exp_args:Nnc \defcaptionname
-      {\clist_item:Nn \l_qrbill_tmpa_clist {##1}}
-      {qrbill\clist_item:nn {#1} {1}name}}
-        {\clist_item:nn {#1} {##1}}
+\exp_args:Nnx \use:n {\exp_args:NNx \exp_args:Nnc \defcaptionname
+{\clist_item:Nn \l_qrbill_tmpa_clist {##1}}
+{qrbill\clist_item:nn {#1} {1}name}}
+{\clist_item:nn {#1} {##1}}
   }
 }
 
@@ -538,13 +563,13 @@
 \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
 }
   \exp_args:Nnx \keys_set:nn {qrbill/data} {
-    #1AddressType=K,
-    #1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
-    #1Address1=\seq_item:Nn \l_qrbill_tmp_seq {2},
-    #1Address2=\seq_item:Nn \l_qrbill_tmp_seq {3},
-    #1PostalCode=,
-    #1City=,
-    #1Country=\seq_item:Nn \l_qrbill_tmp_seq {4},
+#1AddressType=K,
+#1Name={\seq_item:Nn \l_qrbill_tmp_seq {1}},
+#1Address1={\seq_item:Nn \l_qrbill_tmp_seq {2}},
+#1Address2={\seq_item:Nn \l_qrbill_tmp_seq {3}},
+#1PostalCode=,
+#1City=,
+#1Country={\seq_item:Nn \l_qrbill_tmp_seq {4}},
   }
 }
 
@@ -557,13 +582,13 @@
 \seq_set_split:Nnn \l_qrbill_tmp_seq {\\} {#2}
 }
   \exp_args:Nnx \keys_set:nn {qrbill/data} {
-    #1AddressType=S,
-    #1Name=\seq_item:Nn \l_qrbill_tmp_seq {1},
-    #1Address1=\seq_item:Nn \l_qrbill_tmp_seq {2},
-    #1Address2=\seq_item:Nn \l_qrbill_tmp_seq {3},
-    #1PostalCode=\seq_item:Nn \l_qrbill_tmp_seq {4},
-    #1City=\seq_item:Nn \l_qrbill_tmp_seq {5},
-    #1Country=\seq_item:Nn \l_qrbill_tmp_seq {6},
+#1AddressType=S,
+#1Name={\seq_item:Nn \l_qrbill_tmp_seq {1}},
+#1Address1={\seq_item:Nn \l_qrbill_tmp_seq {2}},
+#1Address2={\seq_item:Nn \l_qrbill_tmp_seq {3}},
+#1PostalCode={\seq_item:Nn \l_qrbill_tmp_seq {4}},
+#1City={\seq_item:Nn \l_qrbill_tmp_seq {5}},
+#1Country={\seq_item:Nn \l_qrbill_tmp_seq {6}},
   }
 }
 
@@ -570,28 +595,28 @@
 \cs_new:Nn \qrbill_insert_address:N {
   \tl_use:c {l_qrbill_data_#1Name_tl}\ifhmode\\\fi
   \str_case_e:nnF {\use:c {l_qrbill_data_#1AddressType_tl}}
-      {
-        {K}     {
-          \tl_use:c {l_qrbill_data_#1Address1_tl}
-          \tl_if_empty:cF {l_qrbill_data_#1Address2_tl} {
-            \ifhmode\\\fi
-            \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
-              {\tl_use:c {l_qrbill_data_#1Country_tl}-}
-              \tl_use:c {l_qrbill_data_#1Address2_tl}
-           }
-        }
-      }{
-        \tl_use:c {l_qrbill_data_#1Address1_tl}~
-        \tl_use:c {l_qrbill_data_#1Address2_tl}
-        \tl_if_empty:cF {l_qrbill_data_#1City_tl} {
-          \ifhmode\\\fi
-          \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
-            {\tl_use:c {l_qrbill_data_#1Country_tl}-}
-          \tl_use:c {l_qrbill_data_#1PostalCode_tl}~
-          \tl_use:c {l_qrbill_data_#1City_tl}
-        }
-      }
+  {
+{K}     {
+  \tl_use:c {l_qrbill_data_#1Address1_tl}
+  \tl_if_empty:cF {l_qrbill_data_#1Address2_tl} {
+\ifhmode\\\fi
+\tl_if_empty:cF {l_qrbill_data_#1Country_tl}
+  {\tl_use:c {l_qrbill_data_#1Country_tl}-}
+  \tl_use:c {l_qrbill_data_#1Address2_tl}
+   }
 }
+  }{
+\tl_use:c {l_qrbill_data_#1Address1_tl}~
+\tl_use:c {l_qrbill_data_#1Address2_tl}
+\tl_if_empty:cF {l_qrbill_data_#1City_tl} {
+  \ifhmode\\\fi
+  \tl_if_empty:cF {l_qrbill_data_#1Country_tl}
+{\tl_use:c {l_qrbill_data_#1Country_tl}-}
+  \tl_use:c {l_qrbill_data_#1PostalCode_tl}~
+  \tl_use:c {l_qrbill_data_#1City_tl}
+}
+  }
+}
 
 \cs_new:Nn \__qrbill_sep_tl:nn {
 \int_compare:nTF  {\int_use:c {g__qrbill_#1sep_int} = 0} {
@@ -636,15 +661,15 @@
 
 \clist_map_inline:nn {AV1, AV2} {
   \keys_define:nn {qrbill/data} {
-    #1 .code:n = {
-      \tl_if_empty:nF {##1}{
-        \exp_args:Nnx \keys_set:nn {qrbill/data} {
-          #1-Parameters={\qrbill_av_prefix:n {#1}##1}
-        }
-      }
-      \tl_set:cn {l_qrbill_#1_tl} {##1}
-    },
-    #1 .initial:n =,
+#1 .code:n = {
+\tl_if_empty:nF {##1}{
+\exp_args:Nnx \keys_set:nn {qrbill/data} {
+#1-Parameters={\qrbill_av_prefix:n {#1}##1}
+}
+}
+\tl_set:cn {l_qrbill_#1_tl} {##1}
+},
+#1 .initial:n =,
   }
 }
 
@@ -661,13 +686,21 @@
   \str_clear:N \l_qrbill_data_str
   \bool_set_false:N \l_tmpa_bool
   \seq_map_inline:Nn \g__qrbill_qrscheme_seq {
-    \bool_if:NTF \l_tmpa_bool
-         {\str_put_right:Nn\l_qrbill_data_str  {^^J}}
-         {\bool_set_true:N \l_tmpa_bool}
-         \exp_args:NNv \str_put_right:Nn \l_qrbill_data_str {l_qrbill_data_##1_tl}
+\clist_if_in:NnTF \g__qrbill_ignore_if_empty_clist {##1}
+{
+\tl_if_empty:cTF {l_qrbill_data_##1_tl} \use_none:n \use:n
+}
+\use:n
+{
+\bool_if:NTF \l_tmpa_bool
+       {\str_put_right:Nn\l_qrbill_data_str  {^^J}}
+       {\bool_set_true:N \l_tmpa_bool}
+     \exp_args:NNv \str_put_right:Nn \l_qrbill_data_str {l_qrbill_data_##1_tl}
+    }
   }
   %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}
 }
@@ -676,14 +709,14 @@
 
 \seq_new:N \g__qrbill_qrscheme_seq
 \newcommand*\SetQrScheme[1]{
-  \seq_gset_from_clist:Nn \g__qrbill_qrscheme_seq {#1}
-  \seq_map_inline:Nn \g__qrbill_qrscheme_seq {
-    \keys_define:nn {qrbill/data} {
-      ##1 .tl_set:c = l_qrbill_data_##1_tl,
-      ##1 .initial:n =,
-    }
-  }
+\seq_gset_from_clist:Nn \g__qrbill_qrscheme_seq {#1}
+\seq_map_inline:Nn \g__qrbill_qrscheme_seq {
+\keys_define:nn {qrbill/data} {
+##1 .tl_set:c = l_qrbill_data_##1_tl,
+##1 .initial:n =,
 }
+}
+}
 
 \prop_new:N \g__qrbill_billing_info_prop
 \seq_new:N \g__qrbill_billing_info_seq
@@ -695,13 +728,13 @@
   \prop_gset_from_keyval:Nn \g__qrbill_billing_info_prop {#1}
   \seq_gclear:N  \g__qrbill_billing_info_seq
   \prop_map_inline:Nn \g__qrbill_billing_info_prop {
-    \clist_if_in:NnF \g__qrbill_billing_info_static_clist {##1} {
-      \seq_push:Nn \g__qrbill_billing_info_seq {##1}
-    }
-    \keys_define:nn {qrbill/data} {
-      ##2 .tl_set:c = l_qrbill_##2_tl,
-      ##2 .initial:n =,
-    }
+\clist_if_in:NnF \g__qrbill_billing_info_static_clist {##1} {
+\seq_push:Nn \g__qrbill_billing_info_seq {##1}
+}
+\keys_define:nn {qrbill/data} {
+##2 .tl_set:c = l_qrbill_##2_tl,
+##2 .initial:n =,
+}
   }
 \seq_if_empty:NF \g__qrbill_billing_info_seq {
 \prop_map_inline:Nn \g__qrbill_billing_info_prop {
@@ -713,9 +746,9 @@
 }
 }
   \seq_sort:Nn \g__qrbill_billing_info_seq {
-    \int_compare:nNnTF { ##1 } > { ##2 }
-        { \sort_return_swapped: }
-        { \sort_return_same: }
+\int_compare:nNnTF { ##1 } > { ##2 }
+{ \sort_return_swapped: }
+{ \sort_return_same: }
   }
 }
 
@@ -723,17 +756,17 @@
 
 \cs_new:Nn \qrbill_parse_BillingInfo: {
   \bool_if:NT \g__grbill_billinginfo_auto_bool {
-    \str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
-      \prop_item:Nn \g__qrbill_billing_info_prop  {prefix}
-    }
-    \seq_map_inline:Nn \g__qrbill_billing_info_seq {
-      \prop_get:NnN \g__qrbill_billing_info_prop {##1} \l_tmpa_tl
-      \tl_if_empty:cF {l_qrbill_\l_tmpa_tl _tl} {
-        \str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
-          /##1/\tl_use:c {l_qrbill_\l_tmpa_tl _tl}
-        }
-      }
-    }
+\str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
+\prop_item:Nn \g__qrbill_billing_info_prop  {prefix}
+}
+\seq_map_inline:Nn \g__qrbill_billing_info_seq {
+\prop_get:NnN \g__qrbill_billing_info_prop {##1} \l_tmpa_tl
+\tl_if_empty:cF {l_qrbill_\l_tmpa_tl _tl} {
+\str_put_right:Nx \l_qrbill_data_BillingInfo_tl {
+/##1/\tl_use:c {l_qrbill_\l_tmpa_tl _tl}
+}
+}
+}
   }
 }
 
@@ -751,10 +784,10 @@
 
 \cs_new:Nn \qrbill_insert_AV_parameters:NNn {
   \clist_map_inline:nn {#3} {
-    \tl_if_empty:cF {l_qrbill_##1_tl}
-       {{#1\qrbill_av_prefix:n {##1}}{#2 \tl_use:c {l_qrbill_##1_tl}}}
-  }
+\tl_if_empty:cF {l_qrbill_##1_tl}
+ {{#1\qrbill_av_prefix:n {##1}}{#2 \tl_use:c {l_qrbill_##1_tl}}}
 }
+}
 
 \cs_new:Nn \qrbill_av_prefix:n {Name~#1:~}
 

Modified: trunk/Master/texmf-dist/tex/latex/qrbill/swiss.qrbill-cfg.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/qrbill/swiss.qrbill-cfg.tex	2022-10-21 19:39:53 UTC (rev 64772)
+++ trunk/Master/texmf-dist/tex/latex/qrbill/swiss.qrbill-cfg.tex	2022-10-21 19:40:14 UTC (rev 64773)
@@ -37,9 +37,14 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \qrbillsetup{
-        creditorprefix =CR-,
-        debtorprefix =UD-,
+creditorprefix=CR-,
+debtorprefix=UD-,
+ignore-if-empty={
+AV1-Parameters,
+AV2-Parameters,
+BillingInfo
 }
+}
 
 \SetQrScheme{
   QRType,
@@ -101,12 +106,12 @@
 \ExplSyntaxOff
 
 \SetupQrBill{
-        QRType=SPC,
-        Version=0200,
-        CodingType=1,
-        Trailer=EPD,
-        Currency=CHF,
-        ReferenceType=NON,
+QRType=SPC,
+Version=0200,
+CodingType=1,
+Trailer=EPD,
+Currency=CHF,
+ReferenceType=NON,
 }
 
 \qrbillsetdata*{



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