OSDN Git Service

luatexja-fontspec.sty: Added AltFont, AltFontFeatures, AltFontRange keys.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 26 Mar 2014 12:22:12 +0000 (21:22 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 26 Mar 2014 12:22:12 +0000 (21:22 +0900)
src/addons/luatexja-fontspec.sty
src/ltj-jfmglue.lua
test/test20a-mfont-fontspec.pdf [new file with mode: 0644]
test/test20a-mfont-fontspec.tex [new file with mode: 0644]

index 4623675..6eba74a 100644 (file)
   }
 }
 
+%% Alternate Fonts
+\bool_new:N \l_fontspec_alt_bool
+\tl_clear:N \ltj_fontspec_fontname_alt_tl
+\tl_clear:N \ltj_fontspec_fontfeat_alt_clist
+\tl_clear:N \ltj_fontspec_altrange_clist
+
+\cs_new:Nn \__ltj_fontspec_altfontrange_key_code:n
+ {
+  \bool_if:NF \l_fontspec_firsttime_bool
+   {
+    \tl_set:Nn \ltj_fontspec_altrange_clist {#1}
+   }
+ }
+\cs_new:Nn \__ltj_fontspec_altfontfeature_key_code:n
+ {
+  \bool_if:NF \l_fontspec_firsttime_bool
+   {
+     \tl_if_empty:nTF {#1}
+      { \bool_set_false:N \ltj_fontspec_alt_bool }
+      { \bool_set_true:N \ltj_fontspec_alt_bool  }
+    \tl_set:Nn \ltj_fontspec_fontfeat_alt_clist {, #1}
+    \fontspec_update_fontid:n {altfeat:#1}
+   }
+ }
+\cs_new:Nn \__ltj_fontspec_altfont_key_code:n
+ {
+  \tl_if_empty:nF {#1}
+   {
+    \fontspec_complete_fontname:Nn \ltj_fontspec_fontname_alt_tl {#1}
+    \fontspec_update_fontid:n {alt:#1}
+   }
+ }
+
 \cs_new:Nn \ltj_fontspec_select:nn {
   \group_begin:
+  \bool_set_false:N \ltj_fontspec_alt_bool
+  \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}
     \tl_set:Nn \zf@enc {JY3}
   }
   \tl_set:Nx \g_fontspec_default_fontopts_tl
-             {JFM=ujis,Scale=\fp_use:N \g_ltj_fontspec_scale_fp,Kerning=Off,\g_ltj_fontspec_default_fontopts_tl}
+             {JFM=ujis, Scale=\fp_use:N \g_ltj_fontspec_scale_fp,
+              Kerning=Off, \g_ltj_fontspec_default_fontopts_tl}
   \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+  \cs_set_eq:NN \fontspec_make_font_shapes:nnnn \ltj_fontspec_make_font_shapes:nnnn
   \cs_set_eq:NN \DeclareFontFamily \DeclareKanjiFamily
   \fontspec_select:nn{#1}{#2}
   \group_end:
   \ltj_fontspec_select:nn{#2}{#3}
   \tl_set_eq:NN #1 \l_fontspec_family_tl
 }
+\cs_set_eq:NN \ltj_orig_fontspec_make_font_shapes:nnnn \fontspec_make_font_shapes:nnnn
+\cs_set_eq:NN \ltj_fontspec_orig_DeclareFontShape \DeclareFontShape
+\def \ltj_fontspec_dummy_DeclareFontShape #1#2#3#4#5#6 {}
+\cs_new:Nn \ltj_fontspec_make_font_shapes:nnnn {
+  \ltj_orig_fontspec_make_font_shapes:nnnn {#1} {#2} {#3} {#4}
+  \group_begin:
+    \__fontspec_load_fontname:n {#1}
+    \cs_set_eq:NN \DeclareFontShape \ltj_fontspec_dummy_DeclareFontShape
+    \fontspec_declare_shape:nnn {#2}{#3}
+     { \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,} #4 }
+    \cs_set_eq:NN \DeclareFontShape \ltj_fontspec_orig_DeclareFontShape
+    \typeout{2: #2, 3: #3, \l_fontspec_family_tl, \ltj_fontspec_altrange_clist.}
+    \typeout{<\bool_if:NTF \ltj_fontspec_alt_bool T F >, 
+      < \ltj_fontspec_fontname_alt_tl >, < \ltj_fontspec_fontfeat_alt_clist > }
+    \tl_if_empty:NTF \ltj_fontspec_fontname_alt_tl
+     {
+      \bool_if:NT \ltj_fontspec_alt_bool
+       {
+         \fontspec_declare_shape:nnn {#2} { #3 _alt }
+          {
+            \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,}
+            #4 , \ltj_fontspec_fontfeat_alt_clist
+          }
+          \DeclareAlternateKanjiFont {JY3}{ \l_fontspec_family_tl }{#2}{#3}%
+            {JY3}{ \l_fontspec_family_tl }{#2}{ #3 _alt }{ \ltj_fontspec_altrange_clist }
+       }
+     }
+     {
+       \__fontspec_load_fontname:n {\ltj_fontspec_fontname_alt_tl}
+       \fontspec_declare_shape:nnn {#2} { #3 _alt }
+        {
+          \quark_if_no_value:NF \l__fontspec_fontopts_clist {\l__fontspec_fontopts_clist,}
+          #4 , \ltj_fontspec_fontfeat_alt_clist
+        }
+        \DeclareAlternateKanjiFont {JY3}{ \l_fontspec_family_tl }{#2}{#3}%
+          {JY3}{ \l_fontspec_family_tl }{#2}{ #3 _alt }{ \ltj_fontspec_altrange_clist }
+     }
+  \group_end:
+ }
 
 %%%%%%%% User commands
 \DeclareDocumentCommand \jfontspec { O{} m } {
index 99fcd66..eb01747 100644 (file)
@@ -941,10 +941,13 @@ do
         local lp, par_indented, lpi, lps  = head, 'boxbdd', getid(head), getsubtype(head)
         while lp and ((lpi==id_whatsit and lps~=sid_user) 
                       or ((lpi==id_hlist) and (lps==3))) do
-           if (lpi==id_hlist) and (lps==3) then par_indented = 'parbdd' end
+           if (lpi==id_hlist) and (lps==3) then 
+               Np.char, par_indented = 'parbdd', 'parbdd'
+               Np.width = getfield(lp, 'width')
+            end
            lp=node_next(lp); lpi, lps = getid(lp), getsubtype(lp) end
         return lp, node_tail(head), par_indented
-      else 
+      else
         return head, nil, 'boxbdd'
       end
    end
diff --git a/test/test20a-mfont-fontspec.pdf b/test/test20a-mfont-fontspec.pdf
new file mode 100644 (file)
index 0000000..37ca514
Binary files /dev/null and b/test/test20a-mfont-fontspec.pdf differ
diff --git a/test/test20a-mfont-fontspec.tex b/test/test20a-mfont-fontspec.tex
new file mode 100644 (file)
index 0000000..ecd0e3a
--- /dev/null
@@ -0,0 +1,40 @@
+%#!luajitlatex
+\documentclass{ltjsarticle}
+\usepackage{luatexja-fontspec,luatexja-otf}
+\setmainjfont[
+  AltFontFeatures={ Color=00003F, CharacterWidth=Half },
+  BoldFont = { KozMinPr6N-Bold.otf }, 
+  BoldFeatures = { AltFont={ KozGoPr6N-Bold.otf } }, 
+  AltFontRange = { "3000-"30FF }, 
+]{KozMinPr6N-Regular.otf}
+
+\setsansjfont{KozGoPr6N-Regular.otf}
+
+\long\def\test{%
+  あいうえお医学アイウエオ医学
+  \textbf{あいうえお医学アイウエオ医学}
+  \textgt{あいうえお医学アイウエオ医学}\par
+%
+  日本国民は、正当に選挙された国会における代表者を通じて行動し、
+  われらとわれらの子孫のために、諸国民との協和による成果と、
+  わが国全土にわたつて自由のもたらす恵沢を確保し、政府の行為によつて
+  再び戦争の惨禍が起ることのないやうにすることを決意し、
+  ここに主権が国民に存することを宣言し、この憲法を確定する。
+  そもそも国政は、国民の厳粛な信託によるものであつて、その権威は国民に由来し、
+  その権力は国民の代表者がこれを行使し、その福利は国民がこれを享受する。
+  これは人類普遍の原理であり、この憲法は、かかる原理に基くものである。
+  われらは、これに反する一切の憲法、法令及び詔勅を排除する。
+}
+\begin{document}
+
+\test
+
+\paragraph{addfontfeatures}\ \par
+\addjfontfeatures{
+  AltFontFeatures={ Color=0000FF }, AltFontRange= { "3040-"304F },
+  Color=001F00, CJKShape=Traditional
+}
+% AltFontFeature, AltFontRange は累積しない
+\test
+
+\end{document}
\ No newline at end of file