From 7ee4987532f1c1d25e5a2683ae21b7c298d103b5 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sun, 30 Jan 2022 03:00:53 +0000
Subject: CTAN sync 202201300300

---
 macros/latex/contrib/crefthe/crefthe.sty | 170 +++++++++++++++++++++++++++----
 1 file changed, 152 insertions(+), 18 deletions(-)

(limited to 'macros/latex/contrib/crefthe/crefthe.sty')

diff --git a/macros/latex/contrib/crefthe/crefthe.sty b/macros/latex/contrib/crefthe/crefthe.sty
index 366b681f72..ad752f87b5 100644
--- a/macros/latex/contrib/crefthe/crefthe.sty
+++ b/macros/latex/contrib/crefthe/crefthe.sty
@@ -1,5 +1,5 @@
 %%
-%% Copyright (C) 2021 by Jinwen XU
+%% Copyright (C) 2021-2022 by Jinwen XU
 %% -------------------------------
 %%
 %% This file may be distributed and/or modified under the conditions of
@@ -12,13 +12,27 @@
 \NeedsTeXFormat{LaTeX2e}[2020-10-01]
 \ProvidesExplPackage
   {crefthe}
-  {2021/11/05}
+  {2022/01/29}
   {}
   {Cross referencing with proper definite articles}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{cleveref}}
+\ProcessOptions\relax
 \RequirePackage{cleveref}
 
 \tl_gset:Nn \g_crefthe_prepf_tl {}
 \tl_gset:Nn \g_crefthe_prep_tl {}
