OSDN Git Service

ltj-jfont.lua: removed unnecessary print() and fixed print_aftl_address().
[luatex-ja/luatexja.git] / src / patches / lltjp-listings.sty
1 %
2 % lltjp-listings.sty
3 %
4
5 %%% TODO: IVS
6
7 \NeedsTeXFormat{LaTeX2e}
8 \ProvidesPackage{lltjp-listings}[2013/05/14 Patch to listings for LuaTeX-ja]
9 \RequirePackage{listings,luatexbase-cctb}
10
11 % lowest level
12 \def\lst@kanjitrue{\let\lst@ifkanji\iftrue}
13 \def\lst@kanjifalse{\let\lst@ifkanji\iffalse}
14 \lst@AddToHook{InitVars}{\lst@kanjifalse}
15
16 \def\lst@AppendLetter{%
17     \ltj@lst@setletterflag\lst@Append}
18 \def\lst@AppendOther{%
19     \lst@ifletter\lst@Output\lst@letterfalse\fi\lst@kanjifalse
20     \futurelet\lst@lastother\lst@Append}
21
22 \def\ltj@lst@setletterflag{%
23   \lst@ifletter
24     \lst@ifkanji\lst@Output\lst@kanjifalse\fi
25   \else
26     \lst@lettertrue\lst@ifkanji\lst@kanjifalse\else\lst@OutputOther\fi
27   \fi}
28
29 \def\ltj@lst@setkanjiflag{%
30   \lst@ifletter
31     \lst@Output
32   \else
33     \lst@ifkanji\else\lst@OutputOther\fi\lst@lettertrue
34   \fi}
35
36 \def\ltj@lst@setopenflag{%
37   \lst@ifletter
38     \lst@letterfalse\lst@Output
39   \else
40     \lst@ifkanji\else\lst@OutputOther\fi
41   \fi\lst@kanjitrue}
42
43 \def\ltj@lst@setcloseflag{%
44   \lst@ifletter\else\lst@lettertrue\fi\lst@kanjitrue}
45
46 \def\lst@ProcessJALetter#1{%
47   \lst@whitespacefalse
48   \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
49     \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
50       \ltj@lst@setopenflag    % 開き括弧類
51     \else
52       \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
53         \ltj@lst@setcloseflag % 閉じ括弧類,句読点
54       \else
55         \ltj@lst@setkanjiflag % 通常の和文文字
56     \fi\fi
57     \advance\lst@length\@ne   % 和文文字は通常の2倍の幅
58   \else
59     \ltj@lst@setletterflag
60   \fi
61   \lst@Append#1}
62
63 \def\lst@ProcessJALetterHalf#1{%
64   \lst@whitespacefalse
65   \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
66     \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
67       \ltj@lst@setopenflag    % 開き括弧類
68     \else
69       \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
70         \ltj@lst@setcloseflag % 閉じ括弧類
71       \else
72         \ltj@lst@setkanjiflag % 通常の和文文字
73     \fi\fi
74     % 半角カナは欧文文字と同じ幅
75   \else
76     \ltj@lst@setletterflag
77   \fi
78   \lst@Append#1}
79
80
81 % 半角カナの扱い
82
83 \def\ltj@@listing@jpsetN#1#2#3{% for (not large) range
84   \@tempcnta=#1 \@tempcntb=\numexpr 1+#2\relax \@temptokena{}%
85   \loop \global\advance\@tempcnta\@ne\ifnum\@tempcnta<\@tempcntb\relax
86     \ltj@@listing@jpsetN@{\@tempcnta}{#3}\repeat
87   \ltj@@listing@jpset@after{#1}
88 }
89
90 \def\ltj@@listing@jpset@after#1{%
91   \expandafter\edef\csname ltj@@listing@jpcmd@i#1\endcsname{\the\@temptokena}%
92   \toks@\expandafter\expandafter\expandafter\expandafter%
93   \expandafter\expandafter\expandafter{\expandafter\expandafter%
94   \expandafter\the\expandafter\toks@\csname ltj@@listing@jpcmd@i#1\endcsname}%
95   \@temptokena{}%
96 }
97
98 \def\ltj@@listing@jpsetN@#1#2{{%
99     \@tempcnta=#1 \lccode`\~=\@tempcnta \lccode`\/=\@tempcnta
100     \lowercase{\gdef\@temp{\gdef~{#2/}}}}%
101   \@temptokena\expandafter\expandafter\expandafter\expandafter%
102   \expandafter\expandafter\expandafter{\expandafter\expandafter%
103   \expandafter\the\expandafter\@temptokena\@temp}%
104 }
105
106 \toks@{}
107 \ltj@@listing@jpsetN{65377}{65439}{\lst@ProcessJALetterHalf}
108 \edef\ltj@@listing@jpcmd{\the\toks@}\toks@{}
109
110 % catcode 対策
111 \newluatexcatcodetable\CatcodeTableLTJlistings
112 \setluatexcatcodetable\CatcodeTableLTJlistings{
113   \luatexcatcodetable\CatcodeTableLaTeXAtLetter
114   \catcode"FFFFF=13%"
115   \SetCatcodeRange{"FF61}{"FF9F}{13}%   半角文字
116 }
117
118 % hook!
119 \lst@AddToHook{Init}{
120   \luatexcatcodetable\CatcodeTableLTJlistings\ltj@@listing@jpcmd
121   \lccode`\~="FFFFF\lowercase{\let~\lst@ProcessJALetter}%"
122   \directlua{luatexbase.add_to_callback('process_input_buffer',
123     function(buf)
124       local ret = ''
125       for i = 1, utf.len(buf) do
126         local c = utf.sub(buf, i, i)
127         local cu = utf.byte(c)
128         if cu > 0x80 and tex.getcatcode(cu) \string~= 13 then
129           ret = ret .. utf.char(1048575) % U+FFFFF
130         end
131         ret = ret .. c
132       end
133       return ret
134     end, 'ltj.listings_unicode', 1)}}
135 \lst@AddToHook{ExitVars}{\directlua{luatexbase.remove_from_callback('process_input_buffer', 'ltj.listings_unicode')}}
136
137
138 % 白線対策
139 \def\lst@OutputToken{%
140     \lst@TrackNewLines \lst@OutputLostSpace
141     \lst@ifgobbledws
142         \lst@gobbledwhitespacefalse
143         \lst@@discretionary
144     \fi
145     \lst@CheckMerge
146     {\lst@thestyle{\lst@FontAdjust
147      \setbox\@tempboxa\lst@hbox
148         {\lsthk@OutputBox
149          \lst@lefthss
150          \expandafter\lst@FillOutputBox\the\lst@token\@empty
151          \lst@righthss}%
152      \ht\@tempboxa=0pt\dp\@tempboxa=0pt
153      \lst@CalcLostSpaceAndOutput}}%
154     \lst@ResetToken}
155
156 %
157 \gdef\lst@Escape#1#2#3#4{%
158     \lst@CArgX #1\relax\lst@CDefX
159         {}%
160         {\lst@ifdropinput\else
161          \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
162          \lst@InterruptModes
163          \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
164          \ifx\^^M#2%
165              \lst@CArg #2\relax\lst@ActiveCDefX
166                  {}%
167                  {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}%
168                  {\lst@MProcessListing}%
169          \else
170              \lst@CArg #2\relax\lst@ActiveCDefX
171                  {}%
172                  {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes
173                   \lst@newlines\z@ \lst@whitespacefalse}%
174                  {}%
175          \fi
176          #3\catcode"FFFFF=9\lst@escapebegin
177          \fi}%
178         {}}
179
180
181 %    \begin{修正事項}{1.3} from jlisting.sty
182 % ちょっとした修正
183 \gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
184 % ソースコード目次における文字と番号の空き
185 \let \l@lstlisting = \l@figure
186 % キャプションとソースコード目次に対する日本語対応
187 \def\lstlistingname{ソースコード}
188 \def\lstlistlistingname{ソースコード目次}
189 %    \end{修正事項}
190 \endinput