From fb7a86c739d47ad1fe1a6e483b01b0240a83c854 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 23 Jan 2020 21:54:34 +0000 Subject: fontspec (23jan20) git-svn-id: svn://tug.org/texlive/trunk@53512 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/fontspec/fontspec-luatex.sty | 63 ++++++++++++--------- .../tex/latex/fontspec/fontspec-xetex.sty | 66 ++++++++++++---------- Master/texmf-dist/tex/latex/fontspec/fontspec.lua | 4 +- Master/texmf-dist/tex/latex/fontspec/fontspec.sty | 2 +- 4 files changed, 75 insertions(+), 60 deletions(-) (limited to 'Master/texmf-dist/tex/latex/fontspec') diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty index 446b923d080..4d671b2946f 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty @@ -25,7 +25,6 @@ %% fontspec-code-math.dtx (with options: `fontspec,LU') %% fontspec-code-closing.dtx (with options: `fontspec,LU') %% fontspec-code-xfss.dtx (with options: `fontspec,LU') -%% fontspec-code-patches.dtx (with options: `fontspec,LU') %% ------------------------------------------------ %% The FONTSPEC package %% ------------------------------------------------ @@ -41,7 +40,7 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec-luatex}% - {2020/01/09}{2.7e}{Font selection for XeLaTeX and LuaLaTeX} + {2020/01/24}{2.7f}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC %%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC @@ -143,6 +142,7 @@ \tl_new:N \l__fontspec_fontname_tl \tl_new:N \l__fontspec_options_tl \tl_new:N \l__fontspec_saved_fontname_tl +\tl_new:N \l__fontspec_prev_unicode_name_tl \tl_new:N \g__fontspec_nfss_enc_tl \tl_new:N \g__fontspec_nfss_family_tl \tl_new:N \l__fontspec_nfss_sc_tl @@ -735,12 +735,20 @@ \fontencoding { \g__fontspec_nfss_enc_tl } \selectfont } -\tl_replace_all:cnn { rmfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily } -\tl_replace_all:cnn { sffamily~ } { \fontfamily } - { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily } -\tl_replace_all:cnn { ttfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily } +\cs_if_exist:NTF \@rmfamilyhook + { + \tl_put_right:Nn \@rmfamilyhook {\fontencoding \l__fontspec_rmfamily_encoding_tl} + \tl_put_right:Nn \@sffamilyhook {\fontencoding \l__fontspec_sffamily_encoding_tl} + \tl_put_right:Nn \@ttfamilyhook {\fontencoding \l__fontspec_ttfamily_encoding_tl} + } + { + \tl_replace_all:cnn { rmfamily~ } { \fontfamily } + { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily } + \tl_replace_all:cnn { sffamily~ } { \fontfamily } + { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily } + \tl_replace_all:cnn { ttfamily~ } { \fontfamily } + { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily } + } \tl_set_eq:NN \l__fontspec_rmfamily_encoding_tl \g_fontspec_encoding_tl \tl_set_eq:NN \l__fontspec_sffamily_encoding_tl \g_fontspec_encoding_tl \tl_set_eq:NN \l__fontspec_ttfamily_encoding_tl \g_fontspec_encoding_tl @@ -1275,7 +1283,7 @@ } \cs_new:Nn \__fontspec_init_ttc:n { - \str_if_eq:eeT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + \str_if_eq:eeT { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} @@ -2146,7 +2154,7 @@ } \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} { - \str_if_eq:eeF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + \str_if_eq:eeF { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_warning:n {font-index-needs-ttc} } \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)} } @@ -2220,34 +2228,34 @@ } \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_up_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bfit_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_sl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bfsl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} { \bool_if:NF \l__fontspec_firsttime_bool { - \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_sc_clist {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} @@ -2613,13 +2621,13 @@ +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand } -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {} \__fontspec_define_opentype_feature_group:n {Numbers} \__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} { @@ -2728,12 +2736,14 @@ \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Titling} {titl} {titl} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} % backwards compat \__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Uppercase} {case} {case} {} \__fontspec_define_opentype_feature_group:n {CJKShape} \__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} { @@ -3902,6 +3912,3 @@ \cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} } \strongfontdeclare{ \bfseries } -%%^^A%% fontspec-code-patches.dtx -- part of FONTSPEC - - diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty index 25ce0813879..c9ef53a09ac 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty @@ -25,7 +25,6 @@ %% fontspec-code-math.dtx (with options: `fontspec,XE') %% fontspec-code-closing.dtx (with options: `fontspec,XE') %% fontspec-code-xfss.dtx (with options: `fontspec,XE') -%% fontspec-code-patches.dtx (with options: `fontspec,XE') %% ------------------------------------------------ %% The FONTSPEC package %% ------------------------------------------------ @@ -41,7 +40,7 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec-xetex}% - {2020/01/09}{2.7e}{Font selection for XeLaTeX and LuaLaTeX} + {2020/01/24}{2.7f}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC %%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC @@ -143,6 +142,7 @@ \tl_new:N \l__fontspec_fontname_tl \tl_new:N \l__fontspec_options_tl \tl_new:N \l__fontspec_saved_fontname_tl +\tl_new:N \l__fontspec_prev_unicode_name_tl \tl_new:N \g__fontspec_nfss_enc_tl \tl_new:N \g__fontspec_nfss_family_tl \tl_new:N \l__fontspec_nfss_sc_tl @@ -728,12 +728,20 @@ \fontencoding { \g__fontspec_nfss_enc_tl } \selectfont } -\tl_replace_all:cnn { rmfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily } -\tl_replace_all:cnn { sffamily~ } { \fontfamily } - { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily } -\tl_replace_all:cnn { ttfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily } +\cs_if_exist:NTF \@rmfamilyhook + { + \tl_put_right:Nn \@rmfamilyhook {\fontencoding \l__fontspec_rmfamily_encoding_tl} + \tl_put_right:Nn \@sffamilyhook {\fontencoding \l__fontspec_sffamily_encoding_tl} + \tl_put_right:Nn \@ttfamilyhook {\fontencoding \l__fontspec_ttfamily_encoding_tl} + } + { + \tl_replace_all:cnn { rmfamily~ } { \fontfamily } + { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily } + \tl_replace_all:cnn { sffamily~ } { \fontfamily } + { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily } + \tl_replace_all:cnn { ttfamily~ } { \fontfamily } + { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily } + } \tl_set_eq:NN \l__fontspec_rmfamily_encoding_tl \g_fontspec_encoding_tl \tl_set_eq:NN \l__fontspec_sffamily_encoding_tl \g_fontspec_encoding_tl \tl_set_eq:NN \l__fontspec_ttfamily_encoding_tl \g_fontspec_encoding_tl @@ -1267,7 +1275,7 @@ } \cs_new:Nn \__fontspec_init_ttc:n { - \str_if_eq:eeT { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + \str_if_eq:eeT { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} @@ -2261,7 +2269,7 @@ } \__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} { - \str_if_eq:eeF { \str_lower_case:f {\l__fontspec_extension_tl} } {.ttc} + \str_if_eq:eeF { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} { \__fontspec_warning:n {font-index-needs-ttc} } \tl_set:Nn \l__fontspec_ttc_index_tl {:#1} } @@ -2335,34 +2343,34 @@ } \__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_up_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_up_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bf_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_it_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bfit_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bfit_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_sl_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_sl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} { - \clist_set:Nn \l__fontspec_fontfeat_bfsl_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_bfsl_clist {#1} } \__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} { \bool_if:NF \l__fontspec_firsttime_bool { - \clist_set:Nn \l__fontspec_fontfeat_sc_clist {#1} + \clist_put_right:Nn \l__fontspec_fontfeat_sc_clist {#1} } } \__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} @@ -2744,13 +2752,13 @@ +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand } -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {+smcp,+pcap,+c2sc,+c2pc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic,+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {+rand} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {} \__fontspec_define_opentype_feature_group:n {Numbers} \__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} { @@ -2858,12 +2866,14 @@ \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Titling} {titl} {titl} {} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} % backwards compat \__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} \__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} \__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} +\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Uppercase} {case} {case} {} \__fontspec_define_opentype_feature_group:n {CJKShape} \__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} { @@ -3731,7 +3741,8 @@ \__fontspec_define_aat_feature:nnnn {Style} {Ruby} {28} {2} \__fontspec_define_aat_feature:nnnn {Style} {Display} {19} {1} \__fontspec_define_aat_feature:nnnn {Style} {Engraved} {19} {2} -\__fontspec_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} +\__fontspec_define_aat_feature:nnnn {Style} {Titling} {19} {4} +\__fontspec_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} % backwards compat \__fontspec_define_aat_feature:nnnn {Style} {TallCaps} {19} {5} \__fontspec_define_aat_feature_group:n {CJKShape} \__fontspec_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0} @@ -4164,6 +4175,3 @@ \cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} } \strongfontdeclare{ \bfseries } -%%^^A%% fontspec-code-patches.dtx -- part of FONTSPEC - - diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec.lua b/Master/texmf-dist/tex/latex/fontspec/fontspec.lua index ac39921f050..62f646d421b 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec.lua +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec.lua @@ -23,8 +23,8 @@ fontspec = fontspec or {} local fontspec = fontspec fontspec.module = { name = "fontspec", - version = "2.7e", - date = "2020/01/09", + version = "2.7f", + date = "2020/01/24", description = "Font selection for XeLaTeX and LuaLaTeX", author = "Khaled Hosny, Philipp Gesang, Will Robertson", copyright = "Khaled Hosny, Philipp Gesang, Will Robertson", diff --git a/Master/texmf-dist/tex/latex/fontspec/fontspec.sty b/Master/texmf-dist/tex/latex/fontspec/fontspec.sty index 09c3903e6e7..b9a37e66e36 100644 --- a/Master/texmf-dist/tex/latex/fontspec/fontspec.sty +++ b/Master/texmf-dist/tex/latex/fontspec/fontspec.sty @@ -21,7 +21,7 @@ \RequirePackage{xparse} \ProvidesExplPackage{fontspec}% - {2020/01/09}{2.7e}{Font selection for XeLaTeX and LuaLaTeX} + {2020/01/24}{2.7f}{Font selection for XeLaTeX and LuaLaTeX} %%^^A%% fontspec-code-load.dtx -- part of FONTSPEC \sys_if_engine_luatex:T -- cgit v1.2.3