OSDN Git Service

2d1fe2f09e036a78b44230736cf9ca783dc182d6
[luatex-ja/luatexja.git] / src / luatexja-core.sty
1 % LuaTeX-ja core TeX source
2
3 \catcode`\@=11
4 \catcode"FFFFF=14 %"
5
6 \input luaotfload.sty
7 \input xkeyval.tex
8 \input infwarerr.sty
9 \ifdefined\luatexja@loaded\endinput\fi
10 \def\luatexja@loaded{hoge}
11
12 \newcount\luatexja@tempcnta
13 \newcount\luatexja@tempcntb
14 \newdimen\luatexja@tempdima
15
16 \newcount\luatexja@autospc
17 \newcount\luatexja@autoxspc
18
19 \newcount\jcharwidowpenalty
20 \newskip\kanjiskip
21 \newskip\xkanjiskip
22 \newdimen\zw
23 \newdimen\zh
24 \newdimen\jQ \jQ=0.25mm
25 \newdimen\jH \jH=0.25mm
26
27 %%%%%%%% Loading lua files
28 \directlua{%
29   utf = unicode.utf8
30   ltj = {}
31   function ltj.loadlua(file)
32     local path = assert(kpse.find_file(file, 'tex'),
33       "File '"..file.."' not found")
34     texio.write_nl("("..path..")")
35     dofile(path)
36   end
37   require('lualibs')
38   ltj.loadlua('luatexja-rmlgbm.lua') 
39     % This file must be read before luatexja-jfont.lua. For Ryumin-Light and GothicBBB-Medium.
40   ltj.loadlua('luatexja-core.lua')
41   ltj.loadlua('luatexja-jfont.lua')
42   ltj.loadlua('luatexja-core-aux.lua')
43 }
44
45 %%%%%%%% Attributes for Japanese typesetting.
46 \newluatexattribute\luatexja@curjfnt   % index for ``current Japanese font''
47 \newluatexattribute\luatexja@charclass % 
48 \newluatexattribute\luatexja@yablshift % attribute for \yabaselineshift
49 \newluatexattribute\luatexja@ykblshift % attribute for \ykbaselineshift
50 \newluatexattribute\luatexja@icflag    % attribute for italic correction
51 \newlanguage\luatexja@japanese\directlua{ltj.ja_lang_number=\the\luatexja@japanese}
52
53 %%%%%%%% \asluastring
54 \def\asluastring#1{'\luaescapestring{\detokenize{#1}}'}
55
56 %%%%%%%% Redefine \/
57 \let\luatexja@ic=\/ \protected\def\/{{\luatexja@icflag=1\luatexja@ic}}
58
59 %%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \gjfont
60 \def\jfont{\afterassignment\@jfont\directlua{ltj.jfontdefX('false')}}
61 \def\gjfont{\afterassignment\@jfont\directlua{ltj.jfontdefX('true')}}
62 \def\@jfont{\directlua{ltj.jfontdefY()}}
63
64 %%%%%%%% \inhibitglue
65 \def\inhibitglue{\directlua{ltj.create_ihb_node()}}
66
67 %%%%%%%% \setjaparameter
68 \newcount\ltj@stack@pbp\newcount\ltj@group@level@pbp
69 \ltj@group@level@pbp=0 \ltj@stack@pbp=0
70
71 % prebreakpenalty = {<char_code>, <penalty>}
72 \define@key[ltj]{japaram}{prebreakpenalty}{%
73   \expandafter\luatexja@setbp#1:{pre}}
74 \define@key[ltj]{japaram}{postbreakpenalty}{%
75   \expandafter\luatexja@setbp#1:{post}}
76 \def\luatexja@setbp#1,#2:#3{
77   \luatexja@tempcnta=#1\relax
78   \luatexja@tempcntb=#2\relax
79   \directlua{ltj.set_ch_table(ltj.isglobal, \asluastring{#3},
80     tex.getcount('luatexja@tempcnta'),tex.getcount('luatexja@tempcntb'))}}
81
82 % yabaselineshift = <dimen>
83 \define@key[ltj]{japaram}{yabaselineshift}{%
84   \luatexja@tempdima=#1\relax%
85   \directlua{tex.setattribute(ltj.isglobal, 
86     luatexbase.attributes['luatexja@yablshift'],
87     tex.getdimen('luatexja@tempdima'))}}
88 \define@key[ltj]{japaram}{ykbaselineshift}{%
89   \luatexja@tempdima=#1\relax%
90   \directlua{tex.setattribute(ltj.isglobal, 
91     luatexbase.attributes['luatexja@ykblshift'],
92     tex.getdimen('luatexja@tempdima'))}}
93
94 % cjkxspmode = {<char_code>, <mode>}
95 % mode: inhibit, preonly, postonly, allow
96 %    or       0        2         1      3
97 \define@key[ltj]{japaram}{cjkxspmode}{%        \inhibitxspcode
98   \expandafter\luatexja@setjxspmode#1:\relax}
99 \def\luatexja@setjxspmode#1,#2:{%
100   \lowercase{\edef\ltj@temp{#2}}%
101   \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi
102   \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi
103   \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi
104   \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi
105   \luatexja@tempcnta=#1\relax\luatexja@tempcntb=\ltj@temp\relax
106   \directlua{ltj.set_ch_table(ltj.isglobal, 'xsp', tex.getcount('luatexja@tempcnta'),
107     tex.getcount('luatexja@tempcntb'))}}
108
109 % asciixspmode = {<char_code>, <mode>}
110 % mode: inhibit, preonly, postonly, allow
111 %    or       0        1         2      3
112 \define@key[ltj]{japaram}{asciixspmode}{%        \inhibitxspcode
113   \expandafter\luatexja@setaxspmode#1:\relax}
114 \def\luatexja@setaxspmode#1,#2:{%
115   \lowercase{\edef\ltj@temp{#2}}%
116   \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi
117   \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi
118   \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi
119   \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi
120   \luatexja@tempcnta=#1\relax\luatexja@tempcntb=\ltj@temp\relax
121   \directlua{ltj.set_ch_table(ltj.isglobal, 'xsp', tex.getcount('luatexja@tempcnta'),
122     tex.getcount('luatexja@tempcntb'))}}
123
124 % autospacing = <bool> (default: true)
125 \define@boolkey[ltj]{japaram}{autospacing}[true]{%
126   \ifltj@japaram@autospacing
127     \directlua{ltj.auto_spacing=true}%
128   \else
129     \directlua{ltj.auto_spacing=false}%
130   \fi
131   }
132
133 % autoxspacing = <bool> (default: true)
134 \define@boolkey[ltj]{japaram}{autoxspacing}[true]{%
135   \ifltj@japaram@autoxspacing
136     \directlua{ltj.auto_xspacing=true}%
137   \else
138     \directlua{ltj.auto_xspacing=false}%
139   \fi
140   }
141
142 \define@key[ltj]{japaram}{kanjiskip}{%              % SKIP
143   \directlua{ltj.print_global()}\kanjiskip=#1 }
144 \define@key[ltj]{japaram}{xkanjiskip}{%             % SKIP
145   \directlua{ltj.print_global()}\xkanjiskip=#1 }
146 \define@key[ltj]{japaram}{jcharwidowpenalty}{%      %COUNT
147   \directlua{ltj.print_global()}\jcharwidowpenalty=#1 }
148
149 % differentjfm = { large | small | average | both }
150 \define@choicekey*+[ltj]{japaram}{differentjfm}[\ltj@temp\ltj@tempcnta]%
151   {large,small,average,both}{%
152   \ifcase\ltj@tempcnta
153     \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_large}\or
154     \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_small}\or
155     \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_average}\or
156     \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_both}%
157   \fi
158 }{\@PackageWarning{luatexja}{ignored invalid argument '#1' for 'differentjfm'}}
159   % large, small, average(OK), both(OK)
160
161 \def\setjaparameter#1{\directlua{ltj.isglobal=''}%
162   \setkeys[ltj]{japaram}{#1}}
163 \def\globalsetjaparameter#1{\directlua{ltj.isglobal='global'}%
164   \setkeys[ltj]{japaram}{#1}}
165
166 %%%%%%%% 
167 \def\getjaparameter#1{%
168   \lowercase{\edef\ltj@temp{#1}}\let\@next=\getjaparameter@one%
169   \def\ltj@tempa{prebreakpenalty}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
170   \def\ltj@tempa{postbreakpenalty}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
171   \def\ltj@tempa{cjkxspmode}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
172   \def\ltj@tempa{asciixspmode}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
173   \@next
174 }
175 \def\getjaparameter@one{\directlua{ltj.out_ja_parameter_one('\ltj@temp')}}
176 \def\getjaparameter@two#1{%
177   \luatexja@tempcnta=#1
178   \directlua{ltj.out_ja_parameter_two('\ltj@temp', tex.getcount('luatexja@tempcnta'))}%
179 }
180
181
182
183 %%%%%%%% commands for ``compatibility''
184 % \def\setinhibitxspcode#1#2{\setjaparameter{cjkxspmode={#1,#2}}}
185 % \def\setxspcode#1#2{\setjaparameter{asciixspmode={#1,#2}}}
186 % \def\setprebreakpenalty#1#2{\setjaparameter{prebreakpenalty={#1,#2}}}
187 % \def\setpostbreakpenalty#1#2{\setjaparameter{prebreakpenalty={#1,#2}}}
188 % \def\getprebreakpenalty#1{\directlua{ltj.get_penalty_table('pre',#1)}\luatexja@tempcnta}
189 % \def\getpostbreakpenalty#1{\directlua{ltj.get_penalty_table('post',#1)}\luatexja@tempcnta}
190 % \def\autospacing{\luatexja@autospc=0 }
191 % \def\noautospacing{\luatexja@autospc=1 }
192 % \def\autoxspacing{\luatexja@autoxspc=0 }
193 % \def\noautoxspacing{\luatexja@autoxspc=1 }
194
195 \def\ltj@temp{plain}
196 \ifx\fmtname\ltj@temp
197   \message{plain format: loading luatexja-plain.tex}
198 \fi
199 \input luatexja-plain.tex
200 \catcode`\@=12
201 \endinput