%% %% This is file `projlib-datetime.sty', %% generated with the docstrip utility. %% Copyright (C) 2021-2022 by Jinwen XU %% %% This is part of the ProjLib Toolkit. %% %% 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 %% 2005/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[2020-10-01] \RequirePackage{l3keys2e} \ProvidesExplPackage {projlib-datetime} {2022/03/21} {} {Convert numeric date-time string to natural language} \tl_new:N \g__projlib_datetime_input_format_tl \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } \keys_define:nn { projlib-datetime } { , plain .bool_set:N = \l__projlib_datetime_plain_bool , plain .initial:n = { false } , year-month-day .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-day-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { month-day-year } } , day-month-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , year-month .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-day .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , day-month .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , unknown .code:n = {} } \ProcessKeysOptions { projlib-datetime } \bool_if:NT \l__projlib_datetime_plain_bool { \hook_gput_code:nnn { begindocument/before } { projlib-datetime } { \cs_set:Nn \projlib_datetime_text_superscript:n { #1 } } } \tl_new:N \l__projlib_datetime_output_format_tl \keys_define:nn { projlib-datetime-command } { , year-month-day .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-day-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { month-day-year } } , day-month-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , year-month .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-day .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } , month-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , day-month .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } , only-year-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year-month } } , only-month-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month-day } } , only-year .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year } } , only-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month } } , only-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-day } } , unknown .code:n = {} } \msg_new:nnnn { projlib-datetime } { non-supported-date-format } { The~date~format~"#1"~is~not~supported. } { The~only~formats~available~are~"year-month-day",~ "month-day-year"~and~"day-month-year". } \cs_new:Nn \projlib_datetime_set_input_format:n { \str_case:nnF { #1 } { { year-month-day } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } { month-day-year } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { month-day-year } } { day-month-year } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } } { \msg_error:nnn { projlib-datetime } { non-supported-date-format } { #1 } } } \NewDocumentCommand \ProjLibSetDatetimeInputFormat { m } { \projlib_datetime_set_input_format:n { #1 } } \seq_new:N \l__projlib_datetime_date_seq \cs_new_protected:Nn \projlib_datetime_text_superscript:n { \group_begin: \small \textsuperscript { #1 } \group_end: } \cs_new:Nn \__projlib_datetime_today:n { \str_case_e:nnF { \l__projlib_datetime_output_format_tl } { { only-year-month } { \cs_if_exist_use:c { projlib_datetime_display_year_month #1 _ \languagename :nn } { \int_use:N \c_sys_year_int } { \int_use:N \c_sys_month_int } } { only-month-day } { \cs_if_exist_use:c { projlib_datetime_display_month_day #1 _ \languagename :nn } { \int_use:N \c_sys_month_int } { \int_use:N \c_sys_day_int } } { only-year } { \cs_if_exist_use:cT { projlib_datetime_display_year #1 _ \languagename :n } { { \int_use:N \c_sys_year_int } } } { only-month } { \cs_if_exist_use:cT { projlib_datetime_display_month #1 _ \languagename :n } { { \int_use:N \c_sys_month_int } } } { only-day } { \cs_if_exist_use:cT { projlib_datetime_display_day #1 _ \languagename :n } { { \int_use:N \c_sys_day_int } } } } { \cs_if_exist_use:c { projlib_datetime_display_year_month_day #1 _ \languagename :nnn } { \int_use:N \c_sys_year_int } { \int_use:N \c_sys_month_int } { \int_use:N \c_sys_day_int } } } \NewDocumentCommand \ProjLibtoday { O{} } { \group_begin: \keys_set:nn { projlib-datetime-command } { #1 } \__projlib_datetime_today:n {} \group_end: } \NewDocumentCommand \ProjLibToday { O{} } { \group_begin: \keys_set:nn { projlib-datetime-command } { #1 } \__projlib_datetime_today:n { _uppercase } \group_end: } \cs_new_protected:Nn \projlib_datetime_display_year_month_day:n { \__projlib_datetime_display_year_month_day:en { #1 } {} } \cs_new_protected:Nn \projlib_datetime_display_year_month_day_uppercase:n { \__projlib_datetime_display_year_month_day:en { #1 } { _uppercase } } \cs_new_protected:Nn \__projlib_datetime_display_year_month_day:nn { \regex_match:nnTF { \A \d{4}-\d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_year_month_day #2 _ \languagename :nnn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % day } { \regex_match:nnTF { \A \d{4}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month } { \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day } { #1 } } } } \cs_generate_variant:Nn \__projlib_datetime_display_year_month_day:nn { en } \cs_new_protected:Nn \projlib_datetime_display_month_day_year:n { \__projlib_datetime_display_month_day_year:en { #1 } {} } \cs_new_protected:Nn \projlib_datetime_display_month_day_year_uppercase:n { \__projlib_datetime_display_month_day_year:en { #1 } { _uppercase } } \cs_new_protected:Nn \__projlib_datetime_display_month_day_year:nn { \regex_match:nnTF { \A \d{1,2}-\d{1,2}-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_month_day_year #2 _ \languagename :nnn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day } { \regex_match:nnTF { \A \d{1,2}-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month } { \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day } { #1 } } } } \cs_generate_variant:Nn \__projlib_datetime_display_month_day_year:nn { en } \cs_new_protected:Nn \projlib_datetime_display_day_month_year:n { \__projlib_datetime_display_day_month_year:en { #1 } {} } \cs_new_protected:Nn \projlib_datetime_display_day_month_year_uppercase:n { \__projlib_datetime_display_day_month_year:en { #1 } { _uppercase } } \cs_new_protected:Nn \__projlib_datetime_display_day_month_year:nn { \regex_match:nnTF { \A \d{1,2}-\d{1,2}-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_day_month_year #2 _ \languagename :nnn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % day } { \regex_match:nnTF { \A \d{1,2}-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % year { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month } { \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % day } { #1 } } } } \cs_generate_variant:Nn \__projlib_datetime_display_day_month_year:nn { en } \cs_new_protected:Nn \__projlib_datetime_date_parse_year_month_day:n { \regex_match:nnTF { \A \d{4}-\d{1,2}(|-\d{1,2}) \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } } { \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \seq_put_left:Nn \l__projlib_datetime_date_seq {} } } } \cs_new_protected:Nn \__projlib_datetime_date_parse_month_day_year:n { \regex_match:nnTF { \A \d{1,2}(|-\d{1,2})-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \seq_pop_right:NN \l__projlib_datetime_date_seq \l_tmpa_tl \seq_put_left:NV \l__projlib_datetime_date_seq \l_tmpa_tl } { \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \seq_put_left:Nn \l__projlib_datetime_date_seq {} } } } \cs_new_protected:Nn \__projlib_datetime_date_parse_day_month_year:n { \regex_match:nnTF { \A \d{1,2}(|-\d{1,2})-\d{4} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \seq_reverse:N \l__projlib_datetime_date_seq } { \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } { \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } \seq_reverse:N \l__projlib_datetime_date_seq \seq_put_left:Nn \l__projlib_datetime_date_seq {} } } } \cs_new:Nn \__projlib_datetime_input_format_to_str: { \str_case_e:nn { \g__projlib_datetime_input_format_tl } { { year-month-day } { year_month_day } { month-day-year } { month_day_year } { day-month-year } { day_month_year } } } \cs_new_protected:Nn \__projlib_datetime_display_date_according_to_format:nn { \cs_if_exist_use:c { __projlib_datetime_date_parse_ \__projlib_datetime_input_format_to_str: :n } { #1 } \str_case_e:nnF { \l__projlib_datetime_output_format_tl } { { only-year-month } { \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } } { only-month-day } { \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } } { only-year } { \cs_if_exist_use:c { projlib_datetime_display_year #2 _ \languagename :n } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } } { only-month } { \cs_if_exist_use:c { projlib_datetime_display_month #2 _ \languagename :n } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } } { only-day } { \cs_if_exist_use:c { projlib_datetime_display_day #2 _ \languagename :n } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } } } { \cs_if_exist_use:c { projlib_datetime_display_ \__projlib_datetime_input_format_to_str: #2 :n } { #1 } } } \NewDocumentCommand \ProjLibdate { O{} m O{} } { \group_begin: \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } \tl_set:Nx \l_tmpa_tl { #2 } \regex_replace_all:nnN { \D } { - } \l_tmpa_tl \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } {} \group_end: } \NewDocumentCommand \ProjLibDate { O{} m O{} } { \group_begin: \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } \tl_set:Nx \l_tmpa_tl { #2 } \regex_replace_all:nnN { \D } { - } \l_tmpa_tl \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } { _uppercase } \group_end: } \ProvideDocumentCommand \Thedate {} { \ProjLibdate } \ProvideDocumentCommand \TheDate {} { \ProjLibDate } \int_new:N \l__projlib_datetime_day_of_week_day_int \int_new:N \l__projlib_datetime_day_of_week_month_int \int_new:N \l__projlib_datetime_day_of_week_year_int \int_new:N \l__projlib_datetime_day_of_week_century_int \int_new:N \l__projlib_datetime_day_of_week_result_int \cs_new:Nn \__projlib_datetime_calculate_day_of_week_with_year_month_day:nnn { \int_set:Nn \l__projlib_datetime_day_of_week_day_int { #3 } \int_compare:nNnTF { #2 } < { 3 } { \int_set:Nn \l__projlib_datetime_day_of_week_year_int { \int_eval:n { #1 - 1 } } } { \int_set:Nn \l__projlib_datetime_day_of_week_year_int { #1 } } \int_set:Nn \l__projlib_datetime_day_of_week_century_int { \int_eval:n { \l__projlib_datetime_day_of_week_year_int / 100 } } \int_set:Nn \l__projlib_datetime_day_of_week_year_int { \int_mod:nn { \l__projlib_datetime_day_of_week_year_int } { 100 } } \int_set:Nn \l__projlib_datetime_day_of_week_month_int { \int_case:nnF { #2 } { { 1 } { 0 } { 2 } { 3 } { 3 } { 2 } { 4 } { 5 } { 5 } { 0 } { 6 } { 3 } { 7 } { 5 } { 8 } { 1 } { 9 } { 4 } { 10 } { 6 } { 11 } { 2 } { 12 } { 4 } } { 0 } } \int_set:Nn \l__projlib_datetime_day_of_week_result_int { \int_eval:n { \l__projlib_datetime_day_of_week_day_int + \l__projlib_datetime_day_of_week_month_int +\l__projlib_datetime_day_of_week_year_int + \int_div_truncate:nn { \l__projlib_datetime_day_of_week_year_int } { 4 } + \int_div_truncate:nn { \l__projlib_datetime_day_of_week_century_int } { 4 } - 2 * \l__projlib_datetime_day_of_week_century_int } } \int_set:Nn \l__projlib_datetime_day_of_week_result_int { \int_mod:nn { \l__projlib_datetime_day_of_week_result_int } { 7 } } \int_compare:nNnT { \l__projlib_datetime_day_of_week_result_int } < { 1 } { \int_set:Nn \l__projlib_datetime_day_of_week_result_int { \int_eval:n { \l__projlib_datetime_day_of_week_result_int + 7 } } } } \cs_new_protected:Nn \projlib_datetime_display_week:n { \__projlib_datetime_display_week_according_to_format:en { #1 } {} } \cs_new_protected:Nn \projlib_datetime_display_week_uppercase:n { \__projlib_datetime_display_week_according_to_format:en { #1 } { _uppercase } } \cs_new_protected:Nn \__projlib_datetime_display_week_according_to_format:nn { \projlib_datetime_calculate_week_according_to_format:n { #1 } \cs_if_exist_use:c { projlib_datetime_display_week #2 _ \languagename :n } { \l__projlib_datetime_day_of_week_result_int } } \cs_generate_variant:Nn \__projlib_datetime_display_week_according_to_format:nn { en } \cs_new_protected:Nn \projlib_datetime_calculate_week_according_to_format:n { \cs_if_exist_use:c { __projlib_datetime_date_parse_ \__projlib_datetime_input_format_to_str: :n } { #1 } \__projlib_datetime_calculate_day_of_week_with_year_month_day:nnn { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } } \cs_new:Nn \projlib_datetime_display_year_month_day_english:nnn { \projlib_datetime_display_month_day_english:nn { #2 } { #3 } ,\nobreakspace \projlib_datetime_display_year_english:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_english:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_english:nnn { \projlib_datetime_display_month_day_uppercase_english:nn { #2 } { #3 } ,\nobreakspace \projlib_datetime_display_year_english:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_english:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_english:nn { \projlib_datetime_display_month_english:n { #2 } \nobreakspace \projlib_datetime_display_year_english:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_english:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_english:nn { \projlib_datetime_display_month_uppercase_english:n { #2 } \nobreakspace \projlib_datetime_display_year_english:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_english:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_english:nn { \projlib_datetime_display_month_english:n { #1 } \nobreakspace \projlib_datetime_display_day_english:n { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_english:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_english:nn { \projlib_datetime_display_month_uppercase_english:n { #1 } \nobreakspace \projlib_datetime_display_day_english:n { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_english:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_english:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_english:n { #1 } \cs_new:Nn \projlib_datetime_display_month_english:n { \int_case:nnF { #1 } { { 1 } { January } { 2 } { February } { 3 } { March } { 4 } { April } { 5 } { May } { 6 } { June } { 7 } { July } { 8 } { August } { 9 } { September } { 10 } { October } { 11 } { November } { 12 } { December } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_english:n { \projlib_datetime_display_month_english:n { #1 } } \cs_new:Nn \projlib_datetime_display_day_english:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_english:n { #1 } \cs_new:Nn \projlib_datetime_display_week_english:n { \int_case:nnF { #1 } { { 1 } { Monday } { 2 } { Tuesday } { 3 } { Wednesday } { 4 } { Thursday } { 5 } { Friday } { 6 } { Saturday } { 7 } { Sunday } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_english:n { \projlib_datetime_display_week_english:n { #1 } } \cs_new:Nn \projlib_datetime_display_year_month_day_french:nnn { \projlib_datetime_display_month_day_french:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_french:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_french:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_french:nnn { \projlib_datetime_display_month_day_uppercase_french:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_french:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_french:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_french:nn { \projlib_datetime_display_month_french:n { #2 } \nobreakspace \projlib_datetime_display_year_french:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_french:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_french:nn { \projlib_datetime_display_month_uppercase_french:n { #2 } \nobreakspace \projlib_datetime_display_year_french:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_french:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_french:nn { \projlib_datetime_display_day_french:n { #2 } \nobreakspace \projlib_datetime_display_month_french:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_french:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_french:nn { \projlib_datetime_display_month_day_french:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_french:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_french:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_french:n { #1 } \cs_new:Nn \projlib_datetime_display_month_french:n { \int_case:nnF { #1 } { { 1 } { janvier } { 2 } { février } { 3 } { mars } { 4 } { avril } { 5 } { mai } { 6 } { juin } { 7 } { juillet } { 8 } { août } { 9 } { septembre } { 10 } { octobre } { 11 } { novembre } { 12 } { décembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_french:n { \int_case:nnF { #1 } { { 1 } { Janvier } { 2 } { Février } { 3 } { Mars } { 4 } { Avril } { 5 } { Mai } { 6 } { Juin } { 7 } { Juillet } { 8 } { Août } { 9 } { Septembre } { 10 } { Octobre } { 11 } { Novembre } { 12 } { Décembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_french:n { \int_case:nnF { #1 } { { 1 } { 1 \projlib_datetime_text_superscript:n { er } } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_uppercase_french:n { \int_case:nnF { #1 } { { 1 } { 1 \projlib_datetime_text_superscript:n { er } } } { #1 } } \cs_new:Nn \projlib_datetime_display_week_french:n { \int_case:nnF { #1 } { { 1 } { lundi } { 2 } { mardi } { 3 } { mercredi } { 4 } { jeudi } { 5 } { vendredi } { 6 } { samedi } { 7 } { dimanche } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_french:n { \int_case:nnF { #1 } { { 1 } { Lundi } { 2 } { Mardi } { 3 } { Mercredi } { 4 } { Jeudi } { 5 } { Vendredi } { 6 } { Samedi } { 7 } { Dimanche } } { ??? } } \cs_new:Nn \projlib_datetime_display_year_month_day_ngerman:nnn { \projlib_datetime_display_month_day_ngerman:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_ngerman:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_ngerman:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_ngerman:nnn { \projlib_datetime_display_month_day_uppercase_ngerman:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_ngerman:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_ngerman:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_ngerman:nn { \projlib_datetime_display_month_ngerman:n { #2 } \nobreakspace \projlib_datetime_display_year_ngerman:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_ngerman:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_ngerman:nn { \projlib_datetime_display_month_uppercase_ngerman:n { #2 } \nobreakspace \projlib_datetime_display_year_ngerman:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_ngerman:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_ngerman:nn { \projlib_datetime_display_day_ngerman:n { #2 } .\nobreakspace \projlib_datetime_display_month_ngerman:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_ngerman:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_ngerman:nn { \projlib_datetime_display_month_day_ngerman:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_ngerman:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_ngerman:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_ngerman:n { #1 } \cs_new:Nn \projlib_datetime_display_month_ngerman:n { \int_case:nnF { #1 } { { 1 } { Januar } { 2 } { Februar } { 3 } { März } { 4 } { April } { 5 } { Mai } { 6 } { Juni } { 7 } { Juli } { 8 } { August } { 9 } { September } { 10 } { Oktober } { 11 } { November } { 12 } { Dezember } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_ngerman:n { \int_case:nnF { #1 } { { 1 } { Januar } { 2 } { Februar } { 3 } { März } { 4 } { April } { 5 } { Mai } { 6 } { Juni } { 7 } { Juli } { 8 } { August } { 9 } { September } { 10 } { Oktober } { 11 } { November } { 12 } { Dezember } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_ngerman:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_ngerman:n { #1 } \cs_new:Nn \projlib_datetime_display_week_ngerman:n { \int_case:nnF { #1 } { { 1 } { Montag } { 2 } { Dienstag } { 3 } { Mittwoch } { 4 } { Donnerstag } { 5 } { Freitag } { 6 } { Samstag } { 7 } { Sonntag } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_ngerman:n { \projlib_datetime_display_week_ngerman:n { #1 } } \cs_new:Nn \projlib_datetime_display_year_month_day_italian:nnn { \projlib_datetime_display_month_day_italian:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_italian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_italian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_italian:nnn { \projlib_datetime_display_month_day_uppercase_italian:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_italian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_italian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_italian:nn { \projlib_datetime_display_month_italian:n { #2 } \nobreakspace \projlib_datetime_display_year_italian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_italian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_italian:nn { \projlib_datetime_display_month_uppercase_italian:n { #2 } \nobreakspace \projlib_datetime_display_year_italian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_italian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_italian:nn { \projlib_datetime_display_day_italian:n { #2 } \nobreakspace \projlib_datetime_display_month_italian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_italian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_italian:nn { \projlib_datetime_display_month_day_italian:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_italian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_italian:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_italian:n { #1 } \cs_new:Nn \projlib_datetime_display_month_italian:n { \int_case:nnF { #1 } { { 1 } { gennaio } { 2 } { febbraio } { 3 } { marzo } { 4 } { aprile } { 5 } { maggio } { 6 } { giugno } { 7 } { luglio } { 8 } { agosto } { 9 } { settembre } { 10 } { ottobre } { 11 } { novembre } { 12 } { dicembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_italian:n { \int_case:nnF { #1 } { { 1 } { Gennaio } { 2 } { Febbraio } { 3 } { Marzo } { 4 } { Aprile } { 5 } { Maggio } { 6 } { Giugno } { 7 } { Luglio } { 8 } { Agosto } { 9 } { Settembre } { 10 } { Ottobre } { 11 } { Novembre } { 12 } { Dicembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_italian:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_italian:n { #1 } \cs_new:Nn \projlib_datetime_display_week_italian:n { \int_case:nnF { #1 } { { 1 } { lunedì } { 2 } { martedì } { 3 } { mercoledì } { 4 } { giovedì } { 5 } { venerdì } { 6 } { sabato } { 7 } { domenica } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_italian:n { \int_case:nnF { #1 } { { 1 } { Lunedì } { 2 } { Martedì } { 3 } { Mercoledì } { 4 } { Giovedì } { 5 } { Venerdì } { 6 } { Sabato } { 7 } { Domenica } } { ??? } } \cs_new:Nn \projlib_datetime_display_year_month_day_portuguese:nnn { \projlib_datetime_display_month_day_portuguese:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_portuguese:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_portuguese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_portuguese:nnn { \projlib_datetime_display_month_day_uppercase_portuguese:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_portuguese:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_portuguese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_portuguese:nn { \projlib_datetime_display_month_portuguese:n { #2 } \nobreakspace \projlib_datetime_display_year_portuguese:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_portuguese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_portuguese:nn { \projlib_datetime_display_month_uppercase_portuguese:n { #2 } \nobreakspace \projlib_datetime_display_year_portuguese:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_portuguese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_portuguese:nn { \projlib_datetime_display_day_portuguese:n { #2 } \nobreakspace de \nobreakspace \projlib_datetime_display_month_uppercase_portuguese:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_portuguese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_portuguese:nn { \projlib_datetime_display_month_day_portuguese:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_portuguese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_portuguese:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_portuguese:n { #1 } \cs_new:Nn \projlib_datetime_display_month_portuguese:n { \int_case:nnF { #1 } { { 1 } { janeiro } { 2 } { fevereiro } { 3 } { março } { 4 } { abril } { 5 } { maio } { 6 } { junho } { 7 } { julho } { 8 } { agosto } { 9 } { setembro } { 10 } { outubro } { 11 } { novembro } { 12 } { dezembro } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_portuguese:n { \int_case:nnF { #1 } { { 1 } { Janeiro } { 2 } { Fevereiro } { 3 } { Março } { 4 } { Abril } { 5 } { Maio } { 6 } { Junho } { 7 } { Julho } { 8 } { Agosto } { 9 } { Setembro } { 10 } { Outubro } { 11 } { Novembro } { 12 } { Dezembro } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_portuguese:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_portuguese:n { #1 } \cs_new:Nn \projlib_datetime_display_week_portuguese:n { \int_case:nnF { #1 } { { 1 } { segunda-feira } { 2 } { terça-feira } { 3 } { quarta-feira } { 4 } { quinta-feira } { 5 } { sexta-feira } { 6 } { sábado } { 7 } { domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_portuguese:n { \int_case:nnF { #1 } { { 1 } { Segunda-feira } { 2 } { Terça-feira } { 3 } { Quarta-feira } { 4 } { Quinta-feira } { 5 } { Sexta-feira } { 6 } { Sábado } { 7 } { Domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_year_month_day_brazilian:nnn { \projlib_datetime_display_month_day_brazilian:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_brazilian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_brazilian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_brazilian:nnn { \projlib_datetime_display_month_day_uppercase_brazilian:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_brazilian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_brazilian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_brazilian:nn { \projlib_datetime_display_month_brazilian:n { #2 } \nobreakspace \projlib_datetime_display_year_brazilian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_brazilian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_brazilian:nn { \projlib_datetime_display_month_uppercase_brazilian:n { #2 } \nobreakspace \projlib_datetime_display_year_brazilian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_brazilian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_brazilian:nn { \projlib_datetime_display_day_brazilian:n { #2 } \nobreakspace de \nobreakspace \projlib_datetime_display_month_uppercase_brazilian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_brazilian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_brazilian:nn { \projlib_datetime_display_month_day_brazilian:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_brazilian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_brazilian:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_brazilian:n { #1 } \cs_new:Nn \projlib_datetime_display_month_brazilian:n { \int_case:nnF { #1 } { { 1 } { janeiro } { 2 } { fevereiro } { 3 } { março } { 4 } { abril } { 5 } { maio } { 6 } { junho } { 7 } { julho } { 8 } { agosto } { 9 } { setembro } { 10 } { outubro } { 11 } { novembro } { 12 } { dezembro } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_brazilian:n { \int_case:nnF { #1 } { { 1 } { Janeiro } { 2 } { Fevereiro } { 3 } { Março } { 4 } { Abril } { 5 } { Maio } { 6 } { Junho } { 7 } { Julho } { 8 } { Agosto } { 9 } { Setembro } { 10 } { Outubro } { 11 } { Novembro } { 12 } { Dezembro } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_brazilian:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_brazilian:n { #1 } \cs_new:Nn \projlib_datetime_display_week_brazilian:n { \int_case:nnF { #1 } { { 1 } { segunda-feira } { 2 } { terça-feira } { 3 } { quarta-feira } { 4 } { quinta-feira } { 5 } { sexta-feira } { 6 } { sábado } { 7 } { domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_brazilian:n { \int_case:nnF { #1 } { { 1 } { Segunda-feira } { 2 } { Terça-feira } { 3 } { Quarta-feira } { 4 } { Quinta-feira } { 5 } { Sexta-feira } { 6 } { Sábado } { 7 } { Domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_year_month_day_spanish:nnn { \projlib_datetime_display_month_day_spanish:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_spanish:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_spanish:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_spanish:nnn { \projlib_datetime_display_month_day_uppercase_spanish:nn { #2 } { #3 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_spanish:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_spanish:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_spanish:nn { \projlib_datetime_display_month_spanish:n { #2 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_spanish:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_spanish:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_spanish:nn { \projlib_datetime_display_month_uppercase_spanish:n { #2 } \nobreakspace de \nobreakspace \projlib_datetime_display_year_spanish:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_spanish:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_spanish:nn { \projlib_datetime_display_day_spanish:n { #2 } \nobreakspace de \nobreakspace \projlib_datetime_display_month_spanish:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_spanish:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_spanish:nn { \projlib_datetime_display_month_day_spanish:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_spanish:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_spanish:n { #1 } \cs_new:Nn \projlib_datetime_display_year_uppercase_spanish:n { #1 } \cs_new:Nn \projlib_datetime_display_month_spanish:n { \int_case:nnF { #1 } { { 1 } { enero } { 2 } { febrero } { 3 } { marzo } { 4 } { abril } { 5 } { mayo } { 6 } { junio } { 7 } { julio } { 8 } { agosto } { 9 } { septiembre } { 10 } { octubre } { 11 } { noviembre } { 12 } { diciembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_spanish:n { \int_case:nnF { #1 } { { 1 } { Enero } { 2 } { Febrero } { 3 } { Marzo } { 4 } { Abril } { 5 } { Mayo } { 6 } { Junio } { 7 } { Julio } { 8 } { Agosto } { 9 } { Septiembre } { 10 } { Octubre } { 11 } { Noviembre } { 12 } { Diciembre } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_spanish:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_spanish:n { #1 } \cs_new:Nn \projlib_datetime_display_week_spanish:n { \int_case:nnF { #1 } { { 1 } { lunes } { 2 } { martes } { 3 } { miércoles } { 4 } { jueves } { 5 } { viernes } { 6 } { sábado } { 7 } { domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_spanish:n { \int_case:nnF { #1 } { { 1 } { Lunes } { 2 } { Martes } { 3 } { Miércoles } { 4 } { Jueves } { 5 } { Viernes } { 6 } { Sábado } { 7 } { Domingo } } { ??? } } \cs_new:Nn \projlib_datetime_display_year_month_day_schinese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_schinese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_schinese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_schinese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_schinese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_schinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_schinese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_schinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_schinese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_schinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_schinese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_schinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_schinese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_year_uppercase_schinese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_month_schinese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_month_uppercase_schinese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_day_schinese:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_schinese:n { #1 } \cs_new:Nn \projlib_datetime_display_week_schinese:n { \int_case:nnF { #1 } { { 1 } { 星期一 } { 2 } { 星期二 } { 3 } { 星期三 } { 4 } { 星期四 } { 5 } { 星期五 } { 6 } { 星期六 } { 7 } { 星期日 } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_schinese:n { \projlib_datetime_display_week_schinese:n { #1 } } \cs_new:Nn \projlib_datetime_display_year_month_day_tchinese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_tchinese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_tchinese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_tchinese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_tchinese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_tchinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_tchinese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_tchinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_tchinese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_tchinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_tchinese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_tchinese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_tchinese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_year_uppercase_tchinese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_month_tchinese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_month_uppercase_tchinese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_day_tchinese:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_tchinese:n { #1 } \cs_new:Nn \projlib_datetime_display_week_tchinese:n { \int_case:nnF { #1 } { { 1 } { 星期一 } { 2 } { 星期二 } { 3 } { 星期三 } { 4 } { 星期四 } { 5 } { 星期五 } { 6 } { 星期六 } { 7 } { 星期日 } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_tchinese:n { \projlib_datetime_display_week_tchinese:n { #1 } } \cs_new:Nn \projlib_datetime_display_year_month_day_japanese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_japanese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_japanese:nnn { #1 年 #2 月 #3 日 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_japanese:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_japanese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_japanese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_japanese:nn { #1 年 #2 月 } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_japanese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_japanese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_japanese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_japanese:nn { #1 月 #2 日 } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_japanese:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_japanese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_year_uppercase_japanese:n { #1 年 } \cs_new:Nn \projlib_datetime_display_month_japanese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_month_uppercase_japanese:n { #1 月 } \cs_new:Nn \projlib_datetime_display_day_japanese:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_japanese:n { #1 } \cs_new:Nn \projlib_datetime_display_week_japanese:n { \int_case:nnF { #1 } { { 1 } { 月曜日 } { 2 } { 火曜日 } { 3 } { 水曜日 } { 4 } { 木曜日 } { 5 } { 金曜日 } { 6 } { 土曜日 } { 7 } { 日曜日 } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_japanese:n { \projlib_datetime_display_week_japanese:n { #1 } } \cs_new:Nn \projlib_datetime_display_year_month_day_russian:nnn { \projlib_datetime_display_month_day_russian:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_russian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_russian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_russian:nnn { \projlib_datetime_display_month_day_uppercase_russian:nn { #2 } { #3 } \nobreakspace \projlib_datetime_display_year_russian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_russian:nnn { VVV, eee } \cs_new:Nn \projlib_datetime_display_year_month_russian:nn { \projlib_datetime_display_month_russian:n { #2 } \nobreakspace \projlib_datetime_display_year_russian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_russian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_month_uppercase_russian:nn { \projlib_datetime_display_month_uppercase_russian:n { #2 } \nobreakspace \projlib_datetime_display_year_russian:n { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_russian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_russian:nn { \projlib_datetime_display_day_russian:n { #2 } \nobreakspace \int_case:nnF { #1 } { { 1 } { января } { 2 } { февраля } { 3 } { марта } { 4 } { апреля } { 5 } { мая } { 6 } { июня } { 7 } { июля } { 8 } { августа } { 9 } { сентября } { 10 } { октября } { 11 } { ноября } { 12 } { декабря } } { #1 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_russian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_month_day_uppercase_russian:nn { \projlib_datetime_display_month_day_russian:nn { #1 } { #2 } } \cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_russian:nn { VV, ee } \cs_new:Nn \projlib_datetime_display_year_russian:n { #1 ~ г. } \cs_new:Nn \projlib_datetime_display_year_uppercase_russian:n { #1 ~ г. } \cs_new:Nn \projlib_datetime_display_month_russian:n { \int_case:nnF { #1 } { { 1 } { январь } { 2 } { февраль } { 3 } { март } { 4 } { апрель } { 5 } { май } { 6 } { июнь } { 7 } { июль } { 8 } { август } { 9 } { сентябрь } { 10 } { октябрь } { 11 } { ноябрь } { 12 } { декабрь } } { #1 } } \cs_new:Nn \projlib_datetime_display_month_uppercase_russian:n { \int_case:nnF { #1 } { { 1 } { Январь } { 2 } { Февраль } { 3 } { Март } { 4 } { Апрель } { 5 } { Май } { 6 } { Июнь } { 7 } { Июль } { 8 } { Август } { 9 } { Сентябрь } { 10 } { Октябрь } { 11 } { Ноябрь } { 12 } { Декабрь } } { #1 } } \cs_new:Nn \projlib_datetime_display_day_russian:n { #1 } \cs_new:Nn \projlib_datetime_display_day_uppercase_russian:n { #1 } \cs_new:Nn \projlib_datetime_display_week_russian:n { \int_case:nnF { #1 } { { 1 } { понедельник } { 2 } { вторник } { 3 } { среда } { 4 } { четверг } { 5 } { пятница } { 6 } { суббота } { 7 } { воскресенье } } { ??? } } \cs_new:Nn \projlib_datetime_display_week_uppercase_russian:n { \int_case:nnF { #1 } { { 1 } { Понедельник } { 2 } { Вторник } { 3 } { Среда } { 4 } { Четверг } { 5 } { Пятница } { 6 } { Суббота } { 7 } { Воскресенье } } { ??? } } \endinput %% %% End of file `projlib-datetime.sty'.