\NeedsTeXFormat{LaTeX2e} \RequirePackage{xparse} \RequirePackage{booktabs} \RequirePackage{DSAproben,DSAwurf,DSAutil} \def\DSAchar@version{0.1} \def\DSAchar@date{2018-10-15} \ProvidesExplPackage {DSAchar} {\DSAchar@date} {\DSAchar@version} {DSA Charakterwerte} % Personenbezogen >>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand*\NeuerName[3]%>>> { \cs_new_protected:Npn #1 { #2~#3 \@ifstar {} { \cs_gset_protected:Npn #1 { #2 \@ifstar { ~#3 } {} } } } }%<<< \newcommand*\DSAcharEigStandard{8} \newcommand*\DSAcharGSStandard{8} \newcommand*\DSAcharRSStandard{0} \newcommand*\DSAcharBEStandard{0} \cs_generate_variant:Nn \tl_if_eq:nnTF { VnTF } \cs_generate_variant:Nn \tl_lower_case:n { V } \msg_new:nnn { DSAchar } { only~bool }%>>> { The~`#1`~key~accepts~only~the~boolean~values~`true`~and~`false`. }%<<< \msg_new:nnn { DSAchar } { unknown~key }%>>> { The~`#1`~key~is~unknown. }%<<< \tl_new:N \l_DSAchar_key_tl \tl_new:N \l_DSAchar_additional_defaults_tl \prop_const_from_keyval:Nn \c_DSAchar_key_type_prop%>>> { ,mu = int ,kl = int ,in = int ,ch = int ,ff = int ,ge = int ,ko = int ,kk = int ,le = int ,au = int ,mr = int ,ae = int ,ke = int ,ini = int ,gs = int ,rs = int ,be = int ,ws = int ,at = int ,pa = int ,fk = int ,waffe = tl ,links = tl ,rasse = tl ,kultur = tl ,profession = tl ,magier = bool ,geweihter = bool ,manoever = clist ,zauber = clist ,liturgien = clist ,sonderfertigkeiten = clist ,vorteile = clist % TODO: Ausgabe implementieren ,nachteile = clist % TODO: Ausgabe implementieren ,beschreibung = tl % TODO: Ausgabe implementieren }%<<< \prg_new_protected_conditional:Npnn \DSAchar_if_key_defined:n #1%>>> { T , F , TF } { \prop_get:NnNF \c_DSAchar_key_type_prop { #1 } \l_DSAchar_key_type_tl { \msg_error:nnn { DSAchar } { unknown~key } { #1 } } \DSAchar_if_key_defined:nnTF { \l_DSAchar_key_type_tl } { #1 } { \prg_return_true: } { \prg_return_false: } }%<<< \prg_new_conditional:Npnn \DSAchar_if_key_defined:nn #1 #2%>>> { T , F , TF } { \DSAchar_if_key_defined:nnnTF { \l_DSAchar_key_tl } { #1 } { #2 } { \prg_return_true: } { \prg_return_false: } }%<<< \prg_new_conditional:Npnn \DSAchar_if_key_defined:nnn #1 #2 #3%>>> { T , F , TF } { \cs_if_exist:cTF { l_DSAchar_ #1 _ #3 _ #2 } { \prg_return_true: } { \prg_return_false: } }%<<< \cs_new_protected:Npn \DSAchar_set_key:nn #1 #2%>>> { \prop_get:NnNF \c_DSAchar_key_type_prop { #1 } \l_DSAchar_key_type_tl { \msg_error:nnn { DSAchar } { unknown~key } { #1 } } \DSAchar_set_key:nnn \l_DSAchar_key_type_tl { #1 } { #2 } }%<<< \cs_generate_variant:Nn \DSAchar_set_key:nn { on } \cs_new_protected:Npn \DSAchar_set_key:nnn #1 #2 #3%>>> { \DSAchar_if_key_defined:nnF { #1 } { #2 } { \use:c { #1_new:c } { l_DSAchar_ \l_DSAchar_key_tl _#2_#1 } } \tl_if_eq:VnTF \l_DSAchar_key_type_tl { bool } { \str_case:nnTF { #3 } { { true } { \bool_set_true:c } { false } { \bool_set_false:c } } { { l_DSAchar_ \l_DSAchar_key_tl _#2_bool } } { \msg_error:nnn { DSAchar } { only~bool } { #2 } } } { \use:c { #1_set:cn } { l_DSAchar_ \l_DSAchar_key_tl _#2_#1 } { #3 } } }%<<< \cs_new:Npn \DSAchar_use_key:n #1%>>> { \prop_get:NnNF \c_DSAchar_key_type_prop { #1 } \l_DSAchar_key_type_tl { \msg_error:nnn { DSAchar } { unknown~key } { #1 } } \DSAchar_use_key:nn { \l_DSAchar_key_type_tl } { #1 } }%<<< \cs_generate_variant:Nn \DSAchar_use_key:n { x } \cs_new:Npn \DSAchar_use_key:nn #1 #2%>>> { \use:c { #1_use:c } { l_DSAchar_ \l_DSAchar_key_tl _#2_#1 } }%<<< \cs_new:Npn \DSAchar_use_int:n #1%>>> { \DSAchar_use_key:nn { int } { #1 } }%<<< \prg_new_conditional:Npnn \DSAchar_bool_if:n #1%>>> { T , F , TF } { \DSAchar_bool_if:nnTF { \l_DSAchar_key_tl } { #1 } { \prg_return_true: } { \prg_return_false: } }%<<< \prg_new_conditional:Npnn \DSAchar_bool_if:nn #1 #2%>>> { T , F , TF } { \bool_if:cTF { l_DSAchar_ #1 _ #2 _bool } { \prg_return_true: } { \prg_return_false: } }%<<< \cs_new_protected:Npn \DSAchar_def_undefined_key:nnn #1 #2 #3%>>> { \DSAchar_if_key_defined:nnF { #1 } { #2 } { \DSAchar_set_key:nnn { #1 } { #2 } { #3 } } }%<<< \cs_new_protected:Npn \DSAchar_def_undefined_key:nn #1 #2%>>> { \prop_get:NnNF \c_DSAchar_key_type_prop { #1 } \l_DSAchar_key_type_tl { \msg_error:nnn { DSAchar } { unknown~key } { #1 } } \DSAchar_def_undefined_key:nnn { \l_DSAchar_key_type_tl } { #1 } { #2 } }%<<< \cs_new_protected:Npn \DSAchar_typeset_basis_value:n #1%>>> { \makebox [ 0pt ] [ l ] { \MakeUppercase { #1 } : } \phantom { MU : } ~ \phantom { 88 } \llap { \DSAchar_use_int:n { #1 } } }%<<< \cs_new_protected:Npn \DSAchar_set_default_values:%>>> { \DSAchar_set_key:nn { mu } { \DSAcharEigStandard } \DSAchar_set_key:nn { kl } { \DSAcharEigStandard } \DSAchar_set_key:nn { in } { \DSAcharEigStandard } \DSAchar_set_key:nn { ch } { \DSAcharEigStandard } \DSAchar_set_key:nn { ff } { \DSAcharEigStandard } \DSAchar_set_key:nn { ge } { \DSAcharEigStandard } \DSAchar_set_key:nn { ko } { \DSAcharEigStandard } \DSAchar_set_key:nn { kk } { \DSAcharEigStandard } \DSAchar_set_key:nn { gs } { \DSAcharGSStandard } \DSAchar_set_key:nn { rs } { \DSAcharRSStandard } \DSAchar_set_key:nn { be } { \DSAcharBEStandard } \DSAchar_set_key:nn { magier } { false } \DSAchar_set_key:nn { geweihter } { false } \DSAchar_set_key:nn { waffe } { \textit{keine} } }%<<< \cs_new:Npn \DSAchar_get_key_expandable:nn #1 #2%>>> { \DSAchar_get_key_expandable_inner_a:nf { #1 } { \tl_lower_case:n { #2 } } }%<<< \cs_new:Npn \DSAchar_get_key_expandable_inner_a:nn #1 #2%>>> { \DSAchar_get_key_expandable_inner_b:nnf { #1 } { #2 } { \prop_item:Nn \c_DSAchar_key_type_prop { #2 } } }%<<< \cs_new:Npn \DSAchar_get_key_expandable_inner_b:nnn #1 #2 #3%>>> { \use:c { #3_use:c } { l_DSAchar_#1_#2_#3 } }%<<< \cs_new:Npn \DSAchar_print_clist:nnn #1 #2 #3%>>> { \clist_use:cn { l_DSAchar_ #1 _ #2 _clist } { #3 } }%<<< \cs_new_protected:Npn \DSAchar_print_clist_labelled:nnnn #1 #2 #3 #4%>>> { \tl_set:Nn \l_DSAchar_key_tl { #1 } #3:~ \DSAchar_if_key_defined:nTF { #2 } { \DSAchar_print_clist:nnn { #1 } { #2 } { #4 } } { \textit{keine} } }%<<< \cs_generate_variant:Nn \DSAchar_get_key_expandable_inner_a:nn { nf } \cs_generate_variant:Nn \DSAchar_get_key_expandable_inner_b:nnn { nnf } \keys_define:nn { DSAchar }%>>> { %,mu .code:n = \DSAchar_set_key:nn { mu } { #1 } %,kl .code:n = \DSAchar_set_key:nn { kl } { #1 } %,in .code:n = \DSAchar_set_key:nn { in } { #1 } %,ch .code:n = \DSAchar_set_key:nn { ch } { #1 } %,ff .code:n = \DSAchar_set_key:nn { ff } { #1 } %,ge .code:n = \DSAchar_set_key:nn { ge } { #1 } %,ko .code:n = \DSAchar_set_key:nn { ko } { #1 } %,kk .code:n = \DSAchar_set_key:nn { kk } { #1 } %,le .code:n = \DSAchar_set_key:nn { le } { #1 } %,au .code:n = \DSAchar_set_key:nn { au } { #1 } %,ws .code:n = \DSAchar_set_key:nn { ws } { #1 } %,ae .code:n = \DSAchar_set_key:nn { ae } { #1 } %,ke .code:n = \DSAchar_set_key:nn { ke } { #1 } %,mr .code:n = \DSAchar_set_key:nn { mr } { #1 } %,ini .code:n = \DSAchar_set_key:nn { ini } { #1 } %,gs .code:n = \DSAchar_set_key:nn { gs } { #1 } %,rs .code:n = \DSAchar_set_key:nn { rs } { #1 } %,be .code:n = \DSAchar_set_key:nn { be } { #1 } %,waffe .code:n = \DSAchar_set_key:nn { waffe } { #1 } %,links .code:n = \DSAchar_set_key:nn { links } { #1 } %,rasse .code:n = \DSAchar_set_key:nn { rasse } { #1 } %,kultur .code:n = \DSAchar_set_key:nn { kultur } { #1 } %,profession .code:n = \DSAchar_set_key:nn { profession } { #1 } %,magier .code:n = \DSAchar_set_key:nn { magier } { #1 } %,geweihter .code:n = \DSAchar_set_key:nn { geweihter } { #1 } % ,unknown .code:n = \tl_set:Nx \l_tmpa_tl { \str_lower_case:f { \l_keys_key_tl } } \DSAchar_set_key:on { \l_tmpa_tl } { #1 } ,klasse .meta:n = { profession = { #1 } } ,Klasse .meta:n = { profession = { #1 } } ,manöver .meta:n = { manoever = { #1 } } ,Manöver .meta:n = { manoever = { #1 } } }%<<< \NewDocumentCommand \NeueStandards { s +m }%>>> { \IfBooleanTF { #1 } { \tl_set:Nn } { \tl_put_right:Nn } \l_DSAchar_additional_defaults_tl { #2 } }%<<< \NewDocumentCommand \NeuerChar { m m m +m }%>>> { \tl_set:Nn \l_DSAchar_key_tl { #1 } \DSAchar_set_default_values: \DSAchar_set_key:nnn { tl } { fullname } { #2~#3 } \keys_set:nV { DSAchar } \l_DSAchar_additional_defaults_tl \keys_set:nn { DSAchar } { #4 } \exp_args:Nc \NeuerName { #1 } { #2 } { #3 } \DSAchar_def_undefined_key:nn { le }%>>> { \DSAchar_use_int:n { ko } + \DSAchar_use_int:n { kk } / 2 }%<<< \DSAchar_def_undefined_key:nn { au }%>>> { ( \DSAchar_use_int:n { mu } + \DSAchar_use_int:n { ko } + \DSAchar_use_int:n { ge } ) / 2 }%<<< \DSAchar_def_undefined_key:nn { ws }%>>> Wundschwelle { \DSAchar_use_int:n { ko } / 2 }%<<< \DSAchar_def_undefined_key:nn { ae }%>>> { ( \DSAchar_use_int:n { mu } + \DSAchar_use_int:n { in } + \DSAchar_use_int:n { ch } ) / 2 }%<<< \DSAchar_def_undefined_key:nn { at }%>>> { ( \DSAchar_use_int:n { mu } + \DSAchar_use_int:n { ge } + \DSAchar_use_int:n { kk } ) / 5 }%<<< \DSAchar_def_undefined_key:nn { pa }%>>> { ( \DSAchar_use_int:n { in } + \DSAchar_use_int:n { ge } + \DSAchar_use_int:n { kk } ) / 5 }%<<< \DSAchar_def_undefined_key:nn { fk }%>>> Fernkampf { ( \DSAchar_use_int:n { in } + \DSAchar_use_int:n { ff } + \DSAchar_use_int:n { kk } ) / 5 }%<<< \DSAchar_def_undefined_key:nn { ini }%>>> { ( 2 * \DSAchar_use_int:n { mu } + \DSAchar_use_int:n { in } + \DSAchar_use_int:n { ge } ) / 5 - \DSAchar_use_int:n { be } }%<<< \DSAchar_def_undefined_key:nn { mr }%>>> { ( \DSAchar_use_int:n { mu } + \DSAchar_use_int:n { kl } + \DSAchar_use_int:n { ko } ) / 5 }%<<< }%<<< \NewDocumentCommand \CharParse { m +m }%>>> { }%<<< \NewExpandableDocumentCommand \CharName { m }%>>> { \DSAchar_get_key_expandable_inner_b:nnn { #1 } { fullname } { tl } }%<<< \NewDocumentCommand \CharBasis { m }%>>> { \tl_set:Nn \l_DSAchar_key_tl { #1 } \begin{tabular}[t]{@{}l@{}} \textbf { \DSAchar_use_key:nn { tl } { fullname } } \\ \begin{tabular}{@{}*4l@{}} \DSAchar_typeset_basis_value:n { mu } & \DSAchar_typeset_basis_value:n { kl } & \DSAchar_typeset_basis_value:n { in } & \DSAchar_typeset_basis_value:n { ch } \\ \DSAchar_typeset_basis_value:n { ff } & \DSAchar_typeset_basis_value:n { ge } & \DSAchar_typeset_basis_value:n { ko } & \DSAchar_typeset_basis_value:n { kk } \\ \DSAchar_typeset_basis_value:n { le } & \DSAchar_typeset_basis_value:n { au } & \DSAchar_typeset_basis_value:n { mr } \DSAchar_bool_if:nTF { magier } { & \DSAchar_typeset_basis_value:n { ae } } {} \DSAchar_bool_if:nTF { geweihter } { & \DSAchar_typeset_basis_value:n { ke } } {} \end{tabular} \end{tabular} }%<<< \NewDocumentCommand \CharEig { m m }%>>> { \tl_set:Nn \l_DSAchar_key_tl { #1 } \DSAchar_use_key:x { \tl_lower_case:n { #2 } } }%<<< \NewExpandableDocumentCommand \CharEigE { m m }%>>> { \DSAchar_get_key_expandable:nn { #1 } { #2 } }%<<< \NewDocumentCommand \CharKampf { O{\wd0} m }%>>> { \group_begin: \tl_set:Nn \l_DSAchar_key_tl { #2 } \setbox0\hbox { \begin{tabular}[t]{@{}l@{}} \CharBasis { #2 }\\ \end{tabular} } \cs_set:Npn \width { \wd0 } \begin{tabular}[t]{@{}p{#1}@{}} \toprule \usebox0\\ \DSAindentedThingy Waffe:~\DSAchar_use_key:n { waffe }\\ \DSAchar_if_key_defined:nT { links } { \DSAindentedThingy Linke~Hand:~\DSAchar_use_key:n { links } \\ } \DSAchar_typeset_basis_value:n { at } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { pa } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { fk } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { ini } \\ \DSAchar_typeset_basis_value:n { rs } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { be } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { ws } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { gs } \\ \DSAindentedThingy\CharSonderfertigkeiten { #2 } \\ \DSAindentedThingy\CharManoever { #2 } \\ \DSAchar_bool_if:nnT { #2 } { magier } { \DSAindentedThingy\CharZauber { #2 } \\ }% \DSAchar_bool_if:nnT { #2 } { geweihter } { \DSAindentedThingy\CharLiturgien { #2 } \\ }% \bottomrule \end{tabular} \group_end: }%<<< \NewDocumentCommand \CharKampfKurz { O{\wd0} m }%>>> { \group_begin: \tl_set:Nn \l_DSAchar_key_tl { #2 } \setbox0\hbox { \begin{tabular}[t]{@{}*4l@{}} \DSAchar_typeset_basis_value:n { le } & \DSAchar_typeset_basis_value:n { au } & \DSAchar_typeset_basis_value:n { mr } \DSAchar_bool_if:nTF { magier } { & \DSAchar_typeset_basis_value:n { ae } } {} \DSAchar_bool_if:nTF { geweihter } { & \DSAchar_typeset_basis_value:n { ke } } {} \\ \DSAchar_typeset_basis_value:n { at } & \DSAchar_typeset_basis_value:n { pa } & \DSAchar_typeset_basis_value:n { fk } & \DSAchar_typeset_basis_value:n { ini } \end{tabular} } \cs_set:Npn \width { \wd0 } \begin{tabular}[t]{@{}p{#1}@{}} \toprule \textbf { \DSAchar_use_key:nn { tl } { fullname } } \\ \DSAindentedThingy Waffe:~\DSAchar_use_key:n { waffe } \\ \DSAchar_if_key_defined:nT { links } { \DSAindentedThingy Linke~Hand:~\DSAchar_use_key:n { links } \\ } \usebox0 \\ \DSAchar_typeset_basis_value:n { rs } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { be } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { ws } \hskip2\tabcolsep \DSAchar_typeset_basis_value:n { gs } \\ \DSAchar_if_key_defined:nnT { clist } { sonderfertigkeiten } { \DSAindentedThingy\CharSonderfertigkeiten { #2 } \\ } \DSAchar_if_key_defined:nnT { clist } { manoever } { \DSAindentedThingy\CharManoever { #2 } \\ } \DSAchar_bool_if:nnT { #2 } { magier } { \DSAchar_if_key_defined:nnT { clist } { zauber } { \DSAindentedThingy\CharZauber { #2 } \\ } } \DSAchar_bool_if:nnT { #2 } { geweihter } { \DSAchar_if_key_defined:nnT { clist } { liturgien } { \DSAindentedThingy\CharLiturgien { #2 } \\ } } \bottomrule \end{tabular} \group_end: }%<<< \NewDocumentCommand \CharManoever { O{,~} m }%>>> { \DSAchar_print_clist_labelled:nnnn { #2 } { manoever } { Manöver } { #1 } }%<<< \NewDocumentCommand \CharZauber { O{,~} m }%>>> { \DSAchar_print_clist_labelled:nnnn { #2 } { zauber } { Zauber } { #1 } }%<<< \NewDocumentCommand \CharLiturgien { O{,~} m }%>>> { \DSAchar_print_clist_labelled:nnnn { #2 } { liturgien } { Liturgien } { #1 } }%<<< \NewDocumentCommand \CharSonderfertigkeiten { O{,~} m }%>>> { \DSAchar_print_clist_labelled:nnnn { #2 } { sonderfertigkeiten } { Sonderfertigkeiten } { #1 } }%<<< \NewExpandableDocumentCommand \CharListe { O{,~} m m }%>>> { \DSAchar_print_clist:nnn { #2 } { #3 } { #1 } }%<<< \NewExpandableDocumentCommand \CharBoolTF { m m }%>>> { \DSAchar_bool_if:nnTF { #1 } { #2 } }%<<< %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<<< \endinput