DITA-OT将ANT命令行参数传递给自定义插件的覆盖XSLT脚本所需的步骤是什么

时间:2014-04-01 08:10:25

标签: plugins ant customization dita dita-ot

这个问题如下:Is it possible to pass custom ANT parameters into custom plugin with DITA-OT?

我在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”的目标和转换类型。

plugin.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>

也是integrator.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>

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

这对于pdf2插件来说非常简单,但仍然无法在我的 com.mymods.pdf 中使用它。我想我不需要发布catalog.xml,因为它只是告诉哪些“mycustom.xsl”文件正常工作。

3 个答案:

答案 0 :(得分:1)

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

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

  1. 按照http://dita-ot.github.io/1.8/readme/dita2pdf-customization.html

  2. 中的说明创建自定义PDF插件
  3. 创建“insertParameters.xml”,如:http://dita-ot.github.io/1.8/dev_ref/plugin-xsltparams.html

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

    <?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的处理。

    3. 以下是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. 运行integrator.xml将更改集成到DITA-OT中。

      2. 提供用于运行PDF方案的命令行命令,例如:“ant dita2mypdf -f -Dcustom.data1 =”myCustomParameter1value“-Dcustom.data2 =”myCustomParameter2value“

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

      4. 这个问题的目的是为了获得一步一步的指令,将所有这些东西设置为100%在自定义插件中工作,而不需要将任何东西添加到DITA-OT默认插件中(甚至不是单个)将文件存入pdf2文件夹,如本解决方案)。这可能会使DITA-OT的更新变得更加容易。

答案 1 :(得分:1)

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

  • 将占位符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

答案 2 :(得分:0)

如果不确切知道需要通过哪些参数,就很难回答这个问题。但是,让我们假设你从命令行调用它,并且你已经定义了mymodspdf的转换类型。该命令如下所示:

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

HTH,

Julio J. Vazquez 写下精神 http://www.writespiritservices.com