On Fri, 12 Aug 2022 at 23:20, Aditya Mahajan wrote:
On Fri, 12 Aug 2022, Mojca Miklavec via ntg-context wrote:
(a) I don't know how to turn program listing (verbatim code) from xml to (perhaps, vim-based) syntax highlighting (but most importantly, to make sure that line breaks work properly)
Does something like this work:
Yes, awesome, this does exactly what I want, thank you very much. I used the following code: \usemodule[vim] % this breaks if directory doesn't exist before \setupvimtyping[directory=output/] % it would be potentially useful to have some predefined vimtyping already present in the module \definevimtyping [programlisting] [syntax=] \startluacode function xml.functions.processprogramlisting(t) buffers.assign("listing","\\startprogramlisting[syntax=cpp]\n" .. tostring(xml.text(t)) .. "\n\\stopprogramlisting") context.getbuffer { "listing" } end \stopluacode \startxmlsetups xml:programlisting \pushcatcodetable \setcatcodetable\ctxcatcodes \xmlfunction{#1}{processprogramlisting} \popcatcodetable \stopxmlsetups Now I need to get the "cpp" and "unnumbered" part processed automatically, so that it will work for any language: <programlisting language="cpp" linenumbering="unnumbered">// test.cpp: int main() { return 0; }</programlisting> which would then be transformed into \startprogramlisting[syntax=cpp,numbering=no] int main() { return 0; } \stopprogramlisting For some reason the syntax highlighting doesn't work on the full document, but it works inside the minimal example, so I still need to investigate what's going on with the full document. On an unrelated note: I cannot make \startnarrow[middle=1cm] (or left=... for that matter) produce any offset on the left. I was playing with the following code, but the frame refuses to be shifted to the right \setupvimtyping [before={ \startnarrow[left=1cm,before={\blank[10pt]}] \switchtobodyfont[8pt] \startframed [align=flushleft, background=color, backgroundcolor=gray, frame=off, leftframe=on, rulethickness=2pt, framecolor=darkgray, width=local, offset=1ex]}, after={\stopframed\stopnarrow}] Hello \startprogramlisting[syntax=cpp,numbering=yes] int main() { return 0; } \stopprogramlisting Mojca