OSDN Git Service

Merge branch 'master' into kitagawa_test; also fix \ltj@@IsFontJapaneseX.
[luatex-ja/luatexja.git] / src / addons / luatexja-fontspec.sty
1 %
2 % luatexja-fontspec.sty
3 %
4
5 \NeedsTeXFormat{LaTeX2e}
6 \ProvidesPackage{luatexja-fontspec}[2011/09/23 v0.2]
7
8 \RequirePackage{fontspec,luatexja}
9
10 \ExplSyntaxOn
11
12 \cs_new:Npn \ltj_fontspec_warning:n   { \msg_warning:nn   {ltj-fontspec} }
13
14 \msg_new:nnn {ltj-fontspec} {addjfontfeatures-ignored}
15 {
16   \string\addjfontfeature (s)~ ignored;\\
17   it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
18 }
19
20 \cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx}
21
22 \prg_new_conditional:Nnx \ltj_fontspec_if_liiikeys: {TF,F} {
23   \@ifpackagelater {fontspec} {2011/09/13}
24   { \exp_not:N \prg_return_true: }  % fontspec >= 2.2 (l3keys)
25   { \exp_not:N \prg_return_false: } % fontspec <  2.2 (xkeyval)
26 }
27
28 \cs_new:Nn \ltj_fontspec_define_option:nn {
29   \ltj_fontspec_if_liiikeys:TF {
30     \keys_define:nn {fontspec} { #1 .code:n = {#2}}
31   } {
32     \define@key[zf]{options}{#1}{#2}
33   }
34 }
35
36 \cs_new:Nn \ltj_fontspec_define_preparse_external:nn {
37   \ltj_fontspec_if_liiikeys:TF {
38     \keys_define:nn {fontspec-preparse-external} { #1 .code:n = {#2}}
39   } {
40     \define@key[zf]{preparse-external}{#1}{#2}
41   }
42 }
43
44 \cs_new:Nn \ltj_fontspec_select:nn {
45   \group_begin:
46   \ltj_fontspec_define_option:nn {JFM} {
47     \fontspec_update_fontid:n  {+jfm=##1}
48     \fontspec_update_featstr:n {jfm=##1}      
49   }
50   \ltj_fontspec_define_option:nn {JFM-var} {
51     \fontspec_update_fontid:n  {+jfmvar=##1}
52     \fontspec_update_featstr:n {jfmvar=##1}      
53   }
54   \ltj_fontspec_define_preparse_external:nn {NoEmbed} {
55     \cs_set:Nn \fontspec_namewrap:n {psft:####1}
56   }
57   %% Omit the warning message
58   %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
59   \ltj_fontspec_define_option:nn {Kerning/Off} {
60     \fontspec_update_fontid:n  {-kern}
61     \fontspec_update_featstr:n {-kern}      
62   }  
63   \ltj_fontspec_if_liiikeys:TF {
64     \tl_set:Nn \g_fontspec_encoding_tl {JY3}
65   } {
66     \tl_set:Nn \zf@enc {JY3}
67   }
68   \tl_set:Nx \g_fontspec_default_fontopts_tl 
69              {JFM=ujis,Scale=0.962216,Kerning=Off,\g_ltj_fontspec_default_fontopts_tl}
70   \cs_set_eq:NN \DeclareFontFamily \DeclareKanjiFamily
71   \fontspec_select:nn{#1}{#2}
72   \group_end:
73   \ltj_fontspec_if_liiikeys:F {
74     \tl_set_eq:NN \l_fontspec_family_tl \zf@family
75   }
76 }
77
78 \cs_new:Nn \ltj_fontspec_set_family:Nnn {
79   \ltj_fontspec_select:nn{#2}{#3}
80   \tl_set_eq:NN #1 \l_fontspec_family_tl
81 }
82
83 \DeclareDocumentCommand \jfontspec { O{} m } {
84   \ltj_fontspec_set_family:Nnn \k@family {#1}{#2}
85   \selectfont
86   \ignorespaces
87 }
88
89 \DeclareDocumentCommand \setmainjfont { O{} m } {
90   \ltj_fontspec_set_family:Nnn \mcdefault {#1}{#2}
91   \normalfont
92 }
93
94 \DeclareDocumentCommand \setsansjfont { O{} m } {
95   \ltj_fontspec_set_family:Nnn \gtdefault {#1}{#2}
96   \normalfont
97 }
98
99 \DeclareDocumentCommand \newjfontfamily { m O{} m } {
100   \ltj_fontspec_select:nn{#2}{#3}
101   \use:x {
102     \exp_not:N \DeclareRobustCommand \exp_not:N #1 {
103       \exp_not:N \kanjifamily {\l_fontspec_family_tl} \exp_not:N \selectfont
104     }
105   }
106 }
107
108 \DeclareDocumentCommand \newjfontface { m O{} m } {
109   \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3}
110 }
111
112 \DeclareDocumentCommand \defaultjfontfeatures {m} {
113   \tl_set:Nn \g_ltj_fontspec_default_fontopts_tl {#1,}
114 }
115
116 \tl_clear:N \g_ltj_fontspec_default_fontopts_tl
117
118 \DeclareDocumentCommand \addjfontfeatures {m} {
119   \ifcsname zf@family@fontdef\k@family\endcsname
120     \group_begin:
121       \tl_clear:N \g_ltj_fontspec_default_fontopts_tl
122       \use:x {
123         \exp_not:N\ltj_fontspec_select:nn
124           {\csname zf@family@options\k@family\endcsname,#1}
125           {\csname zf@family@fontname\k@family\endcsname}
126       }
127     \group_end:
128     \fontfamily\l_fontspec_family_tl\selectfont
129   \else
130     \ltj_fontspec_warning:n {addjfontfeatures-ignored}
131   \fi
132   \ignorespaces
133 }
134
135 \cs_set_eq:NN \addjfontfeature \addjfontfeatures
136
137 \endinput