| <?xml version="1.0"?> |
| <project name="hsqldb-ant-docbook" default="gen-docs" |
| xmlns:ivy="antlib:org.apache.ivy.ant"> |
| <!-- |
| USAGE |
| Purpose of this build file is to generate Whole HTML, Chunked HTML, |
| and PDF DocBook output documents from DocBook source located under a |
| doc-src subdirectory. |
| |
| Must have Ivy v. 2.0 or later in Ant invocation CLASSPATH. |
| We suggest that you change-control a copy if the Ivy jar file in |
| the bootstrap-libs subdirectory, so things will work according to the |
| displayed message below (search below for "bootstrap-libs"). |
| |
| Normally you will "import" this file into your main Ant build file like |
| <import file="build-docbook.xml"/> |
| or, you can invoke targets in this file directly like |
| ant -f build-docbook.xml... |
| |
| OVERRIDING Ant properties used in this file: |
| See inline instructions below for properties that you want to effect |
| only this build file. |
| For more general changes (say you want "javac.debug" to effect your own |
| build file as well as this one), set them however you want in your |
| parent Ant build file (perhaps by loading a "build.properties" or |
| "local.properties" file). |
| --> |
| |
| <!-- Since the main HSQLDB build file imports this one, relative property |
| file specifications must be relative to the project root, not build/ --> |
| |
| <!-- Put local env property changes in this NON-CHANGE-CONTROLLED file: --> |
| <property file="build/local-docbook.properties"/> |
| <!-- For change-controlled (by your project) ant-docbook-specific props: --> |
| <property file="build/docbook.properties"/> |
| |
| <property name="oasis.stylesheet.url" |
| value="http://docbook.sourceforge.net/release/xsl-ns/current"/> |
| <!-- IMPORTANT: This value must exactly match the network href values in |
| our *.xsl files! --> |
| |
| <!-- See |
| http://xml.apache.org/commons/components/resolver/resolver-article.html#ctrlresolver |
| about these xml.catalog.* settings for the Xml Commons resolver. |
| The docs say to use values yes/no for booleans, instead of true/false. |
| --> |
| <property name="xml.catalog.verbosity" value="0"/> |
| <!-- BEWARE: The verbosity setting seems to not work for some combination |
| of settings. Haven't figured out what combo, but setting it to 10 has no |
| effect for our particular setup. --> |
| <property name="xml.catalog.files" |
| value="${basedir}/stylesheets/rng-catalog.xml"/> |
| <property name="xml.catalog.prefer" value="public"/> |
| <property name="xml.catalog.allowPI" value="yes"/> |
| <property name="xml.catalog.staticCatalog" value="yes"/> |
| <property name="ivy.dep.file" value="build/ivy.xml"/> |
| <property name="distro.baseurl" value="http://hsqldb.org/doc/2.0"/> |
| |
| <property name="docoutput.path" value="doc"/> |
| <property name="javac.debug" value="true"/> |
| <property name="java.threadstacksize" value="1M"/> |
| <!-- TODO: Once our repository is set up, change the repos.url value here --> |
| <property name="repos.url" value="http://pub.admc.com/lib-repos"/> |
| <property name="dbxirng.url" |
| value="http://www.docbook.org/xml/5.0/rng/docbook.rng"/> |
| <!-- The "xi" variant supports Xinclude --> |
| <property name="html.path" value="stylesheets/html.xsl"/> |
| <property name="chunk.path" value="stylesheets/chunk.xsl"/> |
| <property name="fo.path" value="stylesheets/fo.xsl"/> |
| <!-- Set nsstylebase.url, in your .properties file, to your local filesystem |
| or local http server location for the DocBok style sheets. |
| That makes the XSLT transformations execute much faster than when |
| pulling the sheets from OASIS Internet site. |
| Example transform. times: 34 s. vs. 1:49. |
| --> |
| <property name="nsstylebase.url" value="UNSET_STYLEBASE"/> |
| <!-- Without setting a default value, some error messages could contain the |
| misleading string "${nsstylebase.url}" in cases where user does not set a |
| value and resolution fails (not that there will be a resolution failure, |
| since this setting is optional). --> |
| <property name="dbcentx.url" value="UNSET_STYLEBASE"/> |
| <!-- ditto about the default value --> |
| |
| <target name="fetch-images" |
| description="Fetch stock DocBook image files from Internet"> |
| <echo>Copy the images directory from the latest stable version of the |
| docbook-xsl-ns package to |
| '${basedir}/doc-src/images/db'. docbook-xsl-ns is |
| available for download from the DocBook project at |
| http://sourceforge.net/packages/docbook. |
| We'll do this automatically for you once Ant has a task to transfer |
| entire directories of files.</echo> |
| </target> |
| |
| <target name="regen-docs" |
| description="Clean and regen project DocBook docs. N.b this wipes javadocs too!" |
| depends="clean-docs, gen-docs"/> |
| |
| <property name="_for.automation.blurb" |
| value="If you want to automate the antcalls and you don't mind using |
| Ant-contrib or Antelope, you can use one of their 'for' tasks with a DirSet."/> |
| |
| <target name="gen-docs"> |
| <fail>You must implement your own "gen-docs" target by editing |
| "build-docbook.xml" or overriding it in your own build file which imports |
| "build-docbook.xml". |
| Your "gen-docs" target must depend on -gen-docs-setup, do an "antcall" of |
| "docbook-transform" for each doc.name, then call -gen-docs-complete. |
| |
| ${_for.automation.blurb}</fail> |
| </target> |
| |
| <target name="validate-docs"> |
| <fail>You must implement your own "validate-docs" target |
| by editing "build-docbook.xml" or overriding it in your own build file which |
| imports "build-docbook.xml". |
| Your "validate-docs" target must do an "antcall" of "validate-doc" for each |
| doc.name. |
| |
| ${_for.automation.blurb}</fail> |
| </target> |
| |
| <target name="-gen-docs-setup" depends="refresh-verbatim"/> |
| |
| <target name="-gen-docs-complete"> |
| <!-- This is the highest-maintenance target of this build file. |
| Must update the copy and fixcrlf filesets to copy exactly what |
| needs to go to doc output branch, and enforce EOLs in all text files. |
| The dependsets elsewhere in this file use targetfilesets, not |
| targetfilelists, so shouldn't need maintenance there. |
| |
| IMPORTANT: FOR ALL copys and fixcrlfs, DO NOT USE |
| preservelastmodified, as that will defeat our dependsets. |
| |
| Don't do anything with apidocs, since those are handled by |
| javadoc-specific tasks. |
| --> |
| |
| <!-- First, just binaries. We enforce EOLs for all others --> |
| <copy todir="${docoutput.path}"> |
| <!-- Fileset pretty simple, since the binaries always need to be |
| served to end users. --> |
| <fileset dir="doc-src" |
| excludes="**/.*, **/*.txt, **/entities/**, apidocs/**, |
| **/*.xml, **/*.java, **/*.sql, **/*.cfg, **/*.css, |
| **/*.ent, **/*.rc, **/*.html, **/*.properties"/> |
| </copy> |
| |
| <!-- *.txt and *.xml because *.txt are speficially not copied from document |
| base dirs and *.xml not from root or document base dirs, |
| because these files are used for document authorship and management.--> |
| <fixcrlf destdir="${docoutput.path}" eol="crlf" |
| encoding="UTF-8" srcdir="doc-src" |
| includes="verbatim/**/*.txt, images/**/*.txt" |
| excludes="**/.*"/> |
| <fixcrlf destdir="${docoutput.path}" eol="crlf" |
| encoding="UTF-8" srcdir="doc-src" |
| excludes="**/.*, verbatim/**, images/**, **/entities/**, |
| */*.txt, apidocs/**, readme-template.txt" |
| includes="**/*.txt"/> |
| <fixcrlf destdir="${docoutput.path}" eol="lf" |
| encoding="UTF-8" srcdir="doc-src" |
| includes="verbatim/**/*.xml, images/**/*.xml" |
| excludes="**/.*"/> |
| <fixcrlf destdir="${docoutput.path}" eol="lf" |
| encoding="UTF-8" srcdir="doc-src" |
| excludes="**/.*, verbatim/**, images/**, **/entities/**, |
| *.xml, */*.xml" |
| includes="**/*.xml"/> |
| |
| <!-- All remaining text files --> |
| <fixcrlf destdir="${docoutput.path}" eol="lf" |
| encoding="UTF-8" srcdir="doc-src" |
| excludes="**/.*, **/entities/**, apidocs/**" |
| includes="**/*.java, **/*.sql, **/*.cfg, **/*.css, |
| **/*.rc, **/*.properties"/> |
| <!-- To allow substitution of ant-variables like ${x} in any of the text |
| files above, just move that file type from the fixcrlf above to the |
| copy below. --> |
| <copy todir="${docoutput.path}"> |
| <fileset dir="doc-src" excludes="**/.*, **/entities/**, apidocs/**" |
| includes="**/*.html"/> |
| <filterchain> |
| <expandproperties/> |
| <fixcrlf eol="lf" encoding="UTF-8"/> |
| </filterchain> |
| </copy> |
| </target> |
| |
| <target name="docbook-transform" depends="-fop-setup" |
| description="Generate DocBook output for specified source doc"> |
| <fail unless="doc.name" |
| message="Ant property 'doc.name' is required by target 'docbook-transform'."/> |
| <available property="_htmlstyle.present" type="file" file="${html.path}"/> |
| <available property="_chunkstyle.present" type="file" file="${chunk.path}"/> |
| <available property="_fostyle.present" type="file" file="${fo.path}"/> |
| <fail unless="_htmlstyle.present" |
| message="DocBook 5 HTML style sheet missing: ${html.path}"/> |
| <fail unless="_chunkstyle.present" |
| message="DocBook 5 Chunk HTML style sheet missing: ${chunk.path}"/> |
| <fail unless="_fostyle.present" |
| message="DocBook 5 FO style sheet missing: ${fo.path}"/> |
| |
| <dependset> |
| <srcfileset dir="doc-src" excludes="**/.*, *_lic.txt, readme*, index.html" |
| includes="*.*, entities/**, images/**, verbatim/**"/> |
| <!-- Remove *_lic.txt from excludes above and below if we add any |
| reference to license files from any of our DocBook documents. |
| --> |
| <targetfileset dir="tmp/doc-work"/> |
| <targetfileset dir="${docoutput.path}" |
| excludes="zaurus/**, apidocs/**, readme*, index.html, *_lic.txt"/> |
| </dependset> |
| <dependset> |
| <srcfileset dir="doc-src/${doc.name}" excludes="**/.*"/> |
| <targetfileset dir="${docoutput.path}/${doc.name}"/> |
| <targetfilelist dir="tmp/doc-work/${doc.name}" files="${doc.name}.fo"/> |
| </dependset> |
| <dependset> |
| <srcfilelist dir="tmp/doc-work/${doc.name}" files="${doc.name}.fo"/> |
| <targetfilelist dir="${docoutput.path}/${doc.name}" |
| files="${doc.name}.pdf"/> |
| </dependset> |
| <available property="skip.html" type="file" value="transform.skip" |
| file="${docoutput.path}/${doc.name}/${doc.name}.html"/> |
| <available property="skip.chunk" type="file" value="transform.skip" |
| file="${docoutput.path}/${doc.name}/index.html"/> |
| <available property="skip.fo" type="file" value="transform.skip" |
| file="${docoutput.path}/${doc.name}/${doc.name}.fo"/> |
| <available property="skip.pdf" type="file" value="fop.skip" |
| file="${docoutput.path}/${doc.name}/${doc.name}.pdf"/> |
| <property name="skip.html" value="dummy"/> |
| <property name="skip.chuk" value="dummy"/> |
| <property name="skip.pdf" value="dummy"/> |
| |
| <antcall target="-transform"> |
| <param name="style.path" value="${html.path}"/> |
| <param name="output.base" |
| value="${docoutput.path}/${doc.name}/${doc.name}.html"/> |
| <param name="html.format" value="true"/> |
| <param name="${skip.html}" value="true"/> |
| </antcall> |
| <antcall target="-transform"> |
| <param name="style.path" value="${chunk.path}"/> |
| <param name="output.base" |
| value="${docoutput.path}/${doc.name}/dummy.html"/> |
| <param name="html.format" value="true"/> |
| <param name="${skip.chunk}" value="true"/> |
| </antcall> |
| <fixcrlf eol="lf" encoding="UTF-8" srcdir="doc/${doc.name}" |
| includes="*.html"/> <!-- Make output platform-independent --> |
| <antcall target="-transform"> |
| <param name="style.path" value="${fo.path}"/> |
| <param name="output.base" value="tmp/doc-work/${doc.name}/${doc.name}.fo"/> |
| <param name="fop.format" value="true"/> |
| <param name="${skip.fo}" value="true"/> |
| </antcall> |
| <antcall target="-fop"> |
| <param name="${skip.pdf}" value="true"/> |
| </antcall> |
| </target> |
| |
| <target name="-fop" unless="fop.skip"> |
| <fop format="application/pdf" basedir="doc-src/${doc.name}" |
| fofile="tmp/doc-work/${doc.name}/${doc.name}.fo" |
| outfile="${docoutput.path}/${doc.name}/${doc.name}.pdf"/> |
| <!-- basedir tells base location of image files --> |
| <!-- The fop tasks goes out to http://docbook.sourceforge.net to |
| fetch stuff --> |
| </target> |
| |
| <target name="-transform" depends="-ivy-setup" unless="transform.skip"> |
| <fail unless="distro.baseurl" |
| message="Ant property 'distro.baseurl' is required by target '-transform'."/> |
| <fail unless="doc.name" |
| message="Ant property 'doc.name' is required by target '-transform'."/> |
| <available file="${style.path}" type="file" property="_sheet.present"/> |
| <fail unless="_sheet.present" |
| message="Missing style sheet '${style.path}'"/> |
| <available file="doc-src/${doc.name}/${doc.name}.xml" type="file" |
| property="_srcxml.present"/> |
| <fail unless="_srcxml.present" |
| message="Missing DocBook source document 'doc-src/${doc.name}/${doc.name}.xml'"/> |
| |
| <mkdir dir="tmp/doc-work/${doc.name}"/> |
| <echo file="tmp/doc-work/${doc.name}/dynamic.ent"><!--Dynamically generated Entity Values loaded by a catalog for document |
| '${doc.name}' --> |
| |
| <!ENTITY doc_basename "${doc.name}"> |
| <!ENTITY distro_baseurl "${distro.baseurl}"> |
| </echo> |
| |
| <ivy:cachepath conf="xalan" pathid="xalan.cpref"/> |
| <xslt style="${style.path}" basedir="doc-src/${doc.name}" |
| in="doc-src/${doc.name}/${doc.name}.xml" |
| out="${output.base}" classpathref="xalan.cpref"> |
| <xmlcatalog classpathref="xalan.cpref" id="cat.ref"> |
| <!-- WOULD MUCH PREFER TO DEFINE CATALOG EXTERNALLY. |
| Unfortunately, Ant's xmlcatalog is not seeing Apache's XML resolver. |
| --> |
| |
| <!-- IMPORTANT! *************************************** |
| You must define Catalog mappings/replacements used in all of |
| your DocBook source right here, plus those needed in the validation |
| step need a duplicate entry in stylesheets/rng-catalog.xml. |
| Ant's xmlcatalog task is pretty limiting. No support for prefixes, |
| and external XML Commons Resolver and external catalog files |
| support are broken. |
| IMPORTANT! *************************************** --> |
| <dtd publicId="-//OASIS/ENTITIES DocBook Character Entities V4.5//EN" |
| location="${dbcentx.url}"/> |
| <entity location="${nsstylebase.url}/html/docbook.xsl" |
| publicId="${oasis.stylesheet.url}/html/docbook.xsl"/> |
| <entity location="${nsstylebase.url}/html/chunk.xsl" |
| publicId="${oasis.stylesheet.url}/html/chunk.xsl"/> |
| <entity location="${nsstylebase.url}/fo/docbook.xsl" |
| publicId="${oasis.stylesheet.url}/fo/docbook.xsl"/> |
| <entity location="tmp/doc-work/${doc.name}/dynamic.ent" |
| publicId="-//HSQLDB/ENTITIES/DocSpecificDynamicEntities"/> |
| </xmlcatalog> |
| <!-- There is probably no reason to use if/unless to exclude |
| format-specific or feature-specific settings, since settings |
| that don't apply to a specific stylesheet will just be ignored. --> |
| |
| <!-- N.b.: "use.extensions" turns on all other *.extension properties. |
| (The boolean *.extension ones, not *.*.extensions). |
| If you want any off with "use.extensions" on, you must |
| turn them off individually. |
| "fop1.extensions" an exception? See table at |
| http://www.sagehill.net/docbookxsl/InstallingAProcessor.html#SaxonExtensions |
| --> |
| <param name="use.extensions" expression="1"/> |
| |
| <param name="admon.graphics" expression="1"/> |
| <param name="admon.graphics.path" expression="../images/db/"/> |
| <param name="admon.graphics.extension" expression=".png"/> |
| <param name="css.decoration" expression="1"/> |
| <param name="annotation.support" expression="1"/> |
| <param name="navig.graphics" expression="1"/> |
| <param name="navig.graphics.path" expression="../images/db/"/> |
| <param name="table.borders.with.css" expression="1"/> |
| <param name="callouts.gaphics" expression="1"/> |
| <param name="callouts.gaphics.path" expression="../images/db/callouts/"/> |
| <param name="graphic.default.extension" expression=".png"/> |
| <param name="callouts.gaphics.extension" expression=".png"/> |
| <param name="html.stylesheet" expression="../docbook.css" |
| if="html.format"/> |
| <param name="shade.verbatim" expression="1" unless="html.format"/> |
| <param name="textdata.default.encoding" expression="ISO-8859-1"/> |
| <param name="use.id.as.filename" expression="1"/> |
| <param name="variablelist.as.table" expression="1"/> |
| <param name="index.on.type" expression="1"/> |
| <param name="body.start.indent" expression="0" if="fop.format"/> |
| <param name="table.cell.border.thickness" expression="1pt" |
| if="fop.format"/> |
| <param name="html.cellspacing" expression="0" if="html.format"/> |
| |
| <!-- With this on, formatting is terrible unless column content |
| lengths are symmetical --> |
| <param name="tablecolumns.extension" expression="0"/> |
| |
| <!-- Docbook-supplied png nav icons suck --> |
| <param name="navig.graphics.extension" expression=".png"/> |
| |
| <!-- "fop.extensions" for old FOP versions --> |
| <param name="fop1.extensions" expression="1" if="fop.format"/> |
| |
| <!-- This tells sections shown in single HTML pages, not levels shown in |
| the TOC, which is governed by "toc.section.depth" --> |
| <param name="chunk.section.depth" expression="0"/> |
| <!-- Defaults to 1 --> |
| |
| <!-- This has no effect, because the Docbook .xsl files specify the |
| output encoding literally. |
| <param name="chunker.output.encoding" expression="UTF-8"/> |
| --> |
| |
| <outputproperty name="encoding" value="UTF-8"/> |
| <outputproperty name="indent" value="yes"/> |
| </xslt> |
| </target> |
| |
| <target name="clean-docs" description="Remove all derived doc artifacts"> |
| <delete dir="tmp/doc-work"/> |
| <delete includeemptydirs="true"> |
| <fileset dir="${docoutput.path}" excludes="zaurus/**"/> |
| </delete> |
| </target> |
| |
| <target name="-fop-setup" depends="-ivy-setup"> |
| <ivy:cachepath conf="fop" pathid="fop.cpref"/> |
| <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop" |
| classpathref="fop.cpref"/> |
| </target> |
| |
| <target name="-ivy-setup"> |
| <available property="_ivy.present" classname="org.apache.ivy.ant.IvyTask"/> |
| <fail unless="_ivy.present"> |
| Add Ivy jar file to Ant CLASSPATH. |
| |
| Obtain a 2.x version of an Apache Ivy jar file (perhaps at |
| http://ant.apache.org/ivy/), and run a command like the following, changing the |
| jar file path to wherever you have it saved. For any Bourne shell (incl. Bash): |
| |
| export ANT_ARGS; ANT_ARGS='-lib $HOME/ivy-2.1.0.jar -noclasspath' |
| |
| OR for any CMD-like Windows shell: |
| |
| SET ANT_ARGS=-lib "%HOMEDRIVE%%HOMEPATH%/ivy-2.1.0.jar" -noclasspath</fail> |
| |
| <available property="_ivysettings.present" file="build/ivysettings.xml" |
| type="file"/> |
| <antcall target="-ensure-ivysettings"/> |
| <ivy:settings/> |
| </target> |
| |
| <target name="-ensure-ivysettings" unless="_ivysettings.present"> |
| <copy file="build/ivysettings-sample.xml" tofile="build/ivysettings.xml"/> |
| <echo>Just created a local 'ivysettings.xml' file for you. |
| Customize this as you wish and/or set Ivy properties (or any other |
| docbook-specific local build properties) in a 'local.properties' |
| file.</echo> |
| </target> |
| |
| <target name="validate-doc" unless="validation.skip" |
| depends="-validation-setup, -ivy-setup" |
| description="Validate specified DocBook source document"> |
| <fail unless="doc.name" |
| message="Ant property 'doc.name' is required by target 'validate'."/> |
| <ivy:resolve conf="msv"/> |
| <!-- The resolve downloads and makes the 3rd party libs accessed by |
| our admc-rs-msv jar file through its manifests classpath entry. --> |
| <ivy:cachepath conf="admc-rs-msv" pathid="admc-rs-msv.cpref"/> |
| <pathconvert property="jar.file" refid="admc-rs-msv.cpref"/> |
| <java fork="true" failonerror="true" |
| jar="${jar.file}" dir="doc-src/${doc.name}"> |
| <sysproperty key="xml.catalog.verbosity" |
| value="${xml.catalog.verbosity}"/> |
| <sysproperty key="xml.catalog.files" value="${xml.catalog.files}"/> |
| <sysproperty key="xml.catalog.prefer" value="${xml.catalog.prefer}"/> |
| <sysproperty key="xml.catalog.allowPI" value="${xml.catalog.allowPI}"/> |
| <sysproperty key="xml.catalog.staticCatalog" |
| value="${xml.catalog.staticCatalog}"/> |
| <jvmarg value="-Xss${java.threadstacksize}"/> |
| <arg value="-v"/> |
| <arg value="${dbxirng.url}"/> |
| <arg value="${doc.name}.xml"/> |
| </java> |
| </target> |
| |
| <target name="validation-help" depends="-ivy-setup" |
| description="Display advice about validating files manually"> |
| <ivy:resolve conf="msv"/> |
| <!-- The resolve downloads and makes the 3rd party libs accessed by |
| our admc-rs-msv jar file through its manifests classpath entry. --> |
| <ivy:cachepath conf="admc-rs-msv" pathid="admc-rs-msv.cpref"/> |
| <pathconvert property="jar.file" refid="admc-rs-msv.cpref"/> |
| <echo>'cd' to the directory containing the XML source files, and run |
| something like |
| java -Xss${java.threadstacksize} -Dxml.catalog.files=${xml.catalog.files} -jar ${jar.file} -v ${dbxirng.url} file.xml... |
| |
| See the XML Commons docs about the Java System Properties to |
| use for XML catalog resolution: |
| http://xml.apache.org/commons/components/resolver/resolver-article.html#ctrlresolver |
| </echo> |
| </target> |
| |
| <target name="refresh-verbatim" |
| description="Update files under doc-src/verbatim"> |
| <!-- It's good to apply preservelastmodified to stuff under doc-src/, |
| but be very careful if applying it to doc/..., since that could |
| break our dependsets. --> |
| <copy todir="doc-src/verbatim" preservelastmodified="true"> |
| <fileset dir="."> |
| <present targetdir="doc-src/verbatim"/> |
| </fileset> |
| </copy> |
| </target> |
| |
| <target name="-validation-setup"> |
| <fail message="Something is wrong. '-validation-setup' is abstract"/> |
| </target> |
| </project> |