OSDN Git Service

Fix a memory leak in jfmglue.lua and pretreat.lua.
[luatex-ja/luatexja.git] / src / luatexja-fontspec.sty
index 886c7f6..1c34d5d 100644 (file)
@@ -3,9 +3,10 @@
 %
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec}[2011/08/17 v0.1]
+\ProvidesPackage{luatexja-fontspec}[2011/09/23 v0.2]
 
-\RequirePackage{luatexja,fontspec}
+\RequirePackage{fontspec}
+\RequirePackage{luatexja}
 
 \ExplSyntaxOn
 
   it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
 }
 
+\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx}
+
+\prg_new_conditional:Nnx \ltj_fontspec_if_liiikeys: {TF,F} {
+  \@ifpackagelater {fontspec} {2011/09/13}
+  { \exp_not:N \prg_return_true: }  % fontspec >= 2.2 (l3keys)
+  { \exp_not:N \prg_return_false: } % fontspec <  2.2 (xkeyval)
+}
+
+\cs_new:Nn \ltj_fontspec_define_option:nn {
+  \ltj_fontspec_if_liiikeys:TF {
+    \keys_define:nn {fontspec} { #1 .code:n = {#2}}
+  } {
+    \define@key[zf]{options}{#1}{#2}
+  }
+}
+
+\cs_new:Nn \ltj_fontspec_define_preparse_external:nn {
+  \ltj_fontspec_if_liiikeys:TF {
+    \keys_define:nn {fontspec-preparse-external} { #1 .code:n = {#2}}
+  } {
+    \define@key[zf]{preparse-external}{#1}{#2}
+  }
+}
+
 \cs_new:Nn \ltj_fontspec_select:nn {
   \group_begin:
-  \define@key[zf]{options}{JFM}{
+  \ltj_fontspec_define_option:nn {JFM} {
     \fontspec_update_fontid:n  {+jfm=##1}
-    \fontspec_update_featstr:n {jfm=##1}
+    \fontspec_update_featstr:n {jfm=##1}      
   }
-  \define@key[zf]{preparse-external}{NoEmbed}[]{
+  \ltj_fontspec_define_option:nn {JFM-var} {
+    \fontspec_update_fontid:n  {+jfmvar=##1}
+    \fontspec_update_featstr:n {jfmvar=##1}      
+  }
+  \ltj_fontspec_define_preparse_external:nn {NoEmbed} {
     \cs_set:Nn \fontspec_namewrap:n {psft:####1}
   }
-  \tl_set:Nn \zf@enc {JY3}
+  %% Omit the warning message
+  %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
+  \ltj_fontspec_define_option:nn {Kerning/Off} {
+    \fontspec_update_fontid:n  {-kern}
+    \fontspec_update_featstr:n {-kern}      
+  }  
+  \ltj_fontspec_if_liiikeys:TF {
+    \tl_set:Nn \g_fontspec_encoding_tl {JY3}
+  } {
+    \tl_set:Nn \zf@enc {JY3}
+  }
   \tl_set:Nx \g_fontspec_default_fontopts_tl 
-             {JFM=ujis,Scale=0.960444,\g_ltj_fontspec_default_fontopts_tl}
+             {JFM=ujis,Scale=0.962216,Kerning=Off,\g_ltj_fontspec_default_fontopts_tl}
   \cs_set_eq:NN \DeclareFontFamily \DeclareKanjiFamily
   \fontspec_select:nn{#1}{#2}
   \group_end:
+  \ltj_fontspec_if_liiikeys:F {
+    \tl_set_eq:NN \l_fontspec_family_tl \zf@family
+  }
 }
 
 \cs_new:Nn \ltj_fontspec_set_family:Nnn {
   \ltj_fontspec_select:nn{#2}{#3}
-  \tl_set_eq:NN #1 \zf@family
+  \tl_set_eq:NN #1 \l_fontspec_family_tl
 }
 
 \DeclareDocumentCommand \jfontspec { O{} m } {
   \ltj_fontspec_select:nn{#2}{#3}
   \use:x {
     \exp_not:N \DeclareRobustCommand \exp_not:N #1 {
-      \exp_not:N \kanjifamily {\zf@family} \exp_not:N \selectfont
+      \exp_not:N \kanjifamily {\l_fontspec_family_tl} \exp_not:N \selectfont
     }
   }
 }
           {\csname zf@family@fontname\k@family\endcsname}
       }
     \group_end:
-    \fontfamily\zf@family\selectfont
+    \fontfamily\l_fontspec_family_tl\selectfont
   \else
     \ltj_fontspec_warning:n {addjfontfeatures-ignored}
   \fi