+\tl_gset:Nn \g_crefthe_sep_tl {}
+\cs_new:Nn \crefthe_case:n {#1}
+\cs_new:Nn \crefthe_nochange:n {#1}
+\cs_new:Nn \crefthe_atbegindocument:n {#1}
+
+\cs_new:Nn \crefthe_set_status_atbegindocument: {
+    \cs_if_eq:NNTF \@onlypreamble \@notprerr {
+        \cs_gset_eq:NN \crefthe_atbegindocument:n \crefthe_nochange:n
+    }{
+        \cs_gset_eq:NN \crefthe_atbegindocument:n \AtBeginDocument
+    }
+}
 
 \NewDocumentCommand{\crefthe}{st-t+O{}m}{
     \IfBooleanTF{ #2 }{
@@ -37,11 +51,70 @@
     \tl_gset:Nn \g_crefthe_prep_tl {}
 }
 
+\NewDocumentCommand{\Crefthe}{st-t+O{}m}{
+    \cs_gset_eq:NN \crefthe_case:n \text_titlecase:n
+    \IfBooleanTF{ #2 }{
+        \tl_gset:Nn \g_crefthe_prepf_tl { #4 }
+    }{
+        \IfBooleanTF{ #3 }{
+            \tl_gset:Nn \g_crefthe_prep_tl { #4 }
+        }{
+            \str_case_e:nn { \crefthe_prep_mode:nn } {
+                { - } { \tl_gset:Nn \g_crefthe_prepf_tl { #4 } }
+                { + } { \tl_gset:Nn \g_crefthe_prep_tl  { #4 } }
+            }
+        }
+    }
+    \IfBooleanTF{ #1 } { \Cref*{#5} } { \Cref{#5} }
+    \tl_gset:Nn \g_crefthe_prep_tl {}
+}
+
+\NewDocumentCommand{\crefthename}{mO{}mO{}m}{
+    \str_if_eq:eeTF {#2} {} {
+        \crefname{#1}{#3}{#5}
+        \cs_set:cn {cref_#1_format:nnn} {##2#3~##1##3}
+        \cs_set:cn {cref_#1_format_first:nnn} {##2#5~##1##3}
+    }{
+        \crefname{#1}{\crefthemark{#2} \g_crefthe_sep_tl #3}{\crefthemark{#4} \g_crefthe_sep_tl #5}
+        \cs_set:cn {cref_#1_format:nnn} {\crefthemark{#2} \g_crefthe_sep_tl ##2#3~##1##3}
+        \cs_set:cn {cref_#1_format_first:nnn} {\crefthemark{#4} \g_crefthe_sep_tl ##2#5~##1##3}
+    }
+    \crefthe_set_status_atbegindocument:
+    \crefthe_atbegindocument:n {
+        \cs_set_eq:cc {cref@#1@format} {cref_#1_format:nnn}
+        \cs_set_eq:cc {cref@#1@format@first} {cref_#1_format_first:nnn}
+    }
+}
+
+\NewDocumentCommand{\Crefthename}{mO{}mO{}m}{
+    \str_if_eq:eeTF {#2} {} {
+        \Crefname{#1}{#3}{#5}
+        \cs_set:cn {Cref_#1_format:nnn} {##2#3~##1##3}
+        \cs_set:cn {Cref_#1_format_first:nnn} {##2#5~##1##3}
+    }{
+        \Crefname{#1}{\crefthemark{#2} \g_crefthe_sep_tl #3}{\crefthemark{#4} \g_crefthe_sep_tl #5}
+        \cs_set:cn {Cref_#1_format:nnn} {\crefthemark{#2} \g_crefthe_sep_tl ##2#3~##1##3}
+        \cs_set:cn {Cref_#1_format_first:nnn} {\crefthemark{#4} \g_crefthe_sep_tl ##2#5~##1##3}
+    }
+    \crefthe_set_status_atbegindocument:
+    \crefthe_atbegindocument:n {
+        \cs_set_eq:cc {Cref@#1@format} {Cref_#1_format:nnn}
+        \cs_set_eq:cc {Cref@#1@format@first} {Cref_#1_format_first:nnn}
+    }
+}
+
 \NewDocumentCommand{\crefthemark}{m}{
-    \crefthe_contraction:nn { \tl_use:N \g_crefthe_prep_tl }{
-        \crefthe_contraction:nn { \tl_use:N \g_crefthe_prepf_tl }{#1}
+    \crefthe_contraction:nn { \crefthe_case:n \g_crefthe_prep_tl }{
+        \crefthe_contraction:nn { \crefthe_case:n \g_crefthe_prepf_tl }{#1}
     }
     \tl_gset:Nn \g_crefthe_prepf_tl {}
+    \tl_gset:Nx \g_crefthe_prep_tl { \text_lowercase:n \g_crefthe_prep_tl }
+    \str_case_e:nnF {\str_tail:n {#1}} {
+        {'} { \tl_gset:Nn \g_crefthe_sep_tl {} }
+    }
+    { \tl_gset:Nn \g_crefthe_sep_tl {~} }
+    \cs_gset_eq:NN \crefthe_case:n \crefthe_nochange:n
+    % \cs_gset_eq:NN \crefthe_case:n \text_lowercase:n
 }
 
 \cs_set:Npn \crefthe_prep_mode:nn {
@@ -60,19 +133,19 @@
         \str_case_e:nn { \languagename }
         {
             {french}{
-                \str_case_e:nnF {#1~#2} {
+                \str_case_e:nnF {#1~\text_lowercase:n{#2}} {
                     {à~le}      {au}
-                    {à~la}      {à~la}
-                    {à~l'}      {à~l'}
                     {à~les}     {aux}
                     {de~le}     {du}
-                    {de~la}     {de~la}
-                    {de~l'}     {de~l'}
                     {de~les}    {des}
-                }{#1~#2}
+                    {À~le}      {Au}
+                    {À~les}     {Aux}
+                    {De~le}     {Du}
+                    {De~les}    {Des}
+                }{#1~\text_lowercase:n{#2}}
             }
             {italian}{
-                \str_case_e:nnF {#1~#2} {
+                \str_case_e:nnF {#1~\text_lowercase:n{#2}} {
                     {a~il}      {al}
                     {a~lo}      {allo}
                     {a~l'}      {all'}
@@ -108,10 +181,45 @@
                     {su~i}      {sui}
                     {su~gli}    {sugli}
                     {su~le}     {sulle}
-                }{#1~#2}
+                    {A~il}      {Al}
+                    {A~lo}      {Allo}
+                    {A~l'}      {All'}
+                    {A~la}      {Alla}
+                    {Di~il}     {Del}
+                    {Di~lo}     {Dello}
+                    {Di~l'}     {Dell'}
+                    {Di~la}     {Della}
+                    {Da~il}     {Dal}
+                    {Da~lo}     {Dallo}
+                    {Da~l'}     {Dall'}
+                    {Da~la}     {Dalla}
+                    {In~il}     {Nel}
+                    {In~lo}     {Nello}
+                    {In~l'}     {Nell'}
+                    {In~la}     {Nella}
+                    {Su~il}     {Sul}
+                    {Su~lo}     {Sullo}
+                    {Su~l'}     {Sull'}
+                    {Su~la}     {Sulla}
+                    {A~i}       {Ai}
+                    {A~gli}     {Agli}
+                    {A~le}      {Alle}
+                    {Di~i}      {Dei}
+                    {Di~gli}    {Degli}
+                    {Di~le}     {Delle}
+                    {Da~i}      {Dai}
+                    {Da~gli}    {Dagli}
+                    {Da~le}     {Dalle}
+                    {In~i}      {Nei}
+                    {In~gli}    {Negli}
+                    {In~le}     {Nelle}
+                    {Su~i}      {Sui}
+                    {Su~gli}    {Sugli}
+                    {Su~le}     {Sulle}
+                }{#1~\text_lowercase:n{#2}}
             }
             {portuguese}{
-                \str_case_e:nnF {#1~#2} {
+                \str_case_e:nnF {#1~\text_lowercase:n{#2}} {
                     {a~o}       {ao}
                     {a~a}       {à}
                     {a~os}      {aos}
@@ -124,10 +232,22 @@
                     {em~a}      {na}
                     {em~os}     {nos}
                     {em~as}     {nas}
-                }{#1~#2}
+                    {A~o}       {Ao}
+                    {A~a}       {À}
+                    {A~os}      {Aos}
+                    {A~as}      {Às}
+                    {De~o}      {Do}
+                    {De~a}      {Da}
+                    {De~os}     {Dos}
+                    {De~as}     {Das}
+                    {Em~o}      {No}
+                    {Em~a}      {Na}
+                    {Em~os}     {Nos}
+                    {Em~as}     {Nas}
+                }{#1~\text_lowercase:n{#2}}
             }
             {brazilian}{
-                \str_case_e:nnF {#1~#2} {
+                \str_case_e:nnF {#1~\text_lowercase:n{#2}} {
                     {a~o}       {ao}
                     {a~a}       {à}
                     {a~os}      {aos}
@@ -140,13 +260,27 @@
                     {em~a}      {na}
                     {em~os}     {nos}
                     {em~as}     {nas}
-                }{#1~#2}
+                    {A~o}       {Ao}
+                    {A~a}       {À}
+                    {A~os}      {Aos}
+                    {A~as}      {Às}
+                    {De~o}      {Do}
+                    {De~a}      {Da}
+                    {De~os}     {Dos}
+                    {De~as}     {Das}
+                    {Em~o}      {No}
+                    {Em~a}      {Na}
+                    {Em~os}     {Nos}
+                    {Em~as}     {Nas}
+                }{#1~\text_lowercase:n{#2}}
             }
             {spanish}{
-                \str_case_e:nnF {#1~#2} {
+                \str_case_e:nnF {#1~\text_lowercase:n{#2}} {
                     {a~el}      {al}
                     {de~el}     {del}
-                }{#1~#2}
+                    {A~el}      {Al}
+                    {De~el}     {Del}
+                }{#1~\text_lowercase:n{#2}}
             }
         }
     }
-- 
cgit v1.2.3

