From badaed21f7141a96f6f45926f52fbee0d695260c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 14 Jul 2019 20:48:09 +0000 Subject: numberpt (14jul19) git-svn-id: svn://tug.org/texlive/trunk@51640 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/numberpt/numberpt.sty | 265 ++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/numberpt/numberpt.sty (limited to 'Master/texmf-dist/tex/latex/numberpt') diff --git a/Master/texmf-dist/tex/latex/numberpt/numberpt.sty b/Master/texmf-dist/tex/latex/numberpt/numberpt.sty new file mode 100644 index 00000000000..5f56ac25f4a --- /dev/null +++ b/Master/texmf-dist/tex/latex/numberpt/numberpt.sty @@ -0,0 +1,265 @@ +%% +%% This is file `numberpt.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% numberpt.dtx +%% +%% Copyright (C) 2019 Miguel V. S. Frasson (mvsfrasson@gmail.com) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% 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.3c or later is part of all distributions of LaTeX +%% version 2008/05/04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is the author. +%% +%% This work consists of the files numberpt.dtx and numberpt.ins +%% and the derived file numberpt.sty. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{numberpt}[2019/07/12 v1.0 Counters as numbers in Portuguese] +\RequirePackage{expl3,xparse} +\ExplSyntaxOn +\bool_new:N \NumberPT_catorze +\bool_new:N \NumberPT_dezesseis +\newcommand{\NumberPTcatorze}{\bool_set_true:N \NumberPT_catorze} +\newcommand{\NumberPTquatorze}{\bool_set_false:N \NumberPT_catorze} +\DeclareOption{ catorze }{ \NumberPTcatorze } +\DeclareOption{ quatorze }{ \NumberPTquatorze } +\ExecuteOptions{ catorze } +\newcommand{\NumberPTdezesseis}{\bool_set_true:N \NumberPT_dezesseis} +\newcommand{\NumberPTdezasseis}{\bool_set_false:N \NumberPT_dezesseis} +\DeclareOption{ dezasseis }{ \NumberPTdezasseis} +\DeclareOption{ dezesseis }{ \NumberPTdezesseis} +\ExecuteOptions{ dezesseis } +\ProcessOptions +\bool_new:N \NumberPT_capital +\bool_new:N \NumberPT_capitalfirst +\bool_new:N \NumberPT_capitale +\bool_new:N \NumberPT_uppercase +\cs_new:Nn \NumberPT_case:nn { + \bool_if:NTF \NumberPT_capital { + \uppercase { #1 } + } { + #1 + } + \bool_if:NTF \NumberPT_uppercase { + \uppercase { #2 } + } { + #2 } + \bool_if:NT \NumberPT_capitalfirst { + \bool_set_false:N \NumberPT_capital + } +} +\cs_new:Nn \NumberPT_u:n { + \if_case:w #1 + \NumberPT_case:nn {z}{ero}\or: + \NumberPT_case:nn {u}{m}\or: + \NumberPT_case:nn {d}{ois}\or: + \NumberPT_case:nn {t}{r\^es}\or: + \NumberPT_case:nn {q}{uatro}\or: + \NumberPT_case:nn {c}{inco}\or: + \NumberPT_case:nn {s}{eis}\or: + \NumberPT_case:nn {s}{ete}\or: + \NumberPT_case:nn {o}{ito}\or: + \NumberPT_case:nn {n}{ove}% + \fi:} +\cs_new:Nn \NumberPT_e_u:n { + \int_compare:nNnT #1 > 0 { + \space \bool_if:nTF \NumberPT_capitale {E}{e} \space \NumberPT_u:n #1 + } +} +\cs_new:Nn \NumberPT_du:nn { + \if_case:w #1 % #1=0 + \NumberPT_u:n #2 + \or: % #1=1 + \if_case:w #2 + \NumberPT_case:nn {d}{ez}\or: + \NumberPT_case:nn {o}{nze}\or: + \NumberPT_case:nn {d}{oze}\or: + \NumberPT_case:nn {t}{reze}\or: + \bool_if:NTF \NumberPT_catorze { + \NumberPT_case:nn {c}{atorze} + } { + \NumberPT_case:nn {q}{uatorze} + }\or: + \NumberPT_case:nn {q}{uinze}\or: + \bool_if:NTF \NumberPT_dezesseis { + \NumberPT_case:nn {d}{ezesseis} + } { + \NumberPT_case:nn {d}{ezasseis} + }\or: + \bool_if:NTF \NumberPT_dezesseis { + \NumberPT_case:nn {d}{ezessete} + } { + \NumberPT_case:nn {d}{ezassete} + }\or: + \NumberPT_case:nn {d}{ezoito}\or: + \bool_if:NTF \NumberPT_dezesseis { + \NumberPT_case:nn {d}{ezenove} + } { + \NumberPT_case:nn {d}{ezanove} + }\or: + \fi: + \or: % #1>1 + \NumberPT_case:nn {v}{inte} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {t}{rinta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {q}{uarenta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {c}{inquenta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {s}{essenta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {s}{etenta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {o}{itenta} \NumberPT_e_u:n #2 + \or: + \NumberPT_case:nn {n}{oventa} \NumberPT_e_u:n #2 + \fi: +} + +\cs_new:Nn \NumberPT_e_du:nn { + \int_compare:nNnT { #1 + #2 } > 0 { + \space \bool_if:nTF \NumberPT_capitale {E}{e} \space \NumberPT_du:nn #1 #2 + } +} +\cs_new:Nn \NumberPT_cdu:nnn {% + \if_case:w #1 % #1=0 + \NumberPT_du:nn #2 #3 + \or: % #1=1 + \int_compare:nNnTF { #2 + #3 } = 0 % "cem" if 00 or "cento e " + finish + { \NumberPT_case:nn {c}{em} } + { \NumberPT_case:nn {c}{ento} \NumberPT_e_du:nn #2 #3 } + \or: % #1>1 + \NumberPT_case:nn {d}{uzentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {t}{rezentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {q}{uatrocentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {q}{uinhentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {s}{eiscentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {s}{etecentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {o}{itocentos} \NumberPT_e_du:nn #2 #3 + \or: + \NumberPT_case:nn {n}{ovecentos} \NumberPT_e_du:nn #2 #3 + \fi: +} +\cs_new:Nn \NumberPT_e_cdu:nnn { + \int_compare:nNnF {#1 + #2 + #3} = 0 { + \space + \bool_if:nT { \int_compare_p:nNn #1 = 0 || \int_compare_p:nNn {#2 + #3} = 0 } + { + \bool_if:nTF \NumberPT_capitale {E}{e} + \space + } + \NumberPT_cdu:nnn #1 #2 #3 + } +} +\cs_new:Nn \NumberPT_abcdef:nnnnnn { + \int_compare:nNnTF {#1 + #2 + #3} = 0 %abc=000 + { + \NumberPT_cdu:nnn #4 #5 #6 + } + % else + { + % avoid "um mil", using just "mil" + \int_compare:nNnF {100 * #1 + 10 * #2 + #3} = 1 { + \NumberPT_cdu:nnn #1 #2 #3 + \space + } + \NumberPT_case:nn {m}{il} + \NumberPT_e_cdu:nnn #4 #5 #6 + } +} +\cs_generate_variant:Nn \NumberPT_abcdef:nnnnnn {xxxxxx} +\int_new:N \NumberPT_digit_u +\int_new:N \NumberPT_digit_d +\int_new:N \NumberPT_digit_c +\int_new:N \NumberPT_digit_um +\int_new:N \NumberPT_digit_dm +\int_new:N \NumberPT_digit_cm + +\cs_new:Nn \NumberPT_decompose:n { + \int_set:Nn \l_tmpa_int { #1 } + \int_set:Nn \NumberPT_digit_u { \int_mod:nn { \l_tmpa_int } { 10 } } + \int_set:Nn \l_tmpa_int { ( \l_tmpa_int - \NumberPT_digit_u ) / 10 } + \int_set:Nn \NumberPT_digit_d { \int_mod:nn { \l_tmpa_int } { 10 } } + \int_set:Nn \l_tmpa_int { ( \l_tmpa_int - \NumberPT_digit_d ) / 10 } + \int_set:Nn \NumberPT_digit_c { \int_mod:nn { \l_tmpa_int } { 10 } } + \int_set:Nn \l_tmpa_int { ( \l_tmpa_int - \NumberPT_digit_c ) / 10 } + \int_set:Nn \NumberPT_digit_um { \int_mod:nn { \l_tmpa_int } { 10 } } + \int_set:Nn \l_tmpa_int { ( \l_tmpa_int - \NumberPT_digit_um ) / 10 } + \int_set:Nn \NumberPT_digit_dm { \int_mod:nn { \l_tmpa_int } { 10 } } + \int_set:Nn \l_tmpa_int { ( \l_tmpa_int - \NumberPT_digit_dm ) / 10 } + \int_set:Nn \NumberPT_digit_cm { \int_mod:nn { \l_tmpa_int } { 10 } } +} +\msg_new:nnn +{ numberpt } { counter-out-of-range } {Counter~`#1'~out~of~range~0~...~999999} + +\cs_new:Nn \NumberPT_print_counter:n { + \int_set:Nn \l_tmpa_int { \value{#1} } + \bool_if:nTF { + \int_compare_p:n { \l_tmpa_int >= 0 } && + \int_compare_p:n { \l_tmpa_int < 1000000 } + } + { + \NumberPT_decompose:n { \l_tmpa_int } + \NumberPT_abcdef:xxxxxx + { \int_use:N \NumberPT_digit_cm } + { \int_use:N \NumberPT_digit_dm } + { \int_use:N \NumberPT_digit_um } + { \int_use:N \NumberPT_digit_c } + { \int_use:N \NumberPT_digit_d } + { \int_use:N \NumberPT_digit_u } + } + { + \msg_error:nnn { numberpt } { counter-out-of-range } {#1} + \arabic{#1} + } +} +\NewDocumentCommand{\numberpt}{m}{ + \bool_set_false:N \NumberPT_capital + \bool_set_false:N \NumberPT_capitale + \bool_set_false:N \NumberPT_uppercase + \NumberPT_print_counter:n { #1 } +} + +\NewDocumentCommand{\NumberPt}{s m}{ + \bool_set_true:N \NumberPT_capital + \bool_set:Nn \NumberPT_capitale {! #1} + \bool_set_false:N \NumberPT_capitalfirst + \bool_set_false:N \NumberPT_uppercase + \NumberPT_print_counter:n { #2 } +} + +\NewDocumentCommand{\Numberpt}{m}{ + \bool_set_true:N \NumberPT_capital + \bool_set_false:N \NumberPT_capitale + \bool_set_true:N \NumberPT_capitalfirst + \bool_set_false:N \NumberPT_uppercase + \NumberPT_print_counter:n { #1 } +} + +\NewDocumentCommand{\NUMBERPT}{m}{ + \bool_set_true:N \NumberPT_capital + \bool_set_true:N \NumberPT_capitale + \bool_set_true:N \NumberPT_uppercase + \NumberPT_print_counter:n { #1 } +} +\ExplSyntaxOff +\endinput +%% +%% End of file `numberpt.sty'. -- cgit v1.2.3