将 start/stopxmlsetups 与 ConTeXt Lua 接口结合使用

将 start/stopxmlsetups 与 ConTeXt Lua 接口结合使用

我怎样才能仅使用 Lua 接口编写类似以下转换器的东西?

\startbuffer[test]
  <html>
    <body>
      <p>Some stuff</p>
      <p>More stuff, with <em>emphasis</em></p>
    </body>
  </html>
\stopbuffer

\startxmlsetups xml:test:*
  \xmlsetsetup{\xmldocument}{*}{-}
  \xmlsetsetup{\xmldocument}{html|body|p|em}{xml:test:*}
\stopxmlsetups

\xmlregisterdocumentsetup{testxml}{xml:test:setup}

\startxmlsetups xml:test:html
  \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:test:body
  \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:test:p
  \xmlflush{#1}\endgraf
\stopxmlsetups

\startxmlsetups xml:test:em
  {\em\xmlflush{#1}}
\stopxmlsetups

\starttext
  \xmlprocessbuffer{testxml}{test}{}
\stoptext

我可以让其他东西与context.whatever或一起工作lxml.whatever;唯一阻碍我的是命令(start/stop)xmlsetups,所以我无法替换,例如,

\startxmlsetups xml:test:html
  \xmlflush{#1}
\stopxmlsetups

\startluacode
  context.startxmlsetups('xml:test:html')
    lxml.flush('#1')
  context.stopxmlsetups()
\stopluacode

我尝试过、、、context.startxmlsetups(xml:test:html)和;它们似乎都不起作用或给出有关的错误。宏定义似乎在中,但我无法理解。有没有办法从 Lua 调用这些命令,或者完全避免它们?context.delayed.startxmlsetups(xml:test:html)context.nested.startxmlsetups(xml:test:html)function() context.startxmlsetups(xml:test:html) endfunction() context.startxmlsetups(xml:test:html) return true end\csnamecore-env.mkivstart/stopxmlsetups

编辑(2018年7月9日):

我曾尝试在环境之外使用#1'#1'作为 Lua 函数的参数xmlsetups,但它们似乎没有任何用处。这有效:

\startxmlsetups xml:test:html
  \ctxlua{lxml.flush('#1')}
\stopxmlsetups

\ctxlua{lxml.flush('#1')}单独使用时则不行,或者\ctxlua{lxml.flush(#1)},或者\ctxlua{lxml.flush('xml:test:html')}。甚至\ctxlua{lxml.flush('testxml::2')}无法执行任何操作。 (是在该特定环境内testxml::2调用的结果。有趣的是,在环境之外,给出了;我不知道这是否有任何意义,但标准 Lua 解释器不会那样做。)print('#1')xmlsetupsprint('#1')##1

我还尝试了以下操作:

\def\setupxmlwith[#xml][#luafunction]%
  {\startxmlsetups{#xml}\xmlfunction{#1}{#luafunction}\endcsname\stopxmlsetups}

\startluacode
  function xml.functions.test()
    lxml.flush('#1')
  end
\stopluacode

\setupxmlwith[xml:test:html][test]

其结果是:

Missing \endcsname inserted

<to be read again>
\stopxmlsetups
\syst_setups_start_xml_indeed ...me \??setup #1:#2
                                              \expandafter \endcsname \e...

当我在宏定义\endcsname之前添加时,我得到了。\stopxmlsetupsParameters must be named consecutively

相关内容