OSDN Git Service

luatexja-fontspec.sty: Changed syntax of AltFont
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 10 Apr 2014 13:09:55 +0000 (22:09 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 10 Apr 2014 13:09:55 +0000 (22:09 +0900)
Example:
\jfontspec [
  AltFont = {
    { Range = {"4E00-"67FF,{-2}-{-2}}, Color=007F00, Font=KozGoPr6N-Regular.otf, },
    { Range = {"6800-"9FFF}, Color=0000FF},
    { Range = {"3040-"305F}, Font=KozGoPr6N-Medium.otf},
  }
] {KozMinPr6N-Regular}

src/addons/luatexja-fontspec.sty
test/test20a-mfont-fontspec.pdf
test/test20a-mfont-fontspec.tex

index 291d90e..f902f99 100644 (file)
   \keys_define:nn {fontspec-preparse-external} { #1 .code:n = {#2}}
 }
 
-%% Alternate Fonts
-\bool_new:N \l_fontspec_alt_bool
-\seq_clear_new:N \ltj_fontspec_fontname_alt_seq
-\seq_clear_new:N \ltj_fontspec_fontfeat_alt_seq
-\seq_clear_new:N \ltj_fontspec_altrange_seq
-\tl_clear_new:N \ltj_fontspec_fontname_alt_tl
-\tl_clear_new:N \ltj_fontspec_fontfeat_alt_tl
-\tl_clear_new:N \ltj_fontspec_altrange_tl
-
-\cs_new:Nn \__ltj_fontspec_altfontrange_key_code:n
- {
-  \fontspec_update_fontid:n {altfrange:#1}
-  \bool_if:NF \l_fontspec_firsttime_bool
-   {
-    \seq_set_split:Nnn \ltj_fontspec_altrange_seq , {#1}
-   }
- }
-\cs_new:Nn \__ltj_fontspec_altfontfeature_key_code:n
- {
-  \fontspec_update_fontid:n {altfeat:#1}
-  \bool_if:NF \l_fontspec_firsttime_bool
-   {
-     \seq_set_split:Nnn \ltj_fontspec_fontfeat_alt_seq ,  {#1}
-   }
- }
+\cs_new:Nn \ltj_fontspec_define_altfont_option:nn {
+  \keys_define:nn {fontspec-ltjaltfont} { #1 .code:n = {#2}}
+}
 
+%% Alternate Fonts
+%% Spec: AltFont = {
+%%   ...
+%%   { Range = <range>, <font features> },
+%%   { Range = <range>, Font = <font name>, <font features> },
+%%   { Range = <range>, Font = <font name> },
+%%   ...
+%% }
+\tl_new:N  \ltj_fontspec_altrange_tl
+\tl_new:N  \ltj_fontspec_altfont_clist
+\tl_new:N  \ltj_fontspec_altfont_leftover_clist
 
-\cs_new:Nn \__ltj_fontspec_altfont_map:n {
-  \fontspec_complete_fontname:Nn \l_tmpb_tl {#1}
-  \seq_put_right:No \l_tmpa_seq \l_tmpb_tl 
+\ltj_fontspec_define_altfont_option:nn {Range} {
+  \tl_set:Nn \ltj_fontspec_altrange_tl {#1}
+}
+\ltj_fontspec_define_altfont_option:nn {Font} {
+  \fontspec_complete_fontname:Nn \ltj_fontspec_altname_tl {#1}
 }
 
 \cs_new:Nn \__ltj_fontspec_altfont_key_code:n
  {
-  \tl_if_empty:nF {#1}
-   {
-     \seq_set_split:Nnn \ltj_fontspec_fontname_alt_seq , {#1}
-     \seq_clear:N \l_tmpa_seq
-     \seq_map_function:NN \ltj_fontspec_fontname_alt_seq \__ltj_fontspec_altfont_map:n
-     \seq_set_eq:NN \ltj_fontspec_fontname_alt_seq \l_tmpa_seq
-     \fontspec_update_fontid:n {alt:#1}
-   }
+  \clist_set:Nn \ltj_fontspec_altfont_clist  {#1}
+  \fontspec_update_fontid:n {alt:#1}
  }
 
 \cs_new:Nn \ltj_fontspec_select:nn {
   \ltj_fontspec_define_option:nn {AltFont} {
     \__ltj_fontspec_altfont_key_code:n { ##1 }
   }
-  \ltj_fontspec_define_option:nn {AltFontFeatures} {
-    \__ltj_fontspec_altfontfeature_key_code:n { ##1 }
-  }
-  \ltj_fontspec_define_option:nn {AltFontRange} {
-    \__ltj_fontspec_altfontrange_key_code:n { ##1 }
-  }
   \ltj_fontspec_define_option:nn {CID} {
     \fontspec_update_fontid:n  {+cid=##1}
     \fontspec_update_featstr:n {cid=##1}
      { \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,} #4 }
     \cs_set_eq:NN \DeclareFontShape \ltj_fontspec_orig_DeclareFontShape
     %%
-    \bool_if:NF {
-        \int_compare_p:nNn { \seq_count:N \ltj_fontspec_fontfeat_alt_seq } 
-         < { \seq_count:N \ltj_fontspec_altrange_seq }
-         ||
-        \int_compare_p:nNn { \seq_count:N \ltj_fontspec_fontname_alt_seq } 
-         < { \seq_count:N \ltj_fontspec_altrange_seq }
-    } {
+    \clist_if_empty:NF \ltj_fontspec_altfont_clist {
       \int_zero:N \l_tmpa_int
-      \bool_until_do:nn { \seq_if_empty_p:N \ltj_fontspec_altrange_seq  } {
-        \seq_pop:NN \ltj_fontspec_altrange_seq \ltj_fontspec_altrange_tl
-        \seq_pop:NN \ltj_fontspec_fontfeat_alt_seq \ltj_fontspec_fontfeat_alt_tl
-        \seq_pop:NN \ltj_fontspec_fontname_alt_seq \ltj_fontspec_fontname_alt_tl
+      \clist_map_inline:Nn \ltj_fontspec_altfont_clist {
+        \tl_clear:N  \ltj_fontspec_altrange_tl
+       \tl_set:Nn \ltj_fontspec_altname_tl { #1 }
+
+        \keys_set_known:nxN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 }
+          \ltj_fontspec_altfont_leftover_clist
+
+        %\tl_if_empty:NT \ltj_fontspec_altrange_tl { ... }% 警告
         \group_begin:
-          \__fontspec_load_fontname:n { 
-           \quark_if_no_value:NTF \ltj_fontspec_fontname_alt_tl 
-            { #1 } {
-               \tl_if_empty:NTF \ltj_fontspec_fontname_alt_tl 
-               {#1} \ltj_fontspec_fontname_alt_tl
-            }
-          }
+          \__fontspec_load_fontname:n { \ltj_fontspec_altname_tl }
           \fontspec_declare_shape:nnn {#2}{#3 _ alt \int_use:N \l_tmpa_int } { 
-            \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,} 
-            #4 , 
-            \quark_if_no_value:NF \ltj_fontspec_fontfeat_alt_tl \ltj_fontspec_fontfeat_alt_tl
-          }
-          \DeclareAlternateKanjiFont 
-            {JY3}{ \l_fontspec_family_tl }{#2}{#3}%
-            {JY3}{ \l_fontspec_family_tl }{#2}{ #3 _alt\int_use:N \l_tmpa_int }
-            { \ltj_fontspec_altrange_tl }
-        \group_end:
+              \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,} 
+              #4 , \ltj_fontspec_altfont_leftover_clist
+            }
+       \group_end:
+        \DeclareAlternateKanjiFont 
+          {JY3}{ \l_fontspec_family_tl }{#2}{#3}%
+          {JY3}{ \l_fontspec_family_tl }{#2}{ #3 _alt\int_use:N \l_tmpa_int }
+          { \ltj_fontspec_altrange_tl }
         \int_incr:N \l_tmpa_int
       }
     }
index e0eea19..3a6ff9e 100644 (file)
Binary files a/test/test20a-mfont-fontspec.pdf and b/test/test20a-mfont-fontspec.pdf differ
index 0c3b392..d1298d8 100644 (file)
@@ -2,27 +2,22 @@
 \documentclass{ltjsarticle}
 \usepackage{luatexja-fontspec,luatexja-otf}
 
-\newjfontfamily\fuga[
-  AltFontFeatures = { { Color=7F0000, CharacterWidth=Half } },
-%   AltFontFeatures = { Color=7F0000, CharacterWidth=Half }, ではいけない
-  AltFontRange = { "3000-"30FF } , 
-  AltFont = JJSYuGothicPr6N-M 
-]{JJSYuMinchoPr6N-R}
 
 \newjfontfamily\hoge[
-  AltFontFeatures = { { Color=00007F, CharacterWidth=Half }, { Color=7F0000 } },
-  AltFontRange = { { "3000-"307F }, { "3080-"30FF } }, 
-  AltFont = { ,  JJSYuGothicPr6N-M},
-  BoldFont = { JJSYuGothicPr6N-M }, 
-  BoldFeatures = { AltFont={ ,  } }, 
+  AltFont={ 
+    {Range="3000-"307F, Font=JJSYuGothicPr6N-M, Color=00007F, CharacterWidth=Half},
+    {Range="3080-"30FF, Color=7F0000},
+  },
+  BoldFont={ JJSYuGothicPr6N-M }, 
 ]{JJSYuMinchoPr6N-R}
 
 \newjfontfamily\piyo[
+  AltFont={ 
+    {Range="3000-"309F, CharacterWidth=Half},
+    {Range="30A0-"30FF, Font=JJSYuGothicPr6N-M}
+  }
 % カタカナ は JJSYuGothicPr6N-M
-% ひらがな は JJSYuMinchoPr6N-R #00007F, 半角
-  AltFontFeatures = { { Color=00007F, CharacterWidth=Half } },
-  AltFontRange = { { "3000-"309F }, { "3080-"30FF } }, 
-  AltFont = { ,  JJSYuGothicPr6N-M},
+% ひらがな は JJSYuMinchoPr6N-R 半角
 ]{JJSYuMinchoPr6N-R}
 
 \setsansjfont{KozGoPr6N-Medium}
 }
 \begin{document}
 
-\fuga\test
-
-\medskip
 \hoge\test
 
 \medskip\piyo\test
 
 \paragraph{addfontfeatures}\ \par
 \addjfontfeatures{
-  AltFontFeatures={Color=0000FF}, 
-  AltFontRange={"3040-"304F,"3080-"30FF},
-% { {"3040-"304F}, {"3080-"30FF} } の意味になるので,
-% 3040-304F: 青,
-% 3080-30FF: ゴチ(addjfontfeatures 前でそのような指定があるため)
+  AltFont={ {Range="4F00-"6FFF, Color=0000FF}, },
   Color=001F00,CJKShape=Traditional
 % AltFontFeature, AltFontRange は累積しない
 }
 
 \typeout{5号かな}
 \jfontspec[
-  AltFont={JJSYuMin5goKn-R,DejaVuSans },
-  AltFontFeatures={,{Color=0000FF,JFM=prop }},
-  AltFontRange={"3000-"30FF,{"21B3,"21B5 }}%"
+  AltFont={
+    {Font=JJSYuMin5goKn-R,Range="3000-"30FF, Color=007F00},
+    {Font=DejaVuSans, Range={"21B3,"21B5},Color=0000FF,JFM=prop  },
+  }
 ]{JJSYuMinchoPr6N-R}
 
 日本国民は、正当に選挙された国会における代表者を通じて行動し、