7 \NeedsTeXFormat{LaTeX2e}
8 \ProvidesPackage{lltjp-listings}[2013/05/14 Patch to listings for LuaTeX-ja]
9 \RequirePackage{listings,luatexbase-cctb}
12 \def\lst@kanjitrue{\let\lst@ifkanji\iftrue}
13 \def\lst@kanjifalse{\let\lst@ifkanji\iffalse}
14 \lst@AddToHook{InitVars}{\lst@kanjifalse}
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}
22 \def\ltj@lst@setletterflag{%
24 \lst@ifkanji\lst@Output\lst@kanjifalse\fi
26 \lst@lettertrue\lst@ifkanji\lst@kanjifalse\else\lst@OutputOther\fi
29 \def\ltj@lst@setkanjiflag{%
33 \lst@ifkanji\else\lst@OutputOther\fi\lst@lettertrue
36 \def\ltj@lst@setopenflag{%
38 \lst@letterfalse\lst@Output
40 \lst@ifkanji\else\lst@OutputOther\fi
43 \def\ltj@lst@setcloseflag{%
44 \lst@ifletter\else\lst@lettertrue\fi\lst@kanjitrue}
46 \def\lst@ProcessJALetter#1{%
48 \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
49 \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
50 \ltj@lst@setopenflag % 開き括弧類
52 \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
53 \ltj@lst@setcloseflag % 閉じ括弧類,句読点
55 \ltj@lst@setkanjiflag % 通常の和文文字
57 \advance\lst@length\@ne % 和文文字は通常の2倍の幅
59 \ltj@lst@setletterflag
63 \def\lst@ProcessJALetterHalf#1{%
65 \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
66 \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
67 \ltj@lst@setopenflag % 開き括弧類
69 \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
70 \ltj@lst@setcloseflag % 閉じ括弧類
72 \ltj@lst@setkanjiflag % 通常の和文文字
76 \ltj@lst@setletterflag
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}
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}%
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}%
107 \ltj@@listing@jpsetN{65377}{65439}{\lst@ProcessJALetterHalf}
108 \edef\ltj@@listing@jpcmd{\the\toks@}\toks@{}
111 \newluatexcatcodetable\CatcodeTableLTJlistings
112 \setluatexcatcodetable\CatcodeTableLTJlistings{
113 \luatexcatcodetable\CatcodeTableLaTeXAtLetter
115 \SetCatcodeRange{"FF61}{"FF9F}{13}% 半角文字
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',
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
134 end, 'ltj.listings_unicode', 1)}}
135 \lst@AddToHook{ExitVars}{\directlua{luatexbase.remove_from_callback('process_input_buffer', 'ltj.listings_unicode')}}
139 \def\lst@OutputToken{%
140 \lst@TrackNewLines \lst@OutputLostSpace
142 \lst@gobbledwhitespacefalse
146 {\lst@thestyle{\lst@FontAdjust
147 \setbox\@tempboxa\lst@hbox
150 \expandafter\lst@FillOutputBox\the\lst@token\@empty
152 \ht\@tempboxa=0pt\dp\@tempboxa=0pt
153 \lst@CalcLostSpaceAndOutput}}%
157 \gdef\lst@Escape#1#2#3#4{%
158 \lst@CArgX #1\relax\lst@CDefX
160 {\lst@ifdropinput\else
161 \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
163 \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
165 \lst@CArg #2\relax\lst@ActiveCDefX
167 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}%
168 {\lst@MProcessListing}%
170 \lst@CArg #2\relax\lst@ActiveCDefX
172 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes
173 \lst@newlines\z@ \lst@whitespacefalse}%
176 #3\catcode"FFFFF=9\lst@escapebegin
181 % \begin{修正事項}{1.3} from jlisting.sty
183 \gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
184 % ソースコード目次における文字と番号の空き
185 \let \l@lstlisting = \l@figure
186 % キャプションとソースコード目次に対する日本語対応
187 \def\lstlistingname{ソースコード}
188 \def\lstlistlistingname{ソースコード目次}