OSDN Git Service

b37b08f6c0b1fbb93eb46ee494479b56481d34fc
[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 {CID} {
47     \fontspec_update_fontid:n  {+cid=##1}
48     \fontspec_update_featstr:n {cid=##1}
49   }
50   \ltj_fontspec_define_option:nn {JFM} {
51     \fontspec_update_fontid:n  {+jfm=##1}
52     \fontspec_update_featstr:n {jfm=##1}
53   }
54   \ltj_fontspec_define_option:nn {JFM-var} {
55     \fontspec_update_fontid:n  {+jfmvar=##1}
56     \fontspec_update_featstr:n {jfmvar=##1}
57   }
58   \ltj_fontspec_define_preparse_external:nn {NoEmbed} {
59     \cs_set:Nn \fontspec_namewrap:n {psft:####1}
60   }
61   %% Omit the warning message
62   %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
63   \ltj_fontspec_define_option:nn {Kerning/Off} {
64     \fontspec_update_fontid:n  {-kern}
65     \fontspec_update_featstr:n {-kern}
66   }
67   \ltj_fontspec_if_liiikeys:TF {
68     \tl_set:Nn \g_fontspec_encoding_tl {JY3}
69   } {
70     \tl_set:Nn \zf@enc {JY3}
71   }
72   \tl_set:Nx \g_fontspec_default_fontopts_tl
73              {JFM=ujis,Scale=0.962216,Kerning=Off,\g_ltj_fontspec_default_fontopts_tl}
74   \cs_set_eq:NN \DeclareFontFamily \DeclareKanjiFamily
75   \fontspec_select:nn{#1}{#2}
76   \group_end:
77   \ltj_fontspec_if_liiikeys:F {
78     \tl_set_eq:NN \l_fontspec_family_tl \zf@family
79   }
80 }
81
82 \cs_new:Nn \ltj_fontspec_set_family:Nnn {
83   \ltj_fontspec_select:nn{#2}{#3}
84   \tl_set_eq:NN #1 \l_fontspec_family_tl
85 }
86
87 \DeclareDocumentCommand \jfontspec { O{} m } {
88   \ltj_fontspec_set_family:Nnn \k@family {#1}{#2}
89   \selectfont
90   \ignorespaces
91 }
92
93 \DeclareDocumentCommand \setmainjfont { O{} m } {
94   \ltj_fontspec_set_family:Nnn \mcdefault {#1}{#2}
95   \normalfont
96 }
97
98 \DeclareDocumentCommand \setsansjfont { O{} m } {
99   \ltj_fontspec_set_family:Nnn \gtdefault {#1}{#2}
100   \normalfont
101 }
102
103 \DeclareDocumentCommand \newjfontfamily { m O{} m } {
104   \ltj_fontspec_select:nn{#2}{#3}
105   \use:x {
106     \exp_not:N \DeclareRobustCommand \exp_not:N #1 {
107       \exp_not:N \kanjifamily {\l_fontspec_family_tl} \exp_not:N \selectfont
108     }
109   }
110 }
111
112 \DeclareDocumentCommand \newjfontface { m O{} m } {
113   \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2 ] {#3}
114 }
115
116 \DeclareDocumentCommand \defaultjfontfeatures {m} {
117   \tl_set:Nn \g_ltj_fontspec_default_fontopts_tl {#1,}
118 }
119
120 \tl_clear:N \g_ltj_fontspec_default_fontopts_tl
121
122 \DeclareDocumentCommand \addjfontfeatures {m} {
123   \ifcsname zf@family@fontdef\k@family\endcsname
124     \group_begin:
125       \tl_clear:N \g_ltj_fontspec_default_fontopts_tl
126       \use:x {
127         \exp_not:N\ltj_fontspec_select:nn
128           {\csname zf@family@options\k@family\endcsname,#1}
129           {\csname zf@family@fontname\k@family\endcsname}
130       }
131     \group_end:
132     \fontfamily\l_fontspec_family_tl\selectfont
133   \else
134     \ltj_fontspec_warning:n {addjfontfeatures-ignored}
135   \fi
136   \ignorespaces
137 }
138
139 \cs_set_eq:NN \addjfontfeature \addjfontfeatures
140
141 \endinput