%D \module [ %D file=t-rst, %D version=0.3 ‘How to Recognise Different Types of Trees from Quite a Long Way Away’ %D title=\CONTEXT\ User Module, %D subtitle=reStructuredText, %D author=Philipp Gesang, %D date=\currentdate, %D copyright=Philipp Gesang, %D license=2-clause BSD, %D ] %M \usemodule[rst] %M \loadsetups[t-rst.xml] \writestatus{loading}{ConTeXt User Module / reStructuredText} \unprotect \startinterface all \setinterfacevariable {RST} {RST} \stopinterface \definenamespace [RST] [ type=module, comment=reStructuredText module, version=0.3, name=RST, style=no, command=yes, setup=list, parent=RST, ] %D Loading the reStructuredText parser. \ctxloadluafile{rst_parser} \def\RST_enable_verbose{% \doif{\RSTparameter{debug}}\v!yes\ctxlua{thirddata.rst_helpers.rst_debug = true}% } \appendtoks \RST_enable_verbose \to \everysetupRST %D Setting some globals. \setupRST [debug=no] %D This command loads and processes the \type{*.rst} file. \def\typesetRSTfile#1{\ctxlua{thirddata.rst.do_rst_file("#1")}} %D To process inline reST markup we’ll have to reset all catcodes %D except for grouping, escaping and cs arguments. \newcatcodetable \RST_catcodes \startcatcodetable \RST_catcodes \catcode`\^^I = 12 % ascii tab is a blank space \catcode`\^^M = 12 % ascii return is end-line \catcode`\^^L = 12 % ascii form-feed \catcode`\ = 12 \catcode`\^^Z = 12 \catcode`\\ = 0 \catcode`\% = 12 \catcode`\# = 6 \catcode`\_ = 12 \catcode`\^ = 12 \catcode`\& = 12 \catcode`\| = 12 \catcode`\{ = 1 \catcode`\} = 2 \catcode`\~ = 12 \catcode`\$ = 12 \stopcatcodetable %D The environment \type{\[start|stop]RST} and the macro %D \type{\RST} allow access to reST-parser from inside a %D \CONTEXT-document when the module is loaded. \unexpanded\def\startRST{% \setcatcodetable \RST_catcodes% \do_start_RST% } \let\stopRST\relax \def\do_start_RST#1\stopRST{% \edef\RST_data{#1}% \setcatcodetable \ctxcatcodes% \ctxlua{thirddata.rst.do_rst_snippet([[\RST_data]])}% } \def\RST{% \setcatcodetable \RST_catcodes% \do_RST% } \def\do_RST#1{% \def\RST_data{#1}% \setcatcodetable \ctxcatcodes% \ctxlua{thirddata.rst.do_rst_snippet([[\RST_data]])}% } %%% Wolfgang’s code below; needs testing %\unexpanded\def\startRST{% %\begingroup %\setcatcodetable \RST_catcodes %\dostartRST% %} %\let\stopRST\relax %\def\dostartRST#1\stopRST{% %\ctxlua{thirddata.rst.do_rst_snippet(\!!bs#1\!!es)}% %\endgroup% %} %\def\RST{% %\begingroup %\setcatcodetable \RST_catcodes %\doRST% %} %\def\doRST#1{% %\ctxlua{thirddata.rst.do_rst_snippet(\!!bs#1\!!es)}% %\endgroup% %} \protect \endinput % vim:ft=context:sw=2:ts=2