OSDN Git Service

luatexja-fontspec-24.sty: YokoFeatures etc. inside AltFont
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 10 Aug 2014 01:58:29 +0000 (10:58 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sun, 10 Aug 2014 01:58:29 +0000 (10:58 +0900)
e.g.:
\jfontspec
[
  AltFont = { { Color=0000FF,  Range="6000-"9FFF } },
  BoldFont=KozMinPr6N-Bold,
  UprightFeatures = {
    AltFont = {
      { Font=KozGoPr6N-Light, Range="3000-"30FF, TateFont = KozGoPr6N-Heavy,
        YokoFeatures={ Color=4F0000} }
    },
  },
  BoldFeatures = { Color=006F00,
    AltFont = { { Font=KozGoPr6N-Bold, Range="3000-"30FF } },
  },
]{KozMinPr6N-Light}

Now AltFont stacks with \addjfontfeatures.

src/addons/luatexja-fontspec-24.sty
src/jfm-tmin.lua
src/ltj-jfont.lua
test/test20a-mfont-fontspec.pdf
test/test20a-mfont-fontspec.tex

index c123268..f02379e 100644 (file)
 \ltj_fontspec_define_altfont_option:nn {Font} {
   \fontspec_complete_fontname:Nn \l_ltj_fontspec_altname_tl {#1}
 }
-\cs_new:Nn \__ltj_fontspec_altfont_key_code:n
-{
-  \clist_put_right:Nn \l_ltj_fontspec_altfont_clist  {#1}
-}
 \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} {
-  \__ltj_fontspec_altfont_key_code:n { #1 }
+  \clist_put_right:Nn \l_ltj_fontspec_altfont_clist  { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} {
+  \clist_put_right:Nn \l_ltj_fontspec_fontfeat_yoko_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} {
+  \clist_put_right:Nn \l_ltj_fontspec_fontfeat_tate_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} {
+  \tl_if_empty:nF {#1} {
+    \fontspec_complete_fontname:Nn \l_ltj_fontspec_fontname_tate_tl {#1}
+  }
 }
 %% 
 \clist_new:N \l_ltj_fontspec_fontfeat_yoko_clist
 \cs_new:Nn \ltj_fontspec_select:nn {
   \group_begin:
   \ltj_fontspec_define_option:nn {AltFont} {
-    \__ltj_fontspec_altfont_key_code:n { ##1 }
+    \clist_put_right:Nn \l_ltj_fontspec_altfont_clist  {##1}
   }
   \ltj_fontspec_define_option:nn {CID} {
     \__fontspec_update_featstr:n {cid=##1}
 }
 
 %% declare_shape
+
+\cs_new:Nn \ltj_fontspec_declare_shape_yoko:nnnn {
+  \ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l_ltj_fontspec_fontfeat_yoko_clist }
+}
+\cs_new:Nn \ltj_fontspec_declare_shape_tate:nnnn {
+  \ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l_ltj_fontspec_fontfeat_tate_clist }
+}
 \cs_new:Nn \ltj_fontspec_declare_shape:nnnn {
-  \ltj_fontspec_declare_shape_aux:nnxxnn {#1} {#2} {#3} {#4} { JY3 } { \l_ltj_fontspec_fontfeat_yoko_clist }
-  \ltj_fontspec_declare_shape_aux:nnxxnn {#1} {#2} {#3} {#4} { JT3 } { \l_ltj_fontspec_fontfeat_tate_clist }
+  \ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4}
+  \ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4}
 }
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape:nnnn {nnxx}
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape_yoko:nnnn {nnxx}
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape_tate:nnnn {nnxx}
 
 \cs_new:Nn \ltj_fontspec_declare_shape_aux:nnnnnn
  {
   \__fontspec_declare_shapes_normal:nn  {#1} {#2}
   \__fontspec_declare_shape_slanted:nn  {#1} {#2}
  }
-\cs_generate_variant:Nn \ltj_fontspec_declare_shape:nnnn {nnxx}
-\cs_generate_variant:Nn \ltj_fontspec_declare_shape_aux:nnnnnn {nnxxnn}
 
 \cs_new:Nn \ltj_fontspec_set_family:Nnn {
   \cs_set_eq:NN \fontspec_select:nn \ltj_fontspec_select:nn
 \cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape
 \cs_new:Nn \ltj_fontspec_make_font_shapes:Nnnnn {
   \group_begin:
+    %% 基底フォント
     \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn
     \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn
     \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape:nnxx
     \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5}
     %%
+    \ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+     {#4, \l_ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 }
+    \ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+     {#4, \l_ltj_fontspec_fontfeat_tate_clist}{#5} {JT3}
+  \group_end:
+ }
+
+%%% Altfont 内部処理部
+\cs_new:Nn \ltj_fontspec_make_font_shapes_alt:Nnnnnn {
+  \group_begin:
+    \str_if_eq:nnTF { #6 } { JY3 } {
+      \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape_yoko:nnxx
+    }{
+      \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape_tate:nnxx
+    }
     \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 }
     \clist_if_empty:NF \l_ltj_fontspec_altfont_clist {
       \int_gzero:N \g_ltj_fontspec_altnumber_int
 
         \keys_set_known:nxN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 }
           \l_ltj_fontspec_altfont_leftover_clist
+        \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 }
 
         \tl_if_empty:NT \l_ltj_fontspec_altrange_tl {
           \msg_warning:nnn  {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 }
           } {
             \msg_warning:nnn  {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 }
           } {
+            \typeout{LEFT:~<\l_ltj_fontspec_altfont_leftover_clist>~vs~4~<#4>}
             \__ltj_orig_fontspec_make_font_shapes:Nnnnn 
                 { \l_ltj_fontspec_altname_tl } {#2} 
                 {#3 _ alt \int_use:N \g_ltj_fontspec_altnumber_int } 
                 {#4, \l_ltj_fontspec_altfont_leftover_clist }
                 {#5}
             \DeclareAlternateKanjiFont
-              {JY3}{ \l_fontspec_family_tl }{#2}{#3}%
-              {JY3}{ \l_fontspec_family_tl }{#2}
-              { #3 _alt \int_use:N \g_ltj_fontspec_altnumber_int }
-              { \l_ltj_fontspec_altrange_tl }
-            \DeclareAlternateKanjiFont
-              {JT3}{ \l_fontspec_family_tl }{#2}{#3}%
-              {JT3}{ \l_fontspec_family_tl }{#2}
+              { #6 }{ \l_fontspec_family_tl }{#2}{#3}%
+              { #6 }{ \l_fontspec_family_tl }{#2}
               { #3 _alt \int_use:N \g_ltj_fontspec_altnumber_int }
               { \l_ltj_fontspec_altrange_tl }
             \int_gincr:N \g_ltj_fontspec_altnumber_int
       }
     }
   \group_end:
- }
+}
+
 
 %%%%%%%% User commands
 \DeclareDocumentCommand \jfontspec { O{} m O{} } {
index b6c673e..2d9f85b 100644 (file)
@@ -29,7 +29,7 @@ luatexja.jfont.define_jfm {
         ',', '.'
       },
       align = 'left', left = 0.00, down = 0.00,
-      width = 1.0, height = vht, depth = vht, italic=0.0,
+      width = 0.5, height = vht, depth = vht, italic=0.0,
       glue = {
         [0] = { 0.5, 0.190480, 0.5 },
         [1] = { 0, 0, 0 },
@@ -48,7 +48,7 @@ luatexja.jfont.define_jfm {
         '、', '。'
       },
       align = 'left', left = 0.00, down = 0.00,
-      width = 1.0, height = vht, depth = vht, italic=0.0,
+      width = 0.5, height = vht, depth = vht, italic=0.0,
       glue = {
         [0] = { 0.5, 0.190480, 0.5 },
         [1] = { 0, 0, 0 },
index f53f28d..f99a9aa 100644 (file)
@@ -92,7 +92,6 @@ function define_jfm(t)
                v.align = 'left' -- left
             end
            if real_char then
-              print(i, v.width)
               if type(v.width)~='number' and v.width~='prop' then
                  defjfm_res= nil; return
               else
index 4d75cdb..b0f4fe0 100644 (file)
Binary files a/test/test20a-mfont-fontspec.pdf and b/test/test20a-mfont-fontspec.pdf differ
index 7f3e2a3..5d1b9b1 100644 (file)
@@ -2,11 +2,20 @@
 \documentclass{ltjsarticle}
 \usepackage{luatexja-fontspec,luatexja-otf}
 
+\makeatletter
+\let\ltj@orig@DeclareFontShape@=\DeclareFontShape@
+\def\DeclareFontShape@#1#2#3#4#5#6{%
+\immediate\typeout{DFS |#1|#2|#3|#4|#5|#6|}%
+\ltj@orig@DeclareFontShape@{#1}{#2}{#3}{#4}{#5}{#6}%
+}
+\makeatother
+
+
 
 \newjfontfamily\hoge[
   AltFont={ 
     {Range="3000-"307F, Font=JJSYuGothicPr6N-M, Color=00007F, CharacterWidth=Half},
-    {Range="3080-"30FF, Color=7F0000},
+    {Range="3080-"30FF, Color=7F0000,}
   },
   BoldFont={ JJSYuGothicPr6N-M }, 
 ]{JJSYuMinchoPr6N-R}
@@ -56,7 +65,7 @@
 \jfontspec[
   AltFont={
     {Font=JJSYuMin5goKn-R,Range="3000-"30FF, Color=007F00},
-    {Font=DejaVuSans, Range={"21B3,"21B5},Color=0000FF,JFM=prop  },
+    {Font=DejaVuSans, Range={"21B3,"21B5},Color=0000FF,YokoFeatures={JFM=prop} },
   }
 ]{JJSYuMinchoPr6N-R}
 
 }
 
 \section{addfontfeatures}
+\piyo\test
 \addjfontfeatures{
   AltFont={ {Range="4F00-"6FFF, Color=0000FF}, },
-  Color=001F00,CJKShape=Traditional
-% AltFontFeature, AltFontRange は累積しない
+  Color=003F00,CJKShape=Traditional
+%% AltFont は累積する
 }
 \makeatletter\k@family\test
 
+\section{YokoFeaturesなどとの関係}
 \paragraph{うまくいかない例: YokoFeatures等の中にAltFont}
 {%
-\addjfontfeature{
+\jfontspec[
   YokoFeatures = {
     AltFont={
       {Font=JJSYuMin5goKn-D,Range="3000-"30FF, Color=003F3F},
       {Font=JJSYuMin5goKn-R,Range="3000-"304F, Color=7F0000, JFM=tmin },
       {Font=JJSYuMin5goKn-R,Range="3050-"30FF, Color=00007F},
     },
-  }  
-}
+  }
+]{JJSYuMinchoPr6N-R}
 \makeatletter\k@family\test
 }
-\paragraph{ã\81\86ã\81¾ã\81\8fã\81\84ã\81\8bã\81ªã\81\84例: AltFontの中にYokoFeature}
+\paragraph{ã\81\86ã\81¾ã\81\8fã\81\84ã\81\8f例: AltFontの中にYokoFeature}
 {%
-\addjfontfeature{
+\jfontspec[
   %YokoFeatures = { JFM=min },
   AltFont={
     { 
-      YokoFeatures = { Font=JJSYuMin5goKn-D, Color=FF3F3F },
-      TateFeatures = { Font=JJSYuMin5goKn-R, Color=7F0000, JFM=tmin  },
+      Font=JJSYuMin5goKn-D, YokoFeatures = { Color=FF3F3F },
+      TateFont = JJSYuMin5goKn-R, TateFeatures = { Color=7F0000, JFM=tmin  },
       Range="3000-"304F, 
     },
     { 
-      YokoFeatures = { Font=JJSYuMin5goKn-D, Color=FF3F3F },
-      TateFeatures = { Font=JJSYuMin5goKn-R, Color=00007F },
+      Font=JJSYuMin5goKn-D, YokoFeatures = { Color=4F3F3F },
+      TateFont=JJSYuMin5goKn-R, TateFeatures = { Color=00007F },
       Range="3050-"30FF, 
     },
   }
-}
+]{JJSYuMinchoPr6N-R}
 \makeatletter\k@family\test
 }
 
 \paragraph{BoldFeaturesとAltFontその1}
 \jfontspec
 [
-  AltFont = { { Color=0000FF,  Range="4000-"9FFF } },
+  AltFont = { { Color=0000FF,  Range="6000-"9FFF } },
   BoldFont=KozMinPr6N-Bold,
   UprightFeatures = {
-    AltFont = { { Font=KozGoPr6N-Light, Range="3000-"30FF } },
+    AltFont = {
+      { Font=KozGoPr6N-Light, Range="3000-"30FF, TateFont = KozGoPr6N-Heavy,
+        YokoFeatures={ Color=4F0000} } 
+    },
   },
   BoldFeatures = { Color=006F00,
     AltFont = { { Font=KozGoPr6N-Bold, Range="3000-"30FF } },