Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Created September 30, 2012 05:31
Show Gist options
  • Save zr-tex8r/3805959 to your computer and use it in GitHub Desktop.
Save zr-tex8r/3805959 to your computer and use it in GitHub Desktop.
\directlua の弱点をつく件について
%#! lualatex
\documentclass[a4paper]{article}
\def\length#1{%
\directlua{\unexpanded{
require('lualibs-unicode')
local input = [[#1]]
local state = 'r'
% print(input)
for i = 1, utf.len(input) do
local r = utf.byte(utf.sub(input, i, i))
if state == 'r' then
tex.write('*')
if tex.getcatcode(r) == 0 then state = 'csb' end
elseif state == 'csb' then
if tex.getcatcode(r) == 11 then state = 'cs' else state = 'r' end
elseif state == 'cs' then
if tex.getcatcode(r) == 10 then
state = 'r'
elseif tex.getcatcode(r) ~= 11 then
tex.write('*')
state = 'r'
end
end
end
}}}
\begin{document}
\escapechar=-1
\edef\result{\length{\expandafter\expandafter\expandafter}}
\escapechar=`\\
\def\check{***}
\ifx\result\check OK\else NG\fi
\edef\result{\expandafter\length\expandafter{\csname ?TeX\endcsname}}
\def\check{*}
\ifx\result\check OK\else NG\fi
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment