Le 06/01/2011 22:23, Philipp Stephani a écrit :
Am 06.01.2011 um 21:05 schrieb Paul Isambert:
Le 06/01/2011 20:50, Philipp Stephani a écrit :
Am 06.01.2011 um 20:06 schrieb Luis Rivera:
"tables and functions". So how would you set a table for the six
special characters of esperanto (^c, ^g, ^h, ^j, ^s, ^u)?
\catcode`\^=12
\begingroup
\catcode`\%=12
\gdef\percentchar{%}
\endgroup
\directlua{%
local translate = {
c = "ĉ",
g = "ĝ",
h = "ĥ",
j = "ĵ",
s = "ŝ",
u = "û"
}
function texperanto(text)
result = text:gsub("\percentchar^(\percentchar a)", translate)
tex.sprint(result)
end
}
\def\texperanto#1{\directlua{texperanto([[#1]])}}
\input luaotfload.sty
\font\rm={name:DejaVu Sans:}\relax
\rm
\texperanto{^a ^b ^c ^d ^e ^f ^g ^h ^i ^j ^s ^u}
\bye
A small simplification: again, the catcode change for "^" is unnecessary,
In this example it is necessary because otherwise you get errors (but only
because I used ^b and other unmodified sequences to test the functions)
Indeed, I didn't see that, sorry.
What occurs to me is to use a babel-like solution: make ^ active in
textual context, and define it in terms of Lua functions so that it
may check the following character and apply a conversion on a match:
otherwise, typeset the original two character string.
Never do this if you have LuaTeX, it is completely obsolete and causes many
issues. If you are sure to run on LuaTeX, do everything in Lua, and avoid
catcode changes and the like.
Indeed, the solution with catcodes would be ok with anything but LuaTeX, and
you actually don't need any Lua function.
But making ^ active disables ^^-escapes:
\def\normalcircumflex{^}
\edef\twonormalcircumflexes{\normalcircumflex\normalcircumflex}
\catcode`\^=\active
\def^{\futurelet\next\dotexperanto}
\def\dotexperanto{%
\ifx\next g%
\let\next\dodotexperanto
\else
\ifx\next^%
\let\next\twonormalcircumflexes
\else
\let\next\normalcircumflex
\fi
\fi
\next
}
\def\dodotexperanto#1{\^#1}
g ^g h
^^J
\bye
Oh yes, that is a very bad idea to change the catcode of "^" that way.
What I meant was enclosing it in the \texperanto macro.
Best,
Paul