OSDN Git Service

5b69f7eb8f807fcf52d8ce1772b76899e860d3a8
[luatex-ja/luatexja.git] / src / 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}
9 \RequirePackage{luatexja}
10
11 \ExplSyntaxOn
12
13 \cs_new:Npn \ltj_fontspec_warning:n   { \msg_warning:nn   {ltj-fontspec} }
14
15 \msg_new:nnn {ltj-fontspec} {addjfontfeatures-ignored}
16 {
17   \string\addjfontfeature (s)~ ignored;\\
18   it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
19 }
20
21 \prg_new_conditional:Nnn \ltj_fontspec_if_liiikeys: {TF,F} {
22   \@ifpackagelater {fontspec} {2011/09/13}
23   { \prg_return_true: }  % fontspec >= 2.2 (l3keys)
24   { \prg_return_false: } % fontspec <  2.2 (xkeyval)
25 }
26
27 \cs_new:Nn \ltj_fontspec_define_option:nn {
28   \ltj_fontspec_if_liiikeys:TF {
29     \keys_define:nn {fontspec} { #1 .code:n = {#2}}
30   } {
31     \define@key[zf]{options}{#1}{#2}
32   }
33 }
34
35 \cs_new:Nn \ltj_fontspec_define_preparse_external:nn {
36   \ltj_fontspec_if_liiikeys:TF {
37     \keys_define:nn {fontspec-preparse-external} { #1 .code:n = {#2}}
38   } {
39     \define@key[zf]{preparse-external}{#1}{#2}
40   }
41 }
42
43 \cs_new:Nn \ltj_fontspec_select:nn {
44   \group_begin:
45   \ltj_fontspec_define_option:nn {JFM} {
46     \fontspec_update_fontid:n  {+jfm=##1}
47     \fontspec_update_featstr:n {jfm=##1}      
48   }
49   \ltj_fontspec_define_option:nn {JFM-var} {
50     \fontspec_update_fontid:n  {+jfmvar=##1}
51     \fontspec_update_featstr:n {jfmvar=##1}      
52   }
53   \ltj_fontspec_define_preparse_external:nn {NoEmbed} {
54     \cs_set:Nn \fontspec_namewrap:n {psft:####1}
55   }
56   \ltj_fontspec_if_liiikeys:TF {
57     \tl_set:Nn \g_fontspec_encoding_tl {JY3}
58   } {
59     \tl_set:Nn \zf@enc {JY3}
60   }
61   \tl_set:Nx \g_fontspec_default_fontopts_tl 
62              {JFM=ujis,Scale=0.960444,\g_ltj_fontspec_default_fontopts_tl}
63   \cs_set_eq:NN \DeclareFontFamily \DeclareKanjiFamily
64   \fontspec_select:nn{#1}{#2}
65   \tl_set:Nn \l_fontspec_lang_tl   {dflt}
66   \tl_set:Nn \l_fontspec_script_tl {latn}
67   \fontspec_check_ot_feat:nT {+kern} {
68     \tl_set:Nx \g_fontspec_default_fontopts_tl 
69                {JFM=ujis,Scale=0.960444,Kerning=Off,\g_ltj_fontspec_default_fontopts_tl}
70     \fontspec_select:nn{#1}{#2}
71   }
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