diff options
author | Karl Berry <karl@freefriends.org> | 2022-03-10 21:24:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-03-10 21:24:58 +0000 |
commit | c99fbd6f5717513c4b6b7e37ad3a3d676e08b49c (patch) | |
tree | 24f4c5f8bb91c9a93b4937909ee8cad3199aec44 /Master/texmf-dist/tex/latex/projlib/projlib-language.sty | |
parent | 356136ce175be2673f9fec40d48937ae6d494605 (diff) |
projlib (10mar22)
git-svn-id: svn://tug.org/texlive/trunk@62600 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/projlib/projlib-language.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/projlib/projlib-language.sty | 512 |
1 files changed, 512 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-language.sty b/Master/texmf-dist/tex/latex/projlib/projlib-language.sty new file mode 100644 index 00000000000..4a67c6a018e --- /dev/null +++ b/Master/texmf-dist/tex/latex/projlib/projlib-language.sty @@ -0,0 +1,512 @@ +\NeedsTeXFormat{LaTeX2e}[2020-10-01] +\RequirePackage{l3keys2e} +\ProvidesExplPackage + {projlib-language} + {2022/03/09} {} + {Multi-language configuration} + +\clist_const:Nn \c__projlib_language_supported_clist + { + english , + french , + ngerman , + italian , + portuguese , + brazilian , + spanish , + schinese , + tchinese , + japanese , + russian , + } + +\clist_new:N \g__projlib_language_babel_option_clist + +\str_new:N \g__projlib_language_main_str + +\bool_new:N \g__projlib_language_enabled_all_bool +\bool_gset_true:N \g__projlib_language_enabled_all_bool + +\clist_map_inline:Nn \c__projlib_language_supported_clist + { + \bool_new:c { g__projlib_language_enabled_ #1 _bool } + \bool_gset_false:c { g__projlib_language_enabled_ #1 _bool } + } + +\cs_new:Nn \projlib_language_set_option_no_babel:n + { + \bool_gset_false:N \g__projlib_language_enabled_all_bool + \bool_gset_true:c { g__projlib_language_enabled_ #1 _bool } + \str_if_empty:NT \g__projlib_language_main_str + { + \str_gset:Nn \g__projlib_language_main_str { #1 } + } + } +\cs_new:Nn \projlib_language_set_option:n + { + \projlib_language_set_option_no_babel:n { #1 } + \clist_gput_left:Nn \g__projlib_language_babel_option_clist { #1 } + } + +\keys_define:nn { projlib-language } + { + , EN .meta:n = { english } + , english .code:n = { \projlib_language_set_option:n { english } } + , English .meta:n = { english } + , FR .meta:n = { french } + , french .code:n = { \projlib_language_set_option:n { french } } + , French .meta:n = { french } + , DE .meta:n = { ngerman } + , german .meta:n = { ngerman } + , ngerman .code:n = { \projlib_language_set_option:n { ngerman } } + , German .meta:n = { ngerman } + , IT .meta:n = { italian } + , italian .code:n = { \projlib_language_set_option:n { italian } } + , Italian .meta:n = { italian } + , PT .meta:n = { portuguese } + , portuguese .code:n = { \projlib_language_set_option:n { portuguese } } + , Portuguese .meta:n = { portuguese } + , BR .meta:n = { brazilian } + , brazilian .code:n = { \projlib_language_set_option:n { brazilian } } + , Brazilian .meta:n = { brazilian } + , ES .meta:n = { spanish } + , spanish .code:n = { \clist_gput_left:Nn \g__projlib_language_babel_option_clist { es-notilde, es-noquoting } + \projlib_language_set_option:n { spanish } } + , Spanish .meta:n = { spanish } + , CN .meta:n = { schinese } + , chinese .meta:n = { schinese } + , schinese .code:n = { \projlib_language_set_option_no_babel:n { schinese } } + , simplified-chinese .meta:n = { schinese } + , simplified~chinese .meta:n = { schinese } + , simplified chinese .meta:n = { schinese } + , Chinese .meta:n = { schinese } + , SChinese .meta:n = { schinese } + , Simplified-Chinese .meta:n = { schinese } + , Simplified~Chinese .meta:n = { schinese } + , Simplified Chinese .meta:n = { schinese } + , TC .meta:n = { tchinese } + , tchinese .code:n = { \projlib_language_set_option_no_babel:n { tchinese } } + , traditional-chinese .meta:n = { tchinese } + , traditional~chinese .meta:n = { tchinese } + , traditional chinese .meta:n = { tchinese } + , TChinese .meta:n = { tchinese } + , Traditional-Chinese .meta:n = { tchinese } + , Traditional~Chinese .meta:n = { tchinese } + , Traditional Chinese .meta:n = { tchinese } + , JP .meta:n = { japanese } + , japanese .code:n = { \projlib_language_set_option:n { japanese } } + , Japanese .meta:n = { japanese } + , RU .meta:n = { russian } + , russian .code:n = { \projlib_language_set_option:n { russian } } + , Russian .meta:n = { russian } + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-language } + +\cs_new_protected:Nn \projlib_language_clear_global_option:n + { + \clist_remove_all:cn { @classoptionslist } { #1 } + } + +\projlib_language_clear_global_option:n { chinese } +\projlib_language_clear_global_option:n { Chinese } + +\clist_gput_right:Nn \g__projlib_language_babel_option_clist { shorthands = off } + +\str_if_empty:NT \g__projlib_language_main_str + { + \str_gset:Nn \g__projlib_language_main_str { english } + } + +\bool_if:NT \g__projlib_language_enabled_all_bool + { + \clist_map_inline:Nn \c__projlib_language_supported_clist + { + \bool_gset_true:c { g__projlib_language_enabled_ #1 _bool } + } + } + + +\cs_new:Nn \projlib_language_str_to_languagename:n + { + \str_case_e:nnF { \str_foldcase:n { #1 } } + { + { all } { common } + { common } { common } + { cn } { schinese } + { chinese } { schinese } + { schinese } { schinese } + { simplifiedchinese } { schinese } + { simplified-chinese } { schinese } + { tc } { tchinese } + { tchinese } { tchinese } + { traditionalchinese } { tchinese } + { traditional-chinese} { tchinese } + { jp } { japanese } + { japanese } { japanese } + { en } { english } + { english } { english } + { fr } { french } + { french } { french } + { de } { ngerman } + { german } { ngerman } + { ngerman } { ngerman } + { it } { italian } + { italian } { italian } + { pt } { portuguese } + { portuguese } { portuguese } + { br } { brazilian } + { brazilian } { brazilian } + { es } { spanish } + { spanish } { spanish } + { ru } { russian } + { russian } { russian } + } + { #1 } + } + +\cs_new:Nn \projlib_language_str_to_languagetype:n + { + \str_case_e:nn { \str_foldcase:n { #1 } } + { + { cn } { cjk } + { chinese } { cjk } + { schinese } { cjk } + { simplifiedchinese } { cjk } + { simplified-chinese } { cjk } + { tc } { cjk } + { tchinese } { cjk } + { traditionalchinese } { cjk } + { traditional-chinese} { cjk } + { jp } { cjk } + { japanese } { cjk } + { en } { latin } + { english } { latin } + { fr } { latin } + { french } { latin } + { de } { latin } + { german } { latin } + { ngerman } { latin } + { it } { latin } + { italian } { latin } + { pt } { latin } + { portuguese } { latin } + { br } { latin } + { brazilian } { latin } + { es } { latin } + { spanish } { latin } + { ru } { latin } + { russian } { latin } + } + } + +\sys_if_engine_pdftex:T + { + \RequirePackage [T1] { fontenc } + } + +\bool_if:NTF \g__projlib_language_enabled_all_bool + { + \sys_if_engine_pdftex:F + { + \PassOptionsToPackage { japanese, russian } { babel } + } + \PassOptionsToPackage { italian, portuguese, brazilian, spanish, es-notilde, es-noquoting, ngerman, french, english, shorthands = off } { babel } + } + { + \PassOptionsToPackage { \g__projlib_language_babel_option_clist } { babel } + } + +\PassOptionsToPackage { italian, brazilian, spanish, ngerman, french, english } { cleveref } +\RequirePackage { babel } + + +\bool_if:NT \g__projlib_language_enabled_french_bool + { + \frenchsetup { PartNameFull = false } + } + +\bool_if:NT \g__projlib_language_enabled_portuguese_bool + { + \NewCommandCopy \__projlib_language_babel_ord: \ord + \cs_undefine:N \ord + \hook_gput_code:nnn { begindocument } { projlib-language } + { + \cs_if_exist:NT \ord + { + \NewCommandCopy \__projlib_language_user_ord: \ord + \cs_set_protected:Npn \ord + { + \mode_if_math:TF + { \__projlib_language_user_ord: } + { \__projlib_language_babel_ord: } + } + } + } + } + +\babelprovide { schinese } +\babelprovide { tchinese } + + +\NewCommandCopy \projlib_language_backup_today:n \today + +\tl_new:N \g_projlib_language_settings_common_tl +\clist_map_inline:Nn \c__projlib_language_supported_clist + { + \tl_new:c { g_projlib_language_settings_ #1 _tl } + } + +\tl_gput_right:Nn \g_projlib_language_settings_common_tl + { + \cs_if_exist:NT \ProjLibToday + { + \RenewCommandCopy \today \ProjLibToday + } + } + +\tl_gput_right:Nn \g_projlib_language_settings_schinese_tl + { + \g_projlib_language_settings_common_tl + \tl_gset:Nn \languagename { schinese } + \tl_gset:cn { abstractname } { 摘要 } + \tl_gset:cn { proofname } { 证明 } + \tl_gset:cn { contentsname } { 目录 } + \tl_gset:cn { listfigurename } { 插图 } + \tl_gset:cn { listtablename } { 表格 } + \tl_gset:cn { figurename } { 图 } + \tl_gset:cn { tablename } { 表 } + \tl_gset:cn { indexname } { 索引 } + \tl_gset:cn { appendixname } { 附录 } + \tl_gset:cn { refname } { 参考文献 } + \tl_gset:cn { bibname } { 参考文献 } + } + +\tl_gput_right:Nn \g_projlib_language_settings_tchinese_tl + { + \g_projlib_language_settings_common_tl + \tl_gset:Nn \languagename { tchinese } + \tl_gset:cn { abstractname } { 摘要 } + \tl_gset:cn { proofname } { 證明 } + \tl_gset:cn { contentsname } { 目錄 } + \tl_gset:cn { listfigurename } { 插圖 } + \tl_gset:cn { listtablename } { 表格 } + \tl_gset:cn { figurename } { 圖 } + \tl_gset:cn { tablename } { 表 } + \tl_gset:cn { indexname } { 索引 } + \tl_gset:cn { appendixname } { 附錄 } + \tl_gset:cn { refname } { 參考文獻 } + \tl_gset:cn { bibname } { 參考文獻 } + } + +\tl_gput_right:Nn \g_projlib_language_settings_japanese_tl + { + \selectlanguage { japanese } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_english_tl + { + \selectlanguage { english } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_french_tl + { + \selectlanguage { french } + \g_projlib_language_settings_common_tl + \tl_gset:cn { frenchpartname } { Partie } + } + +\tl_gput_right:Nn \g_projlib_language_settings_ngerman_tl + { + \selectlanguage { ngerman } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_italian_tl + { + \selectlanguage { italian } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_portuguese_tl + { + \selectlanguage { portuguese } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_brazilian_tl + { + \selectlanguage { brazilian } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_spanish_tl + { + \selectlanguage { spanish } + \g_projlib_language_settings_common_tl + } + +\tl_gput_right:Nn \g_projlib_language_settings_russian_tl + { + \selectlanguage { russian } + \g_projlib_language_settings_common_tl + } + +\NewDocumentCommand \AddLanguageSetting { O{} m } + { + \IfNoValueTF { #1 } + { + \tl_gput_right:Nn \g_projlib_language_settings_common_tl { #2 } + } + { + \tl_gput_right:cn { g_projlib_language_settings_ \projlib_language_str_to_languagename:n { #1 } _tl } { #2 } + } + } + + +\RequirePackage { setspace } + +\tl_new:N \g_projlib_language_linespacing_latin_tl +\tl_new:N \g_projlib_language_linespacing_cjk_tl + +\tl_gset:Nn \g_projlib_language_linespacing_latin_tl + { + \setstretch { 1.00 } + } +\tl_gset:Nn \g_projlib_language_linespacing_cjk_tl + { + \onehalfspacing + } + +\cs_new:Nn \projlib_language_set_linespacing_latin:n + { + \tl_gset:Nn \g_projlib_language_linespacing_latin_tl { #1 } + } +\cs_new:Nn \projlib_language_set_linespacing_cjk:n + { + \tl_gset:Nn \g_projlib_language_linespacing_cjk_tl { #1 } + } + +\tl_new:N \g_projlib_language_parindent_latin_tl +\tl_new:N \g_projlib_language_parindent_cjk_tl + +\@ifclassloaded{beamer} + { + \tl_gset:Nn \g_projlib_language_parindent_latin_tl + { + \dim_set:Nn \parindent { 0em } + } + \tl_gset:Nn \g_projlib_language_parindent_cjk_tl + { + \dim_set:Nn \parindent { 0em } + } + } + { + \tl_gset:Nn \g_projlib_language_parindent_latin_tl + { + \dim_set:Nn \parindent { 1.5em } + } + \tl_gset:Nn \g_projlib_language_parindent_cjk_tl + { + \dim_set:Nn \parindent { 2em } + } + } + +\hook_gput_code:nnn { begindocument } { projlib-language } + { + \@ifpackageloaded{parskip} + { + \tl_gset:Nn \g_projlib_language_parindent_latin_tl + { + \dim_set:Nn \parindent { 0em } + } + \tl_gset:Nn \g_projlib_language_parindent_cjk_tl + { + \dim_set:Nn \parindent { 0em } + } + } {} + } + +\cs_new:Nn \projlib_language_set_parindent_latin:n + { + \tl_gset:Nn \g_projlib_language_parindent_latin_tl { #1 } + } +\cs_new:Nn \projlib_language_set_parindent_cjk:n + { + \tl_gset:Nn \g_projlib_language_parindent_cjk_tl { #1 } + } + +\NewDocumentCommand \ProjLibLanguageSet { m m m } + % #1 = the thing to set + % #2 = language or type + % #3 = the setting + { + \use:c { projlib_language_set_ #1 _ #2 :n } { #3 } + } + + +\cs_new:Nn \projlib_language_use_language_pure:n + { + \tl_use:c { g_projlib_language_settings_ \projlib_language_str_to_languagename:n { #1 } _tl } + } +\cs_generate_variant:Nn \projlib_language_use_language_pure:n { e } + +\cs_new:Nn \projlib_language_use_language:n + { + \projlib_language_use_language_pure:n { #1 } + \tl_use:c { g_projlib_language_linespacing_ \projlib_language_str_to_languagetype:n { #1 } _tl } + \tl_use:c { g_projlib_language_parindent_ \projlib_language_str_to_languagetype:n { #1 } _tl } + } +\cs_generate_variant:Nn \projlib_language_use_language:n { e } + +\NewDocumentCommand \UseLanguage { m } + { + \hook_gput_code:nnn { begindocument } { projlib-language } + { + \projlib_language_use_language:e { #1 } + } + } +\NewDocumentCommand \UseOtherLanguage { m m } + { + \group_begin: + \projlib_language_use_language_pure:e { #1 } + #2 + \group_end: + } + +\UseLanguage { \g__projlib_language_main_str } + + +\cs_new:Nn \projlib_langauge_define_multilingual_text:Nn + { % #1 = command name (with backslash) + % #2 = key-value name configuration + \keyval_parse:nnn + {} + { \__projlib_langauge_define_multilingual_text_do:nnn { \cs_to_str:N #1 } } + { #2 } + \tl_gset:Nn #1 + { + \tl_use:c { \cs_to_str:N #1 _projlib_language_text_ \languagename } + } + } +\cs_generate_variant:Nn \projlib_langauge_define_multilingual_text:Nn { cn } + +\cs_new:Nn \__projlib_langauge_define_multilingual_text_do:nnn + { % #1 = command name + % #2 = language name + % #3 = the text + \exp_args:Ne \tl_gset:cn { #1 _projlib_language_text_ \projlib_language_str_to_languagename:n { #2 } } { #3 } + } + +\NewDocumentCommand \DefineMultilingualText { m m } + % #1 = command name + % #2 = key-value name configuration + { + \projlib_langauge_define_multilingual_text:Nn #1 { #2 } + } + +\endinput +%% +%% End of file `projlib-language.sty'. |