1
0
texlive-specs-a/fontspec_emph.dif

120 lines
4.3 KiB
Plaintext

Bug boo#1039951 -- nasty \emph-related bugs in texlive-fontspec
---
texmf-dist/tex/latex/fontspec/fontspec-luatex.sty | 35 ++++++++++++++++++++++++++-------
texmf-dist/tex/latex/fontspec/fontspec-xetex.sty | 35 ++++++++++++++++++++++++++-------
2 files changed, 56 insertions(+), 14 deletions(-)
--- texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
+++ texmf-dist/tex/latex/fontspec/fontspec-luatex.sty 2017-05-23 09:50:03.040083385 +0000
@@ -2648,25 +2648,46 @@
}
\int_new:N \l__fontspec_em_int
\int_new:N \l__fontspec_emdef_int
+\prop_new:N \g_@@_em_prop
+\cs_generate_variant:Nn \prop_gput:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput:Nnn {Nxn}
+\cs_generate_variant:Nn \prop_get:NnNT {NxN}
+\cs_generate_variant:Nn \prop_get:NnNTF {NxN}
\cs_new_protected:Npn \emfontdeclare #1
{
- \int_zero:N \l__fontspec_emdef_int
- \clist_map_inline:nn {#1}
- {
- \int_incr:N \l__fontspec_emdef_int
- \cs_set:cpn {__fontspec_em_font_ \int_use:N \l__fontspec_emdef_int _switch:} {##1}
- }
+ \prop_clear:N \g_@@_em_prop
+ \int_zero:N \l__fontspec_emdef_int
+ \group_begin:
+ \normalfont
+ \clist_map_inline:nn {\emreset,#1}
+ {
+ ##1
+ \prop_gput_if_new:NxV \g_@@_em_prop { \f@series/\f@shape } { \l__fontspec_emdef_int }
+ \prop_gput:NxV \g_@@_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 }
+ \int_incr:N \l__fontspec_emdef_int
+ }
+ \group_end:
}
\DeclareRobustCommand \em
{
\@nomath\em
+ \prop_get:NxNT \g_@@_em_prop { \f@series/\f@shape } \l_@@_em_tmp_tl
+ { \int_set:Nn \l__fontspec_em_int { \l_@@_em_tmp_tl } }
\int_incr:N \l__fontspec_em_int
- \use:c {__fontspec_em_font_ \int_use:N \l__fontspec_em_int _switch:}
+ \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l__fontspec_em_int } \l_@@_em_switch_tl
+ { \l_@@_em_switch_tl }
+ {
+ \int_zero:N \l__fontspec_em_int
+ \emreset
+ }
}
\DeclareTextFontCommand{\emph}{\em}
+\cs_set:Npn \emreset { \upshape }
\cs_set:Npn \emshape { \itshape }
\cs_set:Npn \eminnershape { \upshape }
\emfontdeclare{ \emshape, \eminnershape }
+\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} }
\DeclareRobustCommand{\-}
{
\discretionary
--- texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
+++ texmf-dist/tex/latex/fontspec/fontspec-xetex.sty 2017-05-23 09:53:08.044601421 +0000
@@ -2724,25 +2724,46 @@
}
\int_new:N \l__fontspec_em_int
\int_new:N \l__fontspec_emdef_int
+\prop_new:N \g_@@_em_prop
+\cs_generate_variant:Nn \prop_gput:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput:Nnn {Nxn}
+\cs_generate_variant:Nn \prop_get:NnNT {NxN}
+\cs_generate_variant:Nn \prop_get:NnNTF {NxN}
\cs_new_protected:Npn \emfontdeclare #1
{
- \int_zero:N \l__fontspec_emdef_int
- \clist_map_inline:nn {#1}
- {
- \int_incr:N \l__fontspec_emdef_int
- \cs_set:cpn {__fontspec_em_font_ \int_use:N \l__fontspec_emdef_int _switch:} {##1}
- }
+ \prop_clear:N \g_@@_em_prop
+ \int_zero:N \l__fontspec_emdef_int
+ \group_begin:
+ \normalfont
+ \clist_map_inline:nn {\emreset,#1}
+ {
+ ##1
+ \prop_gput_if_new:NxV \g_@@_em_prop { \f@series/\f@shape } { \l__fontspec_emdef_int }
+ \prop_gput:NxV \g_@@_em_prop { switch-\int_use:N \l__fontspec_emdef_int } { ##1 }
+ \int_incr:N \l__fontspec_emdef_int
+ }
+ \group_end:
}
\DeclareRobustCommand \em
{
\@nomath\em
+ \prop_get:NxNT \g_@@_em_prop { \f@series/\f@shape } \l_@@_em_tmp_tl
+ { \int_set:Nn \l__fontspec_em_int { \l_@@_em_tmp_tl } }
\int_incr:N \l__fontspec_em_int
- \use:c {__fontspec_em_font_ \int_use:N \l__fontspec_em_int _switch:}
+ \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l__fontspec_em_int } \l_@@_em_switch_tl
+ { \l_@@_em_switch_tl }
+ {
+ \int_zero:N \l__fontspec_em_int
+ \emreset
+ }
}
\DeclareTextFontCommand{\emph}{\em}
+\cs_set:Npn \emreset { \upshape }
\cs_set:Npn \emshape { \itshape }
\cs_set:Npn \eminnershape { \upshape }
\emfontdeclare{ \emshape, \eminnershape }
+\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l__fontspec_em_int {#1} }
\DeclareRobustCommand{\-}
{
\discretionary