DITA-OT 中需要执行哪些步骤才能将 ANT 命令行参数传递给自定义插件的覆盖 XSLT 脚本



这个问题是这样的:是否可以使用 DITA-OT 将自定义 ANT 参数传递到自定义插件中?

我在DITA-OT/plugins文件夹下有一个名为:com.mymods.pdf的插件文件夹。下面简要解释了结构和文件(紧随本例 http://dita-ot.github.io/1.8/readme/dita2pdf-customization.html)。插件可以工作,但现在我想将 ANT 命令行参数传递到 mycustom.xsl:

com.mymods.pdf/
  cfg/
    common/
      vars/
        en.xml
    fo/
      attrs/
        mycustom.xsl
      xsl/
        mycustom.xsl
    catalog.xml
  integrator.xml
  plugin.xml
  build_mymods_pdf_template.xml (dita2com.mymods.pdf.init   target is here and it depends on dita2pdf2)
  build.xml (<project><import file="build_mymods_pdf.xml"/></project>)
  insertParameters.xml (see the linked question for contents)

那么我需要在哪里应用更改和/或添加新文件?

我使用其他位置的插件与"mainANT.xml"一起使用,它具有使用"dita2mymodsPDF"的目标和转型。

插件.xml代码:

<?xml version='1.0' encoding='UTF-8'?>
<plugin id="com.mymods.pdf">
<require plugin="org.dita.pdf2" />
<feature extension="dita.conductor.transtype.check" value="com.mymods.pdf" />
<feature extension="dita.transtype.print" value="com.mymods.pdf" />
<feature extension="dita.conductor.target.relative" file="integrator.xml" />
<feature extension="dita.conductor.com.mymods.pdf.param" file="insertParameters.xml"/>
<extension-point id="dita.conductor.com.mymods.pdf.param" name="PDF XSLT parameters"/>
</plugin>

build_mymods_pdf_template.xml代码:

<?xml version='1.0' encoding='UTF-8'?>
<project name="com.mymods.pdf" default="com.mymods.pdf">
<property name="transtype" value="com.mymods.pdf"/>
<target name="dita2com.mymods.pdf.init">
<property location="${dita.plugin.com.mymods.pdf.dir}/cfg" name="customization.dir" />
<property location="${dita.plugin.com.mymods.pdf.dir}/xsl/fo/topic2fo_shell_fop.xsl" name="args.xsl.pdf" />
<property name="args.chapter.layout" value="BASIC" />
<property name="args.bookmark.style" value="COLLAPSED" />
<!--property name="args.fo.include.rellinks" value="nofamily" /-->
</target>
<target depends="dita2com.mymods.pdf.init, dita2pdf2" name="dita2com.mymods.pdf" />
</project>

还有集成商.xml代码:

<?xml version='1.0' encoding='UTF-8'?>
<project name="com.mymods.pdf">
<target name="dita2com.mymods.pdf.init">
<property location="${dita.plugin.com.mymods.pdf.dir}/cfg" name="customization.dir" />
<property location="${dita.plugin.com.mymods.pdf.dir}/xsl/fo/topic2fo_shell_fop.xsl" name="args.xsl.pdf" />
<property name="args.chapter.layout" value="BASIC" />
<property name="args.bookmark.style" value="COLLAPSED" />
<!--property name="args.fo.include.rellinks" value="nofamily" /-->
</target>
<target depends="dita2com.mymods.pdf.init, dita2pdf2" name="dita2com.mymods.pdf" />
</project>

不完全确定集成商.xml还是build_mymods_pdf_template.xml实际上应该这样做。但是这个文件集工作并使用mycustom.xsl(其他用于属性,其他用于XSLT覆盖)。现在的问题是,如何获取我自己的自定义 ANT 参数,以便插件可以看到它的值。

这对于 pdf2 插件来说真的很容易,但仍然无法让它在我的 com.mymods 中工作.pdf .我想我不需要发布目录.xml因为它只是告诉"mycustom.xsl"文件在哪里正常工作。

非常简单的方法,而不是最干净的方法是:

注意:这适用于 DITA-OT 1.8.4 检查其他版本的适用性。

  1. 创建自定义PDF插件,如中所述:http://dita-ot.github.io/1.8/readme/dita2pdf-customization.html

  2. 创建"insertParameters.xml",如下所示:http://dita-ot.github.io/1.8/dev_ref/plugin-xsltparams.html

在我的情况下,使用以下自定义参数:

<?xml version='1.0' encoding='UTF-8'?>
<dummy>
 <!-- EXAMPLE: <param name="paramNameinXSLT" expression="${antProperty}" if="antProperty"/> -->
<param name="custom.data1" expression="${custom.data1}" if="custom.data1"/>
<param name="custom.data2" expression="${custom.data2}" if="custom.data2"/>
</dummy>
  1. 现在把这个"insertParameters.xml"放到DITA-OT\plugins\org.dita.pdf2

  2. xsl\custom.xsl 下创建对 custom.xsl 的处理。

下面是 custom.xsl 的示例代码片段

<?xml version='1.0' encoding='UTF-8'?>
<snippet>
<xsl:param name="custom.data1"/>
<xsl:param name="custom.data2"/>
<fo:block><xsl:value-of select="$custom.data1"/></fo:block>
<fo:block><xsl:value-of select="$custom.data2"/></fo:block>
</snippet>
  1. 运行集成器.xml将更改集成到 DITA-OT 中。

  2. 输入命令行命令来运行您的 PDF 场景,例如:"ant dita2mypdf -f -Dcustom.data1="myCustomParameter1value" -Dcustom.data2="myCustomParameter2value"

  3. 运行该过程以创建PDF,您的参数应该可见!

这个问题的真正目的是获得分步说明,将所有这些事情设置为在自定义插件中 100% 工作,不需要将任何内容添加到 DITA-OT 默认插件中(甚至不是单个文件到 pdf2 文件夹中,如在此解决方案中)。这可能会使将来更新DITA-OT变得更加容易。

清洁工? 这种方法的替代方案是

  • 将占位符insertParameters.xml添加到 DITA-OT 1.8.5 的根目录。该文件在标准 DITA-OT 1.8.5 中不存在

    <?xml version='1.0' encoding='UTF-8'?>
    <dummy>
        <param name="dummy" expression="{$dummy} if="dummy"/>
    </dummy>
    
  • 将覆盖insertParameters.xml添加到插件的根目录

    <?xml version='1.0' encoding='UTF-8'?>
    <dummy>
        <param name="my.runtime.parameter" expression="{$my.runtime.parameter} if="my.runtime.parameter"/>
    </dummy>
    

然后运行ant -f integrator.xml

如果不知道

需要传递哪些参数,就很难回答这个问题。但是,假设您是从命令行调用的,并且您已经定义了mymodspdf的变型。该命令如下所示:

ant -f build.xml -Dtranstype mymodspdf -Dmyparameter1 paramval1 -Dmyparameter2 paramval2

呵呵,

胡里奥·巴斯克斯书写精神http://www.writespiritservices.com

相关内容

  • 没有找到相关文章

最新更新