diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/m-translate.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/m-translate.mkiv | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/m-translate.mkiv b/Master/texmf-dist/tex/context/base/m-translate.mkiv new file mode 100644 index 00000000000..c0e4aad7240 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/m-translate.mkiv @@ -0,0 +1,96 @@ +%D \module +%D [ file=m-translate, +%D version=2008.10.09, +%D title=\CONTEXT\ Modules, +%D subtitle=Translations, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=Hans Hagen] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D We can make this module more clever (wildcards and such) but since +%D it's only a demo we stick to the simple case for now. After all, it's +%D better to fix your source. + +\startluacode + local translators = { } + + moduledata.translators = translators + + local compiled, list = nil, nil + + function translators.register(from,to) + local l = lpeg.P(from)/to + if not list then + list = l + else + list = list + l + end + compiled = nil + end + + function translators.translate(s) + if list then + if not compiled then + compiled = lpeg.Cs((list + lpeg.P(1))^0) + end + return compiled:match(s) + else + return s + end + end + + local textlineactions = resolvers.openers.helpers.textlineactions + + utilities.sequencers.appendaction(textlineactions,"after","moduledata.translators.translate") + + function translators.enable() + utilities.sequencers.enableaction(textlineactions,"moduledata.translators.translate") + end + + function translators.disable() + utilities.sequencers.disableaction(textlineactions,"moduledata.translators.translate") + end + + function translators.reset(s) + translators.enable() + list, compiled = nil, nil + end + + translators.disable() +\stopluacode + +\unprotect + +\def\translateinput{\dodoubleargument\dotranslateinput} + +\def\dotranslateinput[#1][#2]{\ctxlua{moduledata.translators.register(\!!bs#1\!!es,\!!bs#2\!!es)}} + +\def\resetinputtranslation {\ctxlua{moduledata.translators.reset()}} +\def\enableinputtranslation {\ctxlua{moduledata.translators.enable()}} +\def\disableinputtranslation{\ctxlua{moduledata.translators.disable()}} + +\def\readtranslatedfile#1% + {\enableinputtranslation + \readfile{#1}\donothing\donothing + \disableinputtranslation} + +\protect + +\doifnotmode{demo}{\endinput} + +\starttext + + \translateinput[Moica][Mojca] + \translateinput[Idris][Idris (aka ادريس)] + + \enableinputtranslation + + Well, it's not that hard to satisfy Idris and Moica. + + \readtranslatedfile{tufte} + +\stoptext |