<?xml version="1.0" encoding="utf-8"?> <!-- vim: set ts=2 sw=2 tw=80 ai si: --> <project name="mainbuild" default="help" basedir="${ant.file.dir}"> <description> This is the generic Perforce documentation build script. It implements build targets for several different output formats: * pdf - Adobe PDF format documentation * publicsite - HTML formatted for the Perforce public web site. * product - HTML formatted for the hosting product. * htmlhelp - HTML formatted for compilatin into CHM files. Questions? Contact Ewan Edwards [eedwards@perforce.com]. </description> <!-- load the generic build properties --> <dirname property="ant.file.dir" file="${ant.file.mainbuild}"/> <loadproperties srcFile="${ant.file.dir}/build.properties"/> <property environment="env"/> <!-- command-line targets =========================================== --> <target name="product" depends="product-params,global-params,z-validate,z-html-chunk,z-html-filter,z-html-index,z-xdelete" description="[HTML] produce HTML for the hosting product" /> <target name="htmlhelp" depends="htmlhelp-params,global-params,z-validate,z-html-chunk,z-html-filter,z-xdelete" description="[HTML] produce HTML Help files, destined for CHM format" /> <target name="publicsite" depends="publicsite-params,global-params,z-validate,z-html-chunk,z-html-filter,z-html-index,z-xdelete" description="[HTML] produce HTML for public web site" /> <target name="pdf" depends="pdf-params,global-params,z-validate,z-pdf-fo,z-xdelete" description="[PDF] produce PDF via Apache FO" /> <target name="help" description="Display this help" > <exec executable="ant"> <arg value="-p"/> </exec> </target> <!-- per-target intermediaries ====================================== --> <!-- These set generic parameters based on per-target settings --> <target name="check-product-build"> <available file="${book.build.dir}/assets/product/build.properties" property="continue.build"/> </target> <!-- The 'product' target is provided to distinguish between HTML destined for perforce.com, and HTML hosted within a product. However, the default styles, assets, and functionality are identical to the publicsite target; product-specific customizations can adapt or override as necessary. --> <target name="product-params" depends="check-product-build" if="continue.build"> <loadproperties srcFile="${book.build.dir}/assets/product/build.properties"/> <property name="assettype" value="product"/> <property name="p4-assets-dir" value="${p4-build-dir}/perforce/assets/publicsite"/> <property name="generate.toc" value="nop"/> </target> <target name="htmlhelp-params"> <loadproperties srcFile="${book.build.dir}/assets/htmlhelp/build.properties"/> <property name="assettype" value="htmlhelp"/> <property name="p4-assets-dir" value="${p4-build-dir}/perforce/assets/htmlhelp"/> <property name="generate.toc" value="nop"/> <property name="continue.build" value="1"/> </target> <target name="publicsite-params"> <loadproperties srcFile="${book.build.dir}/assets/publicsite/build.properties"/> <property name="assettype" value="publicsite"/> <property name="p4-assets-dir" value="${p4-build-dir}/perforce/assets/publicsite"/> <property name="generate.toc" value="nop"/> <property name="continue.build" value="1"/> </target> <target name="pdf-params"> <loadproperties srcFile="${book.build.dir}/assets/pdf/build.properties"/> <property name="assettype" value="pdf"/> <property name="p4-assets-dir" value="${p4-build-dir}/perforce/assets/pdf"/> <property name="continue.build" value="1"/> </target> <target name="global-params" if="continue.build"> <loadproperties srcFile="${ant.file.dir}/global.properties"/> <condition property="perform-validation-dtd"> <equals arg1="${validate-against-dtd}" arg2="true"/> </condition> <condition property="do-search-indexing"> <equals arg1="${webhelp.include.search.tab}" arg2="true"/> </condition> </target> <!-- internal targets =============================================== --> <!-- copy common assets to output directory --> <target name="-z-assets-common" if="continue.build"> <echo>Copy common Perforce-generic assets</echo> <copy todir="${output-dir}"> <fileset dir="${p4-assets-dir}"> <include name="images/**"/> <include name="css/**"/> <include name="js/**"/> <include name="vendor/**"/> </fileset> </copy> </target> <!-- copy guide-specific assets, and filter guide-specific XSL --> <target name="-z-assets-guide" if="continue.build"> <echo>Copy guide-specific assets</echo> <copy todir="${output-dir}" failonerror="true" overwrite="true"> <fileset dir="${assets-basedir}" includes="${assets-dirs}" /> </copy> <echo>Copy and filter the guide-specific stylesheet</echo> <tempfile destdir="${assets-basedir}" deleteonexit="true" suffix=".xsl" property="filtered-stylesheet" /> <copy file="${stylesheet-path}" tofile="${filtered-stylesheet}" failonerror="true"> <filterset> <filter token="p4-assets-dir" value="${p4-assets-dir}"/> </filterset> </copy> <!-- determine whether "extra" assets should be copied --> <condition property="copy.extra.assets"> <and> <isset property="continue.build"/> <isset property="assets-basedir-extra"/> </and> </condition> </target> <target name="-z-assets-extra" if="copy.extra.assets"> <echo>Copy guide-specific extra assets</echo> <copy todir="${output-dir}" failonerror="true" overwrite="true"> <fileset dir="${assets-basedir-extra}" includes="${assets-dirs-extra}" /> </copy> </target> <!-- asset handling task placeholder --> <target name="z-assets" depends="-z-assets-common,-z-assets-guide,-z-assets-extra"/> <!-- filter xmlns attributes from generated HTML --> <target name="z-html-filter" if="continue.build"> <echo>Filtering "xmlns" attributes and image src paths</echo> <replace dir="${output-dir}"> <include name="*.html"/> <replacefilter token='a xmlns="http://www.w3.org/1999/xhtml"' value="a"/> <replacefilter token='code xmlns="http://www.w3.org/1999/xhtml"' value="code"/> <replacefilter token='div xmlns="http://www.w3.org/1999/xhtml"' value="div"/> <replacefilter token='em xmlns="http://www.w3.org/1999/xhtml"' value="em"/> <replacefilter token='h1 xmlns="http://www.w3.org/1999/xhtml"' value="h1"/> <replacefilter token='h2 xmlns="http://www.w3.org/1999/xhtml"' value="h2"/> <replacefilter token='h3 xmlns="http://www.w3.org/1999/xhtml"' value="h3"/> <replacefilter token='h4 xmlns="http://www.w3.org/1999/xhtml"' value="h4"/> <replacefilter token='head xmlns="http://www.w3.org/1999/xhtml"' value="head"/> <replacefilter token='img xmlns="http://www.w3.org/1999/xhtml"' value="img"/> <replacefilter token='li xmlns="http://www.w3.org/1999/xhtml"' value="li"/> <replacefilter token='meta xmlns="http://www.w3.org/1999/xhtml"' value="meta"/> <replacefilter token='p xmlns="http://www.w3.org/1999/xhtml"' value="p"/> <replacefilter token='pre xmlns="http://www.w3.org/1999/xhtml"' value="pre"/> <replacefilter token='span xmlns="http://www.w3.org/1999/xhtml"' value="span"/> <replacefilter token='title xmlns="http://www.w3.org/1999/xhtml"' value="title"/> <replacefilter token=' xmlns=""' value=""/> <replacefilter token='img src="assets/html/images' value='img src="images'/> <replacefilter token='img src="../assets/html/images' value='img src="images'/> <replacefilter token='img src="../../assets/html/images' value='img src="images'/> <replacefilter token='img src="../assets/publicsite/images' value='img src="images'/> <replacefilter token='img src="../../assets/publisite/images' value='img src="images'/> <replacefilter token='img src="../images' value='img src="images'/> </replace> </target> <!-- remove the output directory and its contents --> <target name="z-clean" if="output-dir" unless="clean.done"> <delete dir="${output-dir}"/> <property name="clean.done" value="true"/> </target> <target name="z-validate" if="perform-validation-dtd" depends="z-clean"> <xmlvalidate file="${input-xml}" classname="org.apache.xerces.parsers.SAXParser"/> </target> <!-- prepare the output directory --> <target name="z-prepout" depends="z-clean"> <mkdir dir="${output-dir}"/> <tempfile destdir="${output-dir}" deleteonexit="true" property="xincluded-profiled.xml"/> </target> <!-- copy the source XML, filtering for ANT tokens --> <target name="z-xcopy" depends="z-is-asciidoc" unless="is.asciidoc"> <copy todir="${output-dir}/xml"> <fileset dir="xml" /> <filterset> <filter token="common-xml" value="${p4-build-dir}/perforce/common_xml"/> <filter token="guides-dir" value="${p4-build-dir}/.."/> </filterset> </copy> </target> <!-- delete the copied source XML --> <target name="z-xdelete" if="continue.build" unless="xdelete.done"> <delete dir="${output-dir}/xml"/> <property name="xdelete.done" value="true"/> </target> <!-- check if the build.urls file exists --> <target name="check-build.urls"> <available file="${book.build.dir}/build.urls" property="build.urls-exists"/> </target> <!-- if the build.urls file exists, apply its string replacement definitions to the copy of the guide's XML. --> <target name="z-release" depends="check-build.urls" if="build.urls-exists"> <echo>Filtering perforce.com links</echo> <replace replacefilterfile="${book.build.dir}/build.urls" > <fileset dir="${output-dir}"> <include name="xml/*.xml"/> <include name="adoc/*"/> </fileset> </replace> </target> <!-- determine whether guide is AsciiDoc --> <target name="z-is-asciidoc"> <condition property="is.asciidoc"> <equals arg1="${input-type}" arg2="adoc"/> </condition> </target> <target name="z-can-asciidoc" depends="z-is-asciidoc" if="is.asciidoc"> <fail message="Cannot find one of [ruby] or [asciidoctor] in PATH [${env.PATH}]"> <condition> <or> <not><available file="ruby" filepath="${env.PATH}"/></not> <not><available file="asciidoctor" filepath="${env.PATH}"/></not> </or> </condition> </fail> <property name="asciidoctor.avail" value="true"/> </target> <!-- process an AsciiDoc guide with AsciiDoctor --> <target name="z-asciidoctor" depends="z-can-asciidoc" if="asciidoctor.avail"> <property name="asciidoc-xml-path" value="${output-dir}/${input-xml}"/> <echo>Processing AsciiDoctor guide [${input-xml}] to [${asciidoc-xml-path}]</echo> <exec executable="ruby" failonerror="true"> <arg line="${p4-build-dir}/perforce/ad_generator.rb -t ${assettype} -p ${p4-build-dir} -x ${asciidoc-xml-path} -a ${input-xml}"/> </exec> <!-- sleep seconds="30"/ --> </target> <!-- perform the profiling transformation --> <target name="z-profile" depends="z-clean, z-prepout, z-xcopy, z-asciidoctor, z-release" if="continue.build"> <property name="input-xml-path" value="${input-xml}" relative="yes"/> <xslt in="${output-dir}/${input-xml-path}" out="${xincluded-profiled.xml}" style="${profile-xsl}" classpath="${xalan.jar};${xercesImpl.jar}" > <!-- xmlcatalog> <catalogpath> <pathelement location="${basedir}/catalog.xml"/> </catalogpath> </xmlcatalog --> <sysproperty key="org.apache.xerces.xni.parser.XMLParserConfiguration" value="org.apache.xerces.parsers.XIncludeParserConfiguration"/> <!-- pass through profile XSLT params, if provided --> <param name="profile.arch" expression="${profile.arch}" if="profile.arch"/> <param name="profile.attribute" expression="${profile.attribute}" if="profile.attribute"/> <param name="profile.audience" expression="${profile.audience}" if="profile.audience"/> <param name="profile.condition" expression="${profile.condition}" if="profile.condition"/> <param name="profile.conformance" expression="${profile.conformance}" if="profile.conformance"/> <param name="profile.lang" expression="${profile.lang}" if="profile.lang"/> <param name="profile.os" expression="${profile.os}" if="profile.os"/> <param name="profile.revision" expression="${profile.revision}" if="profile.revision"/> <param name="profile.revisionflag" expression="${profile.revisionflag}" if="profile.revisionflag"/> <param name="profile.role" expression="${profile.role}" if="profile.role"/> <param name="profile.security" expression="${profile.security}" if="profile.security"/> <param name="profile.status" expression="${profile.status}" if="profile.status"/> <param name="profile.userlevel" expression="${profile.userlevel}" if="profile.userlevel"/> <param name="profile.value" expression="${profile.value}" if="profile.value"/> <param name="profile.vendor" expression="${profile.vendor}" if="profile.vendor"/> <param name="profile.wordsize" expression="${profile.wordsize}" if="profile.wordsize"/> <param name="ARGS_CSS" expression="${html.stylesheet}" if="html.stylesheet"/> <param name="DEFAULTLANG" expression="${webhelp.language}" if="webhelp.language"/> <param name="WEBHELP_FOOTER_FILE" expression="${webhelp.footer.file}" if="webhelp.footer.file"/> <param name="WEBHELP_FOOTER_INCLUDE" expression="${webhelp.footer.include}" if="webhelp.footer.include"/> <param name="WEBHELP_PRODUCT_ID" expression="${webhelp.product.id}" if="webhelp.product.id"/> <param name="WEBHELP_PRODUCT_VERSION" expression="${webhelp.product.version}" if="webhelp.product.version"/> </xslt> </target> <!-- chunks the profiled source, produces HTML --> <target name="z-html-chunk" depends="z-profile,z-assets" if="continue.build"> <tempfile destdir="${output-dir}" deleteonexit="true" property="dummy.html"/> <!-- produce HTML --> <xslt in="${xincluded-profiled.xml}" out="${dummy.html}" style="${filtered-stylesheet}" scanincludeddirectories="false" classpath="${xslt-processor-classpath}" > <!-- catalog example definition here until I can decide whether it is necessary or not --> <!-- xmlcatalog> <catalogpath> <pathelement location="${basedir}/catalog.xml"/> </catalogpath> </xmlcatalog --> <!-- pass through XSLT parameters, if provided --> <param name="admon.graphics" expression="${admon.graphics}" if="admon.graphics"/> <param name="admon.graphics.extension" expression="${admon.graphics.extension}" if="admon.graphics.extension"/> <param name="admon.graphics.path" expression="${admon.graphics.path}" if="admon.graphics.path"/> <param name="admon.style" expression="${admon.style}" if="admon.style"/> <param name="admon.textlabel" expression="${admon.textlabel}" if="admon.textlabel"/> <param name="annotate.toc" expression="${annotate.toc}" if="annotate.toc"/> <param name="annotation.css" expression="${annotation.css}" if="annotation.css"/> <param name="annotation.graphic.close" expression="${annotation.graphic.close}" if="annotation.graphic.close"/> <param name="annotation.graphic.open" expression="${annotation.graphic.open}" if="annotation.graphic.open"/> <param name="annotation.js" expression="${annotation.js}" if="annotation.js"/> <param name="annotation.support" expression="${annotation.support}" if="annotation.support"/> <param name="appendix.autolabel" expression="${appendix.autolabel}" if="appendix.autolabel"/> <param name="author.othername.in.middle" expression="${author.othername.in.middle}" if="author.othername.in.middle"/> <param name="autotoc.label.in.hyperlink" expression="${autotoc.label.in.hyperlink}" if="autotoc.label.in.hyperlink"/> <param name="autotoc.label.separator" expression="${autotoc.label.separator}" if="autotoc.label.separator"/> <param name="base.dir" expression="${base.dir}" if="base.dir"/> <param name="biblioentry.item.separator" expression="${biblioentry.item.separator}" if="biblioentry.item.separator"/> <param name="bibliography.collection" expression="${bibliography.collection}" if="bibliography.collection"/> <param name="bibliography.numbered" expression="${bibliography.numbered}" if="bibliography.numbered"/> <param name="bibliography.style" expression="${bibliography.style}" if="bibliography.style"/> <param name="blurb.on.titlepage.enabled" expression="${blurb.on.titlepage.enabled}" if="blurb.on.titlepage.enabled"/> <param name="branding" expression="${branding}" if="branding"/> <param name="brandname" expression="${brandname}" if="brandname"/> <param name="bridgehead.in.toc" expression="${bridgehead.in.toc}" if="bridgehead.in.toc"/> <param name="callout.defaultcolumn" expression="${callout.defaultcolumn}" if="callout.defaultcolumn"/> <param name="callout.graphics" expression="${callout.graphics}" if="callout.graphics"/> <param name="callout.graphics.extension" expression="${callout.graphics.extension}" if="callout.graphics.extension"/> <param name="callout.graphics.number.limit" expression="${callout.graphics.number.limit}" if="callout.graphics.number.limit"/> <param name="callout.graphics.path" expression="${callout.graphics.path}" if="callout.graphics.path"/> <param name="callout.list.table" expression="${callout.list.table}" if="callout.list.table"/> <param name="callout.unicode" expression="${callout.unicode}" if="callout.unicode"/> <param name="callout.unicode.number.limit" expression="${callout.unicode.number.limit}" if="callout.unicode.number.limit"/> <param name="callout.unicode.start.character" expression="${callout.unicode.start.character}" if="callout.unicode.start.character"/> <param name="callouts.extension" expression="${callouts.extension}" if="callouts.extension"/> <param name="chapter.autolabel" expression="${chapter.autolabel}" if="chapter.autolabel"/> <param name="chunk.append" expression="${chunk.append}" if="chunk.append"/> <param name="chunk.first.sections" expression="${chunk.first.sections}" if="chunk.first.sections"/> <param name="chunk.quietly" expression="${chunk.quietly}" if="chunk.quietly"/> <param name="chunk.section.depth" expression="${chunk.section.depth}" if="chunk.section.depth"/> <param name="chunk.separate.lots" expression="${chunk.separate.lots}" if="chunk.separate.lots"/> <param name="chunk.toc" expression="${chunk.toc}" if="chunk.toc"/> <param name="chunk.tocs.and.lots" expression="${chunk.tocs.and.lots}" if="chunk.tocs.and.lots"/> <param name="chunk.tocs.and.lots.has.title" expression="${chunk.tocs.and.lots.has.title}" if="chunk.tocs.and.lots.has.title"/> <param name="chunked.filename.prefix" expression="${chunked.filename.prefix}" if="chunked.filename.prefix"/> <param name="chunker.output.encoding" expression="${chunker.output.encoding}" if="chunker.output.encoding"/> <param name="citerefentry.link" expression="${citerefentry.link}" if="citerefentry.link"/> <param name="collect.xref.targets" expression="${collect.xref.targets}" if="collect.xref.targets"/> <param name="component.label.includes.part.label" expression="${component.label.includes.part.label}" if="component.label.includes.part.label"/> <param name="contrib.inline.enabled" expression="${contrib.inline.enabled}" if="contrib.inline.enabled"/> <param name="css.decoration" expression="${css.decoration}" if="css.decoration"/> <param name="current.docid" expression="${current.docid}" if="current.docid"/> <param name="custom.css.source" expression="${custom.css.source}" if="custom.css.source"/> <param name="default.float.class" expression="${default.float.class}" if="default.float.class"/> <param name="default.image.width" expression="${default.image.width}" if="default.image.width"/> <param name="default.table.frame" expression="${default.table.frame}" if="default.table.frame"/> <param name="default.table.width" expression="${default.table.width}" if="default.table.width"/> <param name="docbook.css.link" expression="${docbook.css.link}" if="docbook.css.link"/> <param name="docbook.css.source" expression="${docbook.css.source}" if="docbook.css.source"/> <param name="draft.mode" expression="${draft.mode}" if="draft.mode"/> <param name="draft.watermark.image" expression="${draft.watermark.image}" if="draft.watermark.image"/> <param name="ebnf.assignment" expression="${ebnf.assignment}" if="ebnf.assignment"/> <param name="ebnf.statement.terminator" expression="${ebnf.statement.terminator}" if="ebnf.statement.terminator"/> <param name="ebnf.table.bgcolor" expression="${ebnf.table.bgcolor}" if="ebnf.table.bgcolor"/> <param name="ebnf.table.border" expression="${ebnf.table.border}" if="ebnf.table.border"/> <param name="editedby.enabled" expression="${editedby.enabled}" if="editedby.enabled"/> <param name="email.delimiters.enabled" expression="${email.delimiters.enabled}" if="email.delimiters.enabled"/> <param name="emphasis.propagates.style" expression="${emphasis.propagates.style}" if="emphasis.propagates.style"/> <param name="entry.propagates.style" expression="${entry.propagates.style}" if="entry.propagates.style"/> <param name="exsl.node.set.available" expression="${exsl.node.set.available}" if="exsl.node.set.available"/> <param name="firstterm.only.link" expression="${firstterm.only.link}" if="firstterm.only.link"/> <param name="footer.rule" expression="${footer.rule}" if="footer.rule"/> <param name="footnote.number.format" expression="${footnote.number.format}" if="footnote.number.format"/> <param name="footnote.number.symbols" expression="${footnote.number.symbols}" if="footnote.number.symbols"/> <param name="formal.procedures" expression="${formal.procedures}" if="formal.procedures"/> <param name="formal.title.placement" expression="${formal.title.placement}" if="formal.title.placement"/> <param name="funcsynopsis.decoration" expression="${funcsynopsis.decoration}" if="funcsynopsis.decoration"/> <param name="funcsynopsis.style" expression="${funcsynopsis.style}" if="funcsynopsis.style"/> <param name="function.parens" expression="${function.parens}" if="function.parens"/> <param name="generate.consistent.ids" expression="${generate.consistent.ids}" if="generate.consistent.ids"/> <param name="generate.css.header" expression="${generate.css.header}" if="generate.css.header"/> <param name="generate.id.attributes" expression="${generate.id.attributes}" if="generate.id.attributes"/> <param name="generate.id.attributes" expression="1"/> <param name="generate.index" expression="${generate.index}" if="generate.index"/> <param name="generate.legalnotice.link" expression="${generate.legalnotice.link}" if="generate.legalnotice.link"/> <param name="generate.manifest" expression="${generate.manifest}" if="generate.manifest"/> <param name="generate.meta.abstract" expression="${generate.meta.abstract}" if="generate.meta.abstract"/> <param name="generate.revhistory.link" expression="${generate.revhistory.link}" if="generate.revhistory.link"/> <param name="generate.section.toc.level" expression="${generate.section.toc.level}" if="generate.section.toc.level"/> <param name="generate.toc" expression="${generate.toc}" if="generate.toc"/> <param name="glossary.collection" expression="${glossary.collection}" if="glossary.collection"/> <param name="glossary.sort" expression="${glossary.sort}" if="glossary.sort"/> <param name="glossentry.show.acronym" expression="${glossentry.show.acronym}" if="glossentry.show.acronym"/> <param name="glossterm.auto.link" expression="${glossterm.auto.link}" if="glossterm.auto.link"/> <param name="graphic.default.extension" expression="${graphic.default.extension}" if="graphic.default.extension"/> <param name="graphicsize.extension" expression="${graphicsize.extension}" if="graphicsize.extension"/> <param name="graphicsize.use.img.src.path" expression="${graphicsize.use.img.src.path}" if="graphicsize.use.img.src.path"/> <param name="header.rule" expression="${header.rule}" if="header.rule"/> <param name="highlight.default.language" expression="${highlight.default.language}" if="highlight.default.language"/> <param name="highlight.source" expression="${highlight.source}" if="highlight.source"/> <param name="highlight.xslthl.config" expression="${highlight.xslthl.config}" if="highlight.xslthl.config"/> <param name="html.append" expression="${html.append}" if="html.append"/> <param name="html.base" expression="${html.base}" if="html.base"/> <param name="html.cellpadding" expression="${html.cellpadding}" if="html.cellpadding"/> <param name="html.cellspacing" expression="${html.cellspacing}" if="html.cellspacing"/> <param name="html.cleanup" expression="${html.cleanup}" if="html.cleanup"/> <param name="html.ext" expression="${html.ext}" if="html.ext"/> <param name="html.extra.head.links" expression="${html.extra.head.links}" if="html.extra.head.links"/> <param name="html.head.legalnotice.link.multiple" expression="${html.head.legalnotice.link.multiple}" if="html.head.legalnotice.link.multiple"/> <param name="html.head.legalnotice.link.types" expression="${html.head.legalnotice.link.types}" if="html.head.legalnotice.link.types"/> <param name="html.longdesc" expression="${html.longdesc}" if="html.longdesc"/> <param name="html.longdesc.link" expression="${html.longdesc.link}" if="html.longdesc.link"/> <param name="html.script" expression="${html.script}" if="html.script"/> <param name="html.script.type" expression="${html.script.type}" if="html.script.type"/> <param name="html.stylesheet" expression="${html.stylesheet}" if="html.stylesheet"/> <param name="html.stylesheet.type" expression="${html.stylesheet.type}" if="html.stylesheet.type"/> <param name="htmlhelp.autolabel" expression="${htmlhelp.autolabel}" if="htmlhelp.autolabel"/> <param name="htmlhelp.chm" expression="${htmlhelp.chm}" if="htmlhelp.chm"/> <param name="htmlhelp.default.topic" expression="${htmlhelp.default.topic}" if="htmlhelp.default.topic"/> <param name="htmlhelp.hhp" expression="${htmlhelp.hhp}" if="htmlhelp.hhp"/> <param name="id.warnings" expression="${id.warnings}" if="id.warnings"/> <param name="ignore.image.scaling" expression="${ignore.image.scaling}" if="ignore.image.scaling"/> <param name="img.src.path" expression="${img.src.path}" if="img.src.path"/> <param name="index.links.to.section" expression="${index.links.to.section}" if="index.links.to.section"/> <param name="index.method" expression="${index.method}" if="index.method"/> <param name="index.number.separator" expression="${index.number.separator}" if="index.number.separator"/> <param name="index.on.role" expression="${index.on.role}" if="index.on.role"/> <param name="index.on.type" expression="${index.on.type}" if="index.on.type"/> <param name="index.prefer.titleabbrev" expression="${index.prefer.titleabbrev}" if="index.prefer.titleabbrev"/> <param name="index.range.separator" expression="${index.range.separator}" if="index.range.separator"/> <param name="index.term.separator" expression="${index.term.separator}" if="index.term.separator"/> <param name="inherit.keywords" expression="${inherit.keywords}" if="inherit.keywords"/> <param name="insert.olink.page.number" expression="${insert.olink.page.number}" if="insert.olink.page.number"/> <param name="insert.olink.pdf.frag" expression="${insert.olink.pdf.frag}" if="insert.olink.pdf.frag"/> <param name="insert.xref.page.number" expression="${insert.xref.page.number}" if="insert.xref.page.number"/> <param name="keep.relative.image.uris" expression="${keep.relative.image.uris}" if="keep.relative.image.uris"/> <param name="keep.relative.image.uris" expression="0"/> <param name="l10n.gentext.default.language" expression="${webhelp.language}" if="webhelp.language"/> <param name="l10n.gentext.language" expression="${webhelp.language}" if="webhelp.language"/> <param name="l10n.lang.value.rfc.compliant" expression="${l10n.lang.value.rfc.compliant}" if="l10n.lang.value.rfc.compliant"/> <param name="label.from.part" expression="${label.from.part}" if="label.from.part"/> <param name="linenumbering.everyNth" expression="${linenumbering.everyNth}" if="linenumbering.everyNth"/> <param name="linenumbering.extension" expression="${linenumbering.extension}" if="linenumbering.extension"/> <param name="linenumbering.separator" expression="${linenumbering.separator}" if="linenumbering.separator"/> <param name="linenumbering.width" expression="${linenumbering.width}" if="linenumbering.width"/> <param name="link.mailto.url" expression="${link.mailto.url}" if="link.mailto.url"/> <param name="make.clean.html" expression="${make.clean.html}" if="make.clean.html"/> <param name="make.graphic.viewport" expression="${make.graphic.viewport}" if="make.graphic.viewport"/> <param name="make.single.year.ranges" expression="${make.single.year.ranges}" if="make.single.year.ranges"/> <param name="make.valid.html" expression="${make.valid.html}" if="make.valid.html"/> <param name="make.year.ranges" expression="${make.year.ranges}" if="make.year.ranges"/> <param name="manifest" expression="${manifest}" if="manifest"/> <param name="manifest.in.base.dir" expression="${manifest.in.base.dir}" if="manifest.in.base.dir"/> <param name="manual.toc" expression="${manual.toc}" if="manual.toc"/> <param name="menuchoice.menu.separator" expression="${menuchoice.menu.separator}" if="menuchoice.menu.separator"/> <param name="menuchoice.separator" expression="${menuchoice.separator}" if="menuchoice.separator"/> <param name="navig.graphics" expression="${navig.graphics}" if="navig.graphics"/> <param name="navig.graphics.extension" expression="${navig.graphics.extension}" if="navig.graphics.extension"/> <param name="navig.graphics.path" expression="${navig.graphics.path}" if="navig.graphics.path"/> <param name="navig.showtitles" expression="${navig.showtitles}" if="navig.showtitles"/> <param name="nominal.image.depth" expression="${nominal.image.depth}" if="nominal.image.depth"/> <param name="nominal.image.width" expression="${nominal.image.width}" if="nominal.image.width"/> <param name="nominal.table.width" expression="${nominal.table.width}" if="nominal.table.width"/> <param name="olink.base.uri" expression="${olink.base.uri}" if="olink.base.uri"/> <param name="olink.debug" expression="${olink.debug}" if="olink.debug"/> <param name="olink.doctitle" expression="${olink.doctitle}" if="olink.doctitle"/> <param name="olink.fragid" expression="${olink.fragid}" if="olink.fragid"/> <param name="olink.lang.fallback.sequence" expression="${olink.lang.fallback.sequence}" if="olink.lang.fallback.sequence"/> <param name="olink.outline.ext" expression="${olink.outline.ext}" if="olink.outline.ext"/> <param name="olink.properties" expression="${olink.properties}" if="olink.properties"/> <param name="olink.pubid" expression="${olink.pubid}" if="olink.pubid"/> <param name="olink.resolver" expression="${olink.resolver}" if="olink.resolver"/> <param name="olink.sysid" expression="${olink.sysid}" if="olink.sysid"/> <param name="othercredit.like.author.enabled" expression="${othercredit.like.author.enabled}" if="othercredit.like.author.enabled"/> <param name="output.dir" expression="${output.dir}" if="output.dir"/> <param name="output_file_name" expression="${output_file_name}"/> <param name="para.propagates.style" expression="${para.propagates.style}" if="para.propagates.style"/> <param name="part.autolabel" expression="${part.autolabel}" if="part.autolabel"/> <param name="pdf.available" expression="${pdf.available}" if="pdf.available"/> <param name="phrase.propagates.style" expression="${phrase.propagates.style}" if="phrase.propagates.style"/> <param name="pixels.per.inch" expression="${pixels.per.inch}" if="pixels.per.inch"/> <param name="points.per.em" expression="${points.per.em}" if="points.per.em"/> <param name="preface.autolabel" expression="${preface.autolabel}" if="preface.autolabel"/> <param name="prefer.internal.olink" expression="${prefer.internal.olink}" if="prefer.internal.olink"/> <param name="preferred.mediaobject.role" expression="${preferred.mediaobject.role}" if="preferred.mediaobject.role"/> <param name="process.empty.source.toc" expression="${process.empty.source.toc}" if="process.empty.source.toc"/> <param name="process.source.toc" expression="${process.source.toc}" if="process.source.toc"/> <param name="punct.honorific" expression="${punct.honorific}" if="punct.honorific"/> <param name="qanda.defaultlabel" expression="${qanda.defaultlabel}" if="qanda.defaultlabel"/> <param name="qanda.in.toc" expression="${qanda.in.toc}" if="qanda.in.toc"/> <param name="qanda.inherit.numeration" expression="${qanda.inherit.numeration}" if="qanda.inherit.numeration"/> <param name="qanda.nested.in.toc" expression="${qanda.nested.in.toc}" if="qanda.nested.in.toc"/> <param name="qandadiv.autolabel" expression="${qandadiv.autolabel}" if="qandadiv.autolabel"/> <param name="refclass.suppress" expression="${refclass.suppress}" if="refclass.suppress"/> <param name="refentry.generate.name" expression="${refentry.generate.name}" if="refentry.generate.name"/> <param name="refentry.generate.title" expression="${refentry.generate.title}" if="refentry.generate.title"/> <param name="refentry.separator" expression="${refentry.separator}" if="refentry.separator"/> <param name="refentry.xref.manvolnum" expression="${refentry.xref.manvolnum}" if="refentry.xref.manvolnum"/> <param name="reference.autolabel" expression="${reference.autolabel}" if="reference.autolabel"/> <param name="root.filename" expression="${root.filename}" if="root.filename"/> <param name="rootid" expression="${rootid}" if="rootid"/> <param name="runinhead.default.title.end.punct" expression="${runinhead.default.title.end.punct}" if="runinhead.default.title.end.punct"/> <param name="runinhead.title.end.punct" expression="${runinhead.title.end.punct}" if="runinhead.title.end.punct"/> <param name="section.autolabel" expression="${section.autolabel}" if="section.autolabel"/> <param name="section.autolabel.max.depth" expression="${section.autolabel.max.depth}" if="section.autolabel.max.depth"/> <param name="section.label.includes.component.label" expression="${section.label.includes.component.label}" if="section.label.includes.component.label"/> <param name="segmentedlist.as.table" expression="${segmentedlist.as.table}" if="segmentedlist.as.table"/> <param name="shade.verbatim" expression="${shade.verbatim}" if="shade.verbatim"/> <param name="shade.verbatim.style" expression="${shade.verbatim.style}" if="shade.verbatim.style"/> <param name="show.comments" expression="${show.comments}" if="show.comments"/> <param name="show.revisionflag" expression="${show.revisionflag}" if="show.revisionflag"/> <param name="simplesect.in.toc" expression="${simplesect.in.toc}" if="simplesect.in.toc"/> <param name="spacing.paras" expression="${spacing.paras}" if="spacing.paras"/> <param name="suppress.footer.navigation" expression="${suppress.footer.navigation}" if="suppress.footer.navigation"/> <param name="suppress.header.navigation" expression="${suppress.header.navigation}" if="suppress.header.navigation"/> <param name="suppress.navigation" expression="${suppress.navigation}" if="suppress.navigation"/> <param name="table.borders.with.css" expression="${table.borders.with.css}" if="table.borders.with.css"/> <param name="table.cell.border.color" expression="${table.cell.border.color}" if="table.cell.border.color"/> <param name="table.cell.border.style" expression="${table.cell.border.style}" if="table.cell.border.style"/> <param name="table.cell.border.thickness" expression="${table.cell.border.thickness}" if="table.cell.border.thickness"/> <param name="table.footnote.number.format" expression="${table.footnote.number.format}" if="table.footnote.number.format"/> <param name="table.footnote.number.symbols" expression="${table.footnote.number.symbols}" if="table.footnote.number.symbols"/> <param name="table.frame.border.color" expression="${table.frame.border.color}" if="table.frame.border.color"/> <param name="table.frame.border.style" expression="${table.frame.border.style}" if="table.frame.border.style"/> <param name="table.frame.border.thickness" expression="${table.frame.border.thickness}" if="table.frame.border.thickness"/> <param name="tablecolumns.extension" expression="${tablecolumns.extension}" if="tablecolumns.extension"/> <param name="target.database.document" expression="${target.database.document}" if="target.database.document"/> <param name="targets.filename" expression="${targets.filename}" if="targets.filename"/> <param name="tex.math.delims" expression="${tex.math.delims}" if="tex.math.delims"/> <param name="tex.math.file" expression="${tex.math.file}" if="tex.math.file"/> <param name="tex.math.in.alt" expression="${tex.math.in.alt}" if="tex.math.in.alt"/> <param name="textdata.default.encoding" expression="${textdata.default.encoding}" if="textdata.default.encoding"/> <param name="textinsert.extension" expression="${textinsert.extension}" if="textinsert.extension"/> <param name="toc.list.type" expression="${toc.list.type}" if="toc.list.type"/> <param name="toc.max.depth" expression="${toc.max.depth}" if="toc.max.depth"/> <param name="toc.section.depth" expression="${toc.section.depth}" if="toc.section.depth"/> <param name="ulink.show" expression="${ulink.show}" if="ulink.show"/> <param name="ulink.target" expression="${ulink.target}" if="ulink.target"/> <param name="use.embed.for.svg" expression="${use.embed.for.svg}" if="use.embed.for.svg"/> <param name="use.extensions" expression="${use.extensions}" if="use.extensions"/> <param name="use.id.as.filename" expression="${use.id.as.filename}" if="use.id.as.filename"/> <param name="use.id.as.filename" expression="1"/> <param name="use.local.olink.style" expression="${use.local.olink.style}" if="use.local.olink.style"/> <param name="use.role.as.xrefstyle" expression="${use.role.as.xrefstyle}" if="use.role.as.xrefstyle"/> <param name="use.role.for.mediaobject" expression="${use.role.for.mediaobject}" if="use.role.for.mediaobject"/> <param name="use.svg" expression="${use.svg}" if="use.svg"/> <param name="variablelist.as.table" expression="${variablelist.as.table}" if="variablelist.as.table"/> <param name="variablelist.term.break.after" expression="${variablelist.term.break.after}" if="variablelist.term.break.after"/> <param name="variablelist.term.separator" expression="${variablelist.term.separator}" if="variablelist.term.separator"/> <param name="webhelp.autolabel" expression="${webhelp.autolabel}" if="webhelp.autolabel"/> <param name="webhelp.base.dir" expression="${output-dir}" if="output-dir"/> <param name="webhelp.include.search.tab" expression="${webhelp.include.search.tab}" if="webhelp.include.search.tab"/> <param name="webhelp.indexer.language" expression="${webhelp.indexer.language}" if="webhelp.indexer.language"/> <param name="writing.mode" expression="${writing.mode}" if="writing.mode"/> <param name="xref.label-page.separator" expression="${xref.label-page.separator}" if="xref.label-page.separator"/> <param name="xref.label-title.separator" expression="${xref.label-title.separator}" if="xref.label-title.separator"/> <param name="xref.title-page.separator" expression="${xref.title-page.separator}" if="xref.title-page.separator"/> <param name="xref.with.number.and.title" expression="${xref.with.number.and.title}" if="xref.with.number.and.title"/> </xslt> </target> <!-- perform new indexing --> <target name="z-html-index" if="do-search-indexing"> <echo>Generating index: ${output-dir}/js/index.js</echo> <apply executable="${p4-build-dir}/perforce/indexer.py" parallel="true"> <arg value="-i"/> <arg value="${output-dir}/js/index.js"/> <srcfile/> <fileset dir="${output-dir}"> <include name="*.html"/> </fileset> </apply> <!-- convert JSON index to valid javascript --> <replaceregexp file="${output-dir}/js/index.js" match="^\{" replace="var document_index = \{" /> </target> <!-- produce the intermediary FO files, and process that with Apache FOP to generate a PDF --> <target name="z-pdf-fo" depends="z-profile,z-assets" if="continue.build"> <tempfile destdir="${output-dir}" deleteonexit="true" property="dummy.fo"/> <!-- produce FO document from DocBook source --> <xslt in="${xincluded-profiled.xml}" out="${dummy.fo}" style="${filtered-stylesheet}" scanincludeddirectories="false" classpath="${xslt-processor-classpath}" > <!-- pass through XSLT parameters, if provided --> <param name="admon.graphics" expression="${admon.graphics}" if="admon.graphics"/> <param name="admon.graphics.extension" expression="${admon.graphics.extension}" if="admon.graphics.extension"/> <param name="admon.graphics.path" expression="${admon.graphics.path}" if="admon.graphics.path"/> <param name="admon.style" expression="${admon.style}" if="admon.style"/> <param name="admon.textlabel" expression="${admon.textlabel}" if="admon.textlabel"/> <param name="annotate.toc" expression="${annotate.toc}" if="annotate.toc"/> <param name="annotation.css" expression="${annotation.css}" if="annotation.css"/> <param name="annotation.graphic.close" expression="${annotation.graphic.close}" if="annotation.graphic.close"/> <param name="annotation.graphic.open" expression="${annotation.graphic.open}" if="annotation.graphic.open"/> <param name="annotation.js" expression="${annotation.js}" if="annotation.js"/> <param name="annotation.support" expression="${annotation.support}" if="annotation.support"/> <param name="appendix.autolabel" expression="${appendix.autolabel}" if="appendix.autolabel"/> <param name="author.othername.in.middle" expression="${author.othername.in.middle}" if="author.othername.in.middle"/> <param name="autotoc.label.in.hyperlink" expression="${autotoc.label.in.hyperlink}" if="autotoc.label.in.hyperlink"/> <param name="autotoc.label.separator" expression="${autotoc.label.separator}" if="autotoc.label.separator"/> <param name="base.dir" expression="${base.dir}" if="base.dir"/> <param name="biblioentry.item.separator" expression="${biblioentry.item.separator}" if="biblioentry.item.separator"/> <param name="bibliography.collection" expression="${bibliography.collection}" if="bibliography.collection"/> <param name="bibliography.numbered" expression="${bibliography.numbered}" if="bibliography.numbered"/> <param name="bibliography.style" expression="${bibliography.style}" if="bibliography.style"/> <param name="blurb.on.titlepage.enabled" expression="${blurb.on.titlepage.enabled}" if="blurb.on.titlepage.enabled"/> <param name="branding" expression="${branding}" if="branding"/> <param name="brandname" expression="${brandname}" if="brandname"/> <param name="bridgehead.in.toc" expression="${bridgehead.in.toc}" if="bridgehead.in.toc"/> <param name="callout.defaultcolumn" expression="${callout.defaultcolumn}" if="callout.defaultcolumn"/> <param name="callout.graphics" expression="${callout.graphics}" if="callout.graphics"/> <param name="callout.graphics.extension" expression="${callout.graphics.extension}" if="callout.graphics.extension"/> <param name="callout.graphics.number.limit" expression="${callout.graphics.number.limit}" if="callout.graphics.number.limit"/> <param name="callout.graphics.path" expression="${callout.graphics.path}" if="callout.graphics.path"/> <param name="callout.list.table" expression="${callout.list.table}" if="callout.list.table"/> <param name="callout.unicode" expression="${callout.unicode}" if="callout.unicode"/> <param name="callout.unicode.number.limit" expression="${callout.unicode.number.limit}" if="callout.unicode.number.limit"/> <param name="callout.unicode.start.character" expression="${callout.unicode.start.character}" if="callout.unicode.start.character"/> <param name="callouts.extension" expression="${callouts.extension}" if="callouts.extension"/> <param name="chapter.autolabel" expression="${chapter.autolabel}" if="chapter.autolabel"/> <param name="chunk.append" expression="${chunk.append}" if="chunk.append"/> <param name="chunk.first.sections" expression="${chunk.first.sections}" if="chunk.first.sections"/> <param name="chunk.quietly" expression="${chunk.quietly}" if="chunk.quietly"/> <param name="chunk.section.depth" expression="${chunk.section.depth}" if="chunk.section.depth"/> <param name="chunk.separate.lots" expression="${chunk.separate.lots}" if="chunk.separate.lots"/> <param name="chunk.toc" expression="${chunk.toc}" if="chunk.toc"/> <param name="chunk.tocs.and.lots" expression="${chunk.tocs.and.lots}" if="chunk.tocs.and.lots"/> <param name="chunk.tocs.and.lots.has.title" expression="${chunk.tocs.and.lots.has.title}" if="chunk.tocs.and.lots.has.title"/> <param name="chunked.filename.prefix" expression="${chunked.filename.prefix}" if="chunked.filename.prefix"/> <param name="chunker.output.encoding" expression="${chunker.output.encoding}" if="chunker.output.encoding"/> <param name="citerefentry.link" expression="${citerefentry.link}" if="citerefentry.link"/> <param name="collect.xref.targets" expression="${collect.xref.targets}" if="collect.xref.targets"/> <param name="component.label.includes.part.label" expression="${component.label.includes.part.label}" if="component.label.includes.part.label"/> <param name="contrib.inline.enabled" expression="${contrib.inline.enabled}" if="contrib.inline.enabled"/> <param name="css.decoration" expression="${css.decoration}" if="css.decoration"/> <param name="current.docid" expression="${current.docid}" if="current.docid"/> <param name="default.float.class" expression="${default.float.class}" if="default.float.class"/> <param name="default.image.width" expression="${default.image.width}" if="default.image.width"/> <param name="default.table.frame" expression="${default.table.frame}" if="default.table.frame"/> <param name="default.table.width" expression="${default.table.width}" if="default.table.width"/> <param name="docbook.css.link" expression="${docbook.css.link}" if="docbook.css.link"/> <param name="docbook.css.source" expression="${docbook.css.source}" if="docbook.css.source"/> <param name="double.sided" expression="${double.sided}" if="double.sided"/> <param name="draft.mode" expression="${draft.mode}" if="draft.mode"/> <param name="draft.watermark.image" expression="${draft.watermark.image}" if="draft.watermark.image"/> <param name="ebnf.assignment" expression="${ebnf.assignment}" if="ebnf.assignment"/> <param name="ebnf.statement.terminator" expression="${ebnf.statement.terminator}" if="ebnf.statement.terminator"/> <param name="ebnf.table.bgcolor" expression="${ebnf.table.bgcolor}" if="ebnf.table.bgcolor"/> <param name="ebnf.table.border" expression="${ebnf.table.border}" if="ebnf.table.border"/> <param name="editedby.enabled" expression="${editedby.enabled}" if="editedby.enabled"/> <param name="email.delimiters.enabled" expression="${email.delimiters.enabled}" if="email.delimiters.enabled"/> <param name="emphasis.propagates.style" expression="${emphasis.propagates.style}" if="emphasis.propagates.style"/> <param name="entry.propagates.style" expression="${entry.propagates.style}" if="entry.propagates.style"/> <param name="exsl.node.set.available" expression="${exsl.node.set.available}" if="exsl.node.set.available"/> <param name="firstterm.only.link" expression="${firstterm.only.link}" if="firstterm.only.link"/> <param name="footer.column.widths" expression="${footer.column.widths}" if="footer.column.widths"/> <param name="footer.rule" expression="${footer.rule}" if="footer.rule"/> <param name="footnote.number.format" expression="${footnote.number.format}" if="footnote.number.format"/> <param name="footnote.number.symbols" expression="${footnote.number.symbols}" if="footnote.number.symbols"/> <param name="fop.extensions" expression="${fop.extensions}" if="fop.extensions"/> <param name="fop1.extensions" expression="${fop1.extensions}" if="fop1.extensions"/> <param name="formal.procedures" expression="${formal.procedures}" if="formal.procedures"/> <param name="formal.title.placement" expression="${formal.title.placement}" if="formal.title.placement"/> <param name="funcsynopsis.decoration" expression="${funcsynopsis.decoration}" if="funcsynopsis.decoration"/> <param name="funcsynopsis.style" expression="${funcsynopsis.style}" if="funcsynopsis.style"/> <param name="function.parens" expression="${function.parens}" if="function.parens"/> <param name="generate.consistent.ids" expression="${generate.consistent.ids}" if="generate.consistent.ids"/> <param name="generate.id.attributes" expression="${generate.id.attributes}" if="generate.id.attributes"/> <param name="generate.id.attributes" expression="1"/> <param name="generate.index" expression="${generate.index}" if="generate.index"/> <param name="generate.legalnotice.link" expression="${generate.legalnotice.link}" if="generate.legalnotice.link"/> <param name="generate.manifest" expression="${generate.manifest}" if="generate.manifest"/> <param name="generate.meta.abstract" expression="${generate.meta.abstract}" if="generate.meta.abstract"/> <param name="generate.revhistory.link" expression="${generate.revhistory.link}" if="generate.revhistory.link"/> <param name="generate.section.toc.level" expression="${generate.section.toc.level}" if="generate.section.toc.level"/> <param name="generate.toc" expression="${generate.toc}" if="generate.toc"/> <param name="glossary.collection" expression="${glossary.collection}" if="glossary.collection"/> <param name="glossary.sort" expression="${glossary.sort}" if="glossary.sort"/> <param name="glossentry.show.acronym" expression="${glossentry.show.acronym}" if="glossentry.show.acronym"/> <param name="glossterm.auto.link" expression="${glossterm.auto.link}" if="glossterm.auto.link"/> <param name="graphic.default.extension" expression="${graphic.default.extension}" if="graphic.default.extension"/> <param name="graphicsize.extension" expression="${graphicsize.extension}" if="graphicsize.extension"/> <param name="graphicsize.use.img.src.path" expression="${graphicsize.use.img.src.path}" if="graphicsize.use.img.src.path"/> <param name="header.column.widths" expression="${header.column.widths}" if="header.column.widths"/> <param name="header.rule" expression="${header.rule}" if="header.rule"/> <param name="highlight.default.language" expression="${highlight.default.language}" if="highlight.default.language"/> <param name="highlight.source" expression="${highlight.source}" if="highlight.source"/> <param name="highlight.xslthl.config" expression="${highlight.xslthl.config}" if="highlight.xslthl.config"/> <param name="id.warnings" expression="${id.warnings}" if="id.warnings"/> <param name="ignore.image.scaling" expression="${ignore.image.scaling}" if="ignore.image.scaling"/> <param name="img.src.path" expression="${img.src.path}" if="img.src.path"/> <param name="index.links.to.section" expression="${index.links.to.section}" if="index.links.to.section"/> <param name="index.method" expression="${index.method}" if="index.method"/> <param name="index.number.separator" expression="${index.number.separator}" if="index.number.separator"/> <param name="index.on.role" expression="${index.on.role}" if="index.on.role"/> <param name="index.on.type" expression="${index.on.type}" if="index.on.type"/> <param name="index.prefer.titleabbrev" expression="${index.prefer.titleabbrev}" if="index.prefer.titleabbrev"/> <param name="index.range.separator" expression="${index.range.separator}" if="index.range.separator"/> <param name="index.term.separator" expression="${index.term.separator}" if="index.term.separator"/> <param name="inherit.keywords" expression="${inherit.keywords}" if="inherit.keywords"/> <param name="insert.olink.page.number" expression="${insert.olink.page.number}" if="insert.olink.page.number"/> <param name="insert.olink.pdf.frag" expression="${insert.olink.pdf.frag}" if="insert.olink.pdf.frag"/> <param name="insert.xref.page.number" expression="${insert.xref.page.number}" if="insert.xref.page.number"/> <param name="keep.relative.image.uris" expression="${keep.relative.image.uris}" if="keep.relative.image.uris"/> <param name="keep.relative.image.uris" expression="0"/> <param name="l10n.gentext.default.language" expression="${webhelp.language}" if="webhelp.language"/> <param name="l10n.gentext.language" expression="${webhelp.language}" if="webhelp.language"/> <param name="l10n.lang.value.rfc.compliant" expression="${l10n.lang.value.rfc.compliant}" if="l10n.lang.value.rfc.compliant"/> <param name="label.from.part" expression="${label.from.part}" if="label.from.part"/> <param name="linenumbering.everyNth" expression="${linenumbering.everyNth}" if="linenumbering.everyNth"/> <param name="linenumbering.extension" expression="${linenumbering.extension}" if="linenumbering.extension"/> <param name="linenumbering.separator" expression="${linenumbering.separator}" if="linenumbering.separator"/> <param name="linenumbering.width" expression="${linenumbering.width}" if="linenumbering.width"/> <param name="link.mailto.url" expression="${link.mailto.url}" if="link.mailto.url"/> <param name="make.graphic.viewport" expression="${make.graphic.viewport}" if="make.graphic.viewport"/> <param name="make.single.year.ranges" expression="${make.single.year.ranges}" if="make.single.year.ranges"/> <param name="make.year.ranges" expression="${make.year.ranges}" if="make.year.ranges"/> <param name="manifest" expression="${manifest}" if="manifest"/> <param name="manifest.in.base.dir" expression="${manifest.in.base.dir}" if="manifest.in.base.dir"/> <param name="manual.toc" expression="${manual.toc}" if="manual.toc"/> <param name="menuchoice.menu.separator" expression="${menuchoice.menu.separator}" if="menuchoice.menu.separator"/> <param name="menuchoice.separator" expression="${menuchoice.separator}" if="menuchoice.separator"/> <param name="navig.graphics" expression="${navig.graphics}" if="navig.graphics"/> <param name="navig.graphics.extension" expression="${navig.graphics.extension}" if="navig.graphics.extension"/> <param name="navig.graphics.path" expression="${navig.graphics.path}" if="navig.graphics.path"/> <param name="navig.showtitles" expression="${navig.showtitles}" if="navig.showtitles"/> <param name="nominal.image.depth" expression="${nominal.image.depth}" if="nominal.image.depth"/> <param name="nominal.image.width" expression="${nominal.image.width}" if="nominal.image.width"/> <param name="nominal.table.width" expression="${nominal.table.width}" if="nominal.table.width"/> <param name="olink.base.uri" expression="${olink.base.uri}" if="olink.base.uri"/> <param name="olink.debug" expression="${olink.debug}" if="olink.debug"/> <param name="olink.doctitle" expression="${olink.doctitle}" if="olink.doctitle"/> <param name="olink.fragid" expression="${olink.fragid}" if="olink.fragid"/> <param name="olink.lang.fallback.sequence" expression="${olink.lang.fallback.sequence}" if="olink.lang.fallback.sequence"/> <param name="olink.outline.ext" expression="${olink.outline.ext}" if="olink.outline.ext"/> <param name="olink.properties" expression="${olink.properties}" if="olink.properties"/> <param name="olink.pubid" expression="${olink.pubid}" if="olink.pubid"/> <param name="olink.resolver" expression="${olink.resolver}" if="olink.resolver"/> <param name="olink.sysid" expression="${olink.sysid}" if="olink.sysid"/> <param name="othercredit.like.author.enabled" expression="${othercredit.like.author.enabled}" if="othercredit.like.author.enabled"/> <param name="output.dir" expression="${output.dir}" if="output.dir"/> <param name="output_file_name" expression="${output_file_name}"/> <param name="paper.type" expression="${paper.type}" if="paper.type"/> <param name="para.propagates.style" expression="${para.propagates.style}" if="para.propagates.style"/> <param name="part.autolabel" expression="${part.autolabel}" if="part.autolabel"/> <param name="pdf.available" expression="${pdf.available}"/> <param name="phrase.propagates.style" expression="${phrase.propagates.style}" if="phrase.propagates.style"/> <param name="pixels.per.inch" expression="${pixels.per.inch}" if="pixels.per.inch"/> <param name="points.per.em" expression="${points.per.em}" if="points.per.em"/> <param name="preface.autolabel" expression="${preface.autolabel}" if="preface.autolabel"/> <param name="prefer.internal.olink" expression="${prefer.internal.olink}" if="prefer.internal.olink"/> <param name="preferred.mediaobject.role" expression="${preferred.mediaobject.role}" if="preferred.mediaobject.role"/> <param name="process.empty.source.toc" expression="${process.empty.source.toc}" if="process.empty.source.toc"/> <param name="process.source.toc" expression="${process.source.toc}" if="process.source.toc"/> <param name="punct.honorific" expression="${punct.honorific}" if="punct.honorific"/> <param name="qanda.defaultlabel" expression="${qanda.defaultlabel}" if="qanda.defaultlabel"/> <param name="qanda.in.toc" expression="${qanda.in.toc}" if="qanda.in.toc"/> <param name="qanda.inherit.numeration" expression="${qanda.inherit.numeration}" if="qanda.inherit.numeration"/> <param name="qanda.nested.in.toc" expression="${qanda.nested.in.toc}" if="qanda.nested.in.toc"/> <param name="qandadiv.autolabel" expression="${qandadiv.autolabel}" if="qandadiv.autolabel"/> <param name="refclass.suppress" expression="${refclass.suppress}" if="refclass.suppress"/> <param name="refentry.generate.name" expression="${refentry.generate.name}" if="refentry.generate.name"/> <param name="refentry.generate.title" expression="${refentry.generate.title}" if="refentry.generate.title"/> <param name="refentry.separator" expression="${refentry.separator}" if="refentry.separator"/> <param name="refentry.xref.manvolnum" expression="${refentry.xref.manvolnum}" if="refentry.xref.manvolnum"/> <param name="reference.autolabel" expression="${reference.autolabel}" if="reference.autolabel"/> <param name="root.filename" expression="${root.filename}" if="root.filename"/> <param name="rootid" expression="${rootid}" if="rootid"/> <param name="runinhead.default.title.end.punct" expression="${runinhead.default.title.end.punct}" if="runinhead.default.title.end.punct"/> <param name="runinhead.title.end.punct" expression="${runinhead.title.end.punct}" if="runinhead.title.end.punct"/> <param name="section.autolabel" expression="${section.autolabel}" if="section.autolabel"/> <param name="section.autolabel.max.depth" expression="${section.autolabel.max.depth}" if="section.autolabel.max.depth"/> <param name="section.label.includes.component.label" expression="${section.label.includes.component.label}" if="section.label.includes.component.label"/> <param name="segmentedlist.as.table" expression="${segmentedlist.as.table}" if="segmentedlist.as.table"/> <param name="shade.verbatim" expression="${shade.verbatim}" if="shade.verbatim"/> <param name="shade.verbatim.style" expression="${shade.verbatim.style}" if="shade.verbatim.style"/> <param name="show.comments" expression="${show.comments}" if="show.comments"/> <param name="show.revisionflag" expression="${show.revisionflag}" if="show.revisionflag"/> <param name="simplesect.in.toc" expression="${simplesect.in.toc}" if="simplesect.in.toc"/> <param name="spacing.paras" expression="${spacing.paras}" if="spacing.paras"/> <param name="suppress.footer.navigation" expression="${suppress.footer.navigation}" if="suppress.footer.navigation"/> <param name="suppress.header.navigation" expression="${suppress.header.navigation}" if="suppress.header.navigation"/> <param name="suppress.navigation" expression="${suppress.navigation}" if="suppress.navigation"/> <param name="table.cell.border.color" expression="${table.cell.border.color}" if="table.cell.border.color"/> <param name="table.cell.border.style" expression="${table.cell.border.style}" if="table.cell.border.style"/> <param name="table.cell.border.thickness" expression="${table.cell.border.thickness}" if="table.cell.border.thickness"/> <param name="table.footnote.number.format" expression="${table.footnote.number.format}" if="table.footnote.number.format"/> <param name="table.footnote.number.symbols" expression="${table.footnote.number.symbols}" if="table.footnote.number.symbols"/> <param name="table.frame.border.color" expression="${table.frame.border.color}" if="table.frame.border.color"/> <param name="table.frame.border.style" expression="${table.frame.border.style}" if="table.frame.border.style"/> <param name="table.frame.border.thickness" expression="${table.frame.border.thickness}" if="table.frame.border.thickness"/> <param name="tablecolumns.extension" expression="${tablecolumns.extension}" if="tablecolumns.extension"/> <param name="target.database.document" expression="${target.database.document}" if="target.database.document"/> <param name="targets.filename" expression="${targets.filename}" if="targets.filename"/> <param name="tex.math.delims" expression="${tex.math.delims}" if="tex.math.delims"/> <param name="tex.math.file" expression="${tex.math.file}" if="tex.math.file"/> <param name="tex.math.in.alt" expression="${tex.math.in.alt}" if="tex.math.in.alt"/> <param name="textdata.default.encoding" expression="${textdata.default.encoding}" if="textdata.default.encoding"/> <param name="textinsert.extension" expression="${textinsert.extension}" if="textinsert.extension"/> <param name="toc.list.type" expression="${toc.list.type}" if="toc.list.type"/> <param name="toc.max.depth" expression="${toc.max.depth}" if="toc.max.depth"/> <param name="toc.section.depth" expression="${toc.section.depth}" if="toc.section.depth"/> <param name="ulink.show" expression="${ulink.show}" if="ulink.show"/> <param name="ulink.target" expression="${ulink.target}" if="ulink.target"/> <param name="use.embed.for.svg" expression="${use.embed.for.svg}" if="use.embed.for.svg"/> <param name="use.extensions" expression="${use.extensions}" if="use.extensions"/> <param name="use.id.as.filename" expression="${use.id.as.filename}" if="use.id.as.filename"/> <param name="use.id.as.filename" expression="1"/> <param name="use.local.olink.style" expression="${use.local.olink.style}" if="use.local.olink.style"/> <param name="use.role.as.xrefstyle" expression="${use.role.as.xrefstyle}" if="use.role.as.xrefstyle"/> <param name="use.role.for.mediaobject" expression="${use.role.for.mediaobject}" if="use.role.for.mediaobject"/> <param name="use.svg" expression="${use.svg}" if="use.svg"/> <param name="variablelist.as.table" expression="${variablelist.as.table}" if="variablelist.as.table"/> <param name="variablelist.term.break.after" expression="${variablelist.term.break.after}" if="variablelist.term.break.after"/> <param name="variablelist.term.separator" expression="${variablelist.term.separator}" if="variablelist.term.separator"/> <param name="webhelp.base.dir" expression="${output-dir}" if="output-dir"/> <param name="webhelp.include.search.tab" expression="${webhelp.include.search.tab}" if="webhelp.include.search.tab"/> <param name="writing.mode" expression="${writing.mode}" if="writing.mode"/> <param name="xref.label-page.separator" expression="${xref.label-page.separator}" if="xref.label-page.separator"/> <param name="xref.label-title.separator" expression="${xref.label-title.separator}" if="xref.label-title.separator"/> <param name="xref.title-page.separator" expression="${xref.title-page.separator}" if="xref.title-page.separator"/> <param name="xref.with.number.and.title" expression="${xref.with.number.and.title}" if="xref.with.number.and.title"/> </xslt> <!-- customize the fop-config.xml for the build paths --> <tempfile destdir="${output-dir}" deleteonexit="true" suffix=".xml" property="fop-config" /> <copy file="${p4-build-dir}/perforce/assets/pdf/fop-config.xml" tofile="${fop-config}" failonerror="true" > <filterset> <filter token="fonts-dir" value="${p4-build-dir}/fonts"/> </filterset> </copy> <!-- produce PDF document from FO source --> <fop format="application/pdf" userconfig="${fop-config}" basedir="${output-dir}" messagelevel="warn" fofile="${dummy.fo}" outfile="${output-dir}/${pdf-output-filename}" /> </target> <!-- tasks ========================================================== --> <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop"> <classpath> <fileset dir="${fop.home}/lib"> <include name="*.jar"/> </fileset> <fileset dir="${fop.home}/build"> <include name="fop.jar"/> <include name="fop-hyph.jar" /> </fileset> </classpath> </taskdef> </project>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#25 | 12836 | eedwards |
Arrange for the doc build infrastructure to pass the output type through to AsciiDoctor processing, so that output-format specific image handling can work. |
||
#24 | 12830 | eedwards |
#review-1031983 Incorporate AsciiDoc into the doc build infrastructure. This builds on Matt's initial generate.rb, but uses its own version that is more generic and adds some rudimentary validation. Requirements to build AsciiDoc guides: - in the build.properties (or build.xml) for a guide, the property "input-xml" must point to the master AsciiDoc guide. - additionally, a property "input-type" must be set to "adoc". I.e.: "input-type=adoc". - Ruby must be installed and available in your path. - AsciiDoctor must be installed and available in your path. - The master AsciiDoc file must have a metadata line providing the guide's subtitle (which, by convention, is the release string, e.g. "2015.1"), like so: :subtitle: 2015.1 The standard invocations: - "ant pdf" to create a PDF, - "ant publicsite" to create HTML destined for perforce.com, - "ant htmlhelp" to provide the files for CHM production, - "ant product" (if implemented for the guide) to produce HTML destined for product inclusion should all work just as if the guide originated in DocBook XML. As the DVCS guide is the only one authored in AsciiDoc at this point, the necessary modifications to its configuration/source are included in this review, as well as a first cut of common AsciiDoc files for license statement inclusion. Note: I had to rename aa_license to aa_license.adoc because AsciiDoctor's include mechanism requires a known filename extension for nested includes. In the future, all AsciiDoc files should have the ".adoc" extension or frustration will prevail. |
||
#23 | 12826 | eedwards | Allow guide-specific assets to overwrite any generic assets. | ||
#22 | 12823 | eedwards |
Add a new 'htmlhelp' doc build target that generates the HTML, index, TOC files that can be compiled into a CHM file on a Windows machine using HTML Help Workshop. The build target can be used wherever the doc infrastructure runs, but the final CHM compilation currently needs to be performed on a Windows box. This means full CHM production automation is currently unavailable. Further investigation into non-Microsoft CHM compilers will be required for full automation. Note that any guide that requires CHM production will need to add its own 'htmlhelp' asset tree. The P4VS guide will (shortly) become a decent reference, if required. For any XSLT tinkerers, note that only a few of the 'htmlhelp' DocBook parameters are currently passed through to the transformation phase. If you need to pass any additional parameters through, add them to build.xml as appropriate. |
||
#21 | 12812 | eedwards |
During transformation to PDF/HTML, the source XML is filtered/copied to the target-specific output directory, and then transformation operates on the filtered XML. There was an assumption that input-xml was a relative path, but oXygen transformation scenarios provide absolute paths. This change fixes that assumption so that absolute paths get mapped to their relative locations within the output directory. |
||
#20 | 12811 | eedwards |
Add support for guide transformation targets to specify the use of assets from a different target, and to then overlay their own assets on top. This makes it easy to have a single set of images, say from the publicsite target, that the product target can use, and then apply its own variations of those images (or additional images). Guides that wish to do this should update their target-specific build.properties file to specify assets-basedir-extra to be the base path for the overlay assets, and assets-dirs-extra to the asset inclusion criteria required. These two properties function identically to assets-basedir and assets-dirs, respectively. |
||
#19 | 12809 | eedwards |
#review-954548 Add the infrastructure to present a "PDF" link in the header bar in the HTML presentation. Not all guides provide PDF versions, so this is configurable on a guide-by-guide basis. The default is to omit the link. When a guide provides a PDF version, set the pdf.available attribute to the name of the PDF file that the link should target. For example, in P4Guide's publicsite build.properties: pdf.available=p4guide.pdf A subsequent changelist will apply this attribute to all of the server guides. |
||
#18 | 12807 | eedwards |
Add support for a 'product' build target. The doc infrastructure already supports 'pdf' and 'publicsite' targets; the latter is used to generate the HTML hosted on perforce.com. Newer products, such as P4Insights and Swarm 2.0, will need to also produce HTML that will be hosted by the product, and which should be styled (and possibly interact) like the product itself. This change includes a mechanism to cause the build to end without failure if a guide does not provide 'product' assets, specifically it looks for: <guide>/assets/product/build.properties If that file exists, the 'product' build continues as expected, otherwise it will report going through the motions without actually running any tasks. Currently, the 'product' HTML is identical to the 'publicsite' HTML. Guides that require product-specific HTML are required to customize both XSLT and CSS as necessary, but this gives them the standard presentation and functionality to start with. |
||
#17 | 12806 | eedwards |
Retire the mechanism for selecting the stylesheet for 'profiling', since it only worked by accident and it is unnecessary to do this differently for the various output formats. The path to profile.xsl is now specified in global.properties. This should have no effect on production of HTML or PDF for any guide. |
||
#16 | 12799 | eedwards |
#review-919318 Updates to the CmdRef to replace links to our www.perforce.com hosted documentation to be tied to a specific release. The thinking is that this should make the links more durable within products that include HTML docs. A future changelist will apply these changes to the rest of the server docs. |
||
#15 | 12789 | eedwards |
Upgrade the doc build process so that guide XML is pre-processed, filtering include paths to point to the correct common XML directory, and to be aware of where guides are when files such as appendices are shared between guides. This facilitates building of translated guides, which have a more nested directory structure that broke assumptions about common assets. All DocBook guides have been updated to use the filtered path identifiers. Also includes minor cleanup of commented out legal info, tidy of the root node attributes, inclusion of a Vim modeline, etc. This change also retires the original build infrastructure assets, which should be no problem since all of the guides that continued to use these have been updated to use the filtered paths that point to the current infrastructre asset path(s). |
||
#14 | 12788 | eedwards |
Improve PDF doc generation by using a dynamic path for font embedding within the FOP configuration. This should help with docs that live outside of //depot/main/p4-doc/manuals (such as P4Convert) |
||
#13 | 12776 | eedwards |
#review-851775 Updates to the HTML presentation: - remove the double DOCTYPE declarations. - revise markup so that the content is no longer in an immovable container. This should allow the scroll position to be maintained by the browser and work as expected after users navigate within a page and then use the browser's back button. - rename the generated search index file to 'index.js' to avoid a mimetype issue. Also, made the search code tolerant of a missing index.js. - fix scrolling to targeted locations in a guide by applying an offset to the scroll to move the target out from under the header, and to animate the scroll. |
||
#12 | 12757 | eedwards |
Pass the "ulink.show" parameter through to XSL processing, so guides can control whether external links emit the URL. |
||
#11 | 12756 | eedwards | Re-introduce original image path filtering for HTML output. | ||
#10 | 12747 | eedwards |
Add a mechanism to automatically label the top-level items in the sidebar TOC. This is disabled by default, and can be enabled by setting webhelp.autolabel=1 in guides that want it. |
||
#9 | 12738 | eedwards |
Infrastructure updates to support new Swarm DocBook documentation: - Strip out XSLTHL; it does a poor job of highlighting the kinds of syntax included in our documentation, and it does an awful job when code to be highlighted contains other markup, such as xref, link, or replaceable. - Add in google-code-prettify (from Swarm) so that generated HTML has fairly decent syntax highlighting for many of the code examples we use. Further work on syntax highlighting, particularly for PDF output, is required. - Disable TOC generation in HTML; the HTML template already includes the full TOC as a sidebar on every page. - Update the xmlns attribute and image URL filtering. - Fix a bug in HTML page title XSL that often prevented the current section title from being included. This was more obvious in the Swarm documentation which chunks into pages by section, rather than by chapter. - Update the HTML indexer to process multiple HTML files in one pass for performance, and overall simplify the code structure. - Adjust sidebar TOC activation logic to allow Bootstrap's scrollSpy code to work with section-based chunking. - Re-introduce the "brand" markup in the HTML doc heading so that Swarm's documentation can include its logo. Other guides can do so if required, but none have been updated to do so yet. - Add facility for guide-specific custom javacsript inclusion. - Add facility to apply custom CSS classes to images in documentation. This is used in Swarm documentation to provide thumbnail, popup, and "framed" images. - Adjust xref and link text to just report the chapter or section name, without the preamble text, for example: "the section called". - Add <replaceable role="bold"> to provide a second kind of emphasis to programlistings. - Added a subtle color to <filename> content, to help distinguish from other literal text. - Removed the separator rule from the first section heading while chunking by section. - Added Swarm's orderedlist styling so that each numbered item has a circle around the number and a vertical bar indicating the extend of the item. - Added a visual indicator when a link points to an external document. - Rewrote the javascript search code to search for exact and fuzzy terms matches, as well as phrases. Relevance scoring is included, but likely needs some fine tuning to suit our documentation. |
||
#8 | 12737 | eedwards |
Add a step to the asset copying task that makes a copy of the guide-specific XSL file, replacing @p4-assets-dir@ with the runtime property value. This facilitates building documentation outside of the p4-doc depot hierarchy. As the copied XSL lives in the same directory as the original, there should be no effect for any existing XSL files. A future changelist will update guide-specific XSL files to include the property marker for consistency/flexibility. |
||
#7 | 12734 | eedwards |
Replace the Java-based HTML indexer with a Python-based one. The Java-based HTML indexer was based on stemming, which can reduce the size of the index notably. However, stemming producespoor search behaviour, and is language specific. For example, the word 'documentation' has a stem of 'document'. When a user searches for 'docu', 'document' is not found. Also, all punctuation was stripped, making searches for IP addresses or depot paths impossible. The Python-based indexer collects all whitespace-separated tokens. The resulting index is around 10% larger than the stemmed index, but permits much more reasonable results, particularly while the user is still typing in search terms. The Python-based indexer should be cross-platform, but has to date only been tested on Mac OSX. It should work as-is on Linux, but further work may be required on Windows or other platforms. Also, there is room for optimization, particularly when a large number of HTML documents are to be indexed. Searching multiple terms is possible, and each HTML page must match all entered terms. There is nothing fancy about handling the search terms, no conjunctions, phrase searching, etc. Depending on user feedback, we may need to add more sophistication in the future. Included in this change: - the Python indexer - removed use of Java-based indexer from common build.xml and applied the Python indexer - added additional image src filtering - better build commentary in certain targets - rewrote the client-side searching - fixed the content of the HTML <title> tags to be '<chapter> // <book>', or just '<book>' when necessary. Search results strip off the ' // <book>' to be concise. - identify results as 'pages' rather than results, as each page may contain multiple matches. - results now indicate how many matches to expect on each page. - re-enabled indexing/search for CmdRef, P4API, P4Dist, and P4Guide. |
||
#6 | 12733 | eedwards |
Add more xmlns attribute cleanup, and adjust how included images get processed. |
||
#5 | 12728 | eedwards |
Upgrade ANT doc build infrastructure to assemble PDFs: - remove non-namespaced DocBook source and add namespaced DocBook source. - add Apache FOP 1.1 - copy fonts, images, XSL into _build, establishing new asset structure. The original structure remains until all guides using it can be upgraded, and several other issues can be resolved. - updated build.xml to allow for per-target build properties. - upgraded the P4SAG to use the new infrastructure. - tweaked admonition presentation in PDFs to remove admonition graphics, and resemble closely the presentation used in the new HTML layout, including the same colors. With these changes, building PDFs involves using a shell, navigating into the guide's directory (just P4SAG for now), and executing "ant pdf". Issues still to be resolved: - PDF generation encounters several warnings about missing fonts (bold versions of Symbol and ZapfDingbats), and a couple of locations where the page content exceeds the defined content area. - Due to issues within Apache FOP, PDF generation emits a substantial amount of output that is not easily suppressed without losing important warning information. - Apache FOP's interface to ANT does not expose a way to set the font base directory. The current configuration does work under Mac OSX, but further testing on Windows will need to be done to determine if the relative paths defined continue to work. The workaround is for Windows users to customize the fop-config.xml to provide absolute system paths to the required fonts. - HTML generation needs further browser testing, and exhibits broken navigation on iOS browsers within the TOC sidebar. - A number of PDF and HTML presentation tweaks still need to be made, for example: sidebars, gui* DocBook tags, whitespace, section separation, etc. |
||
#4 | 12720 | eedwards |
Apply better organization for DocBook transformation assets. In the future, other output target assets will appear as peers of webhelp, within the assets directory. |
||
#3 | 12718 | eedwards |
WebHelp transformation improvements: - consolidate the Java indexer's output files into a single file to reduce HTTP requests, and tidy up the search assets the indexer created - move the search interface and results into their own pane on the right side of the display - make search incremental as users type - replace existing navigation links with a TOC sidebar that is displayed when the browser is wide enough, or use a footer with prev/next links when the browser is too narrow. In the narrow presentation, the TOC sidebar can be toggled open. - Various improvements to colours, formatting, at various browser sizes. |
||
#2 | 12717 | eedwards |
Initial prototype of new HTML generation intended to exist on the Perforce public web site. The updates features a more responsive design, removal of frames, styling improvements. More work needs to be done to ensure robust presentation across various devices, and further design tweaks may be required once various stakeholders get a chance to have a look. Future infrastructure work will need to be done: - incorporate PDF generation - some organizational tweaks to make additional output targets easy to add - HTML validation assets need to be added/incorporated |
||
#1 | 12716 | eedwards |
Initial checkin of infrastructure to process DocBook XML into WebHelp format. The purpose of this change is to lay the groundwork that will allow all published Perforce documentation to be converted to HTML (and eventually PDF and other formats) in a consistent manner, independent of tools, and eventually allow for automated documentation builds. The latest versions of DocBook (1.78.1), Saxon (6.5.5), Xalan-J (2.7.1), and XSLTHL (2.1.0) are included, as well as generic customization capability and per-guide customizations. More work needs to be done to the customization layers to fully support their use from an XML authoring tool, such as oXygen, which will appear in a future change. Note: This change only includes configuration to build WebHelp for the P4SAG. Further work is required before the infrastructure can be applied to other guides. WARNING: For anyone using oXygen to produce WebHelp, there is a known incompatibility: <imagedata> tags in oXygen are verified for file existence, and the HTML is subsequently patched to resolve to the output directory. The non-oXygen WebHelp generation does not include the patch operation, so images are broken. The <imagedata> can be updated to indicate the relative path in the output directory, but then the oXygen transformation will fail. This will be fixed in a future change. |