From 4b5d91f0ec9b79483fb30b01c99a67b47028fa95 Mon Sep 17 00:00:00 2001 From: Frank Steimke Date: Tue, 5 Nov 2024 07:53:08 +0100 Subject: [PATCH] Support managing or performing copy instructions for media files --- src/guide/xml/ch03.xml | 6 +- src/guide/xml/ch04.xml | 8 +- src/guide/xml/ref-params.xml | 38 ++++ src/guide/xml/ref-templates.xml | 46 +++++ src/guide/xml/references.xml | 6 + src/main/xslt/docbook.xsl | 24 +++ src/main/xslt/main.xsl | 1 + src/main/xslt/modules/copyinstructions.xsl | 209 +++++++++++++++++++++ src/main/xslt/modules/objects.xsl | 6 +- 9 files changed, 340 insertions(+), 4 deletions(-) create mode 100644 src/main/xslt/modules/copyinstructions.xsl diff --git a/src/guide/xml/ch03.xml b/src/guide/xml/ch03.xml index 7e2dc1d171..841a961684 100644 --- a/src/guide/xml/ch03.xml +++ b/src/guide/xml/ch03.xml @@ -516,11 +516,13 @@ subdirectory. the desired results for each combination of input and output arrangements. -Remember that in each case, the questions are: can the +Remember that in each case, the question is: can the stylesheets find the media files to query them and are the correct HTML references produced? Actually copying the media files from where they are in the source system to where they need to be in the HTML is -“not our problem.” +“not our problem.” +But the stylesheets can help to manage or even perform the task +of copying on demand. See copyinstructions-uri. diff --git a/src/guide/xml/ch04.xml b/src/guide/xml/ch04.xml index 3487d95765..f990225ab4 100644 --- a/src/guide/xml/ch04.xml +++ b/src/guide/xml/ch04.xml @@ -406,7 +406,13 @@ will be to media/image.png. The stylesheets are not responsible for actually copying the media files into the correct locations in the output. The stylesheets only generate the HTML files and the references. You must copy the images and other media with some -other process. +other process, +unless you expressly request further assistance. +If the parameter copyinstructions-uri is set accordingly, +a file with copy instructions is created at the specified location. +If the function file:copy from EXPATH File is available +(which is the case when you are using Saxon PE or EE), +the stylesheets will actually perform these instructions and copy the files. diff --git a/src/guide/xml/ref-params.xml b/src/guide/xml/ref-params.xml index 57031b4e50..9af67ac19d 100644 --- a/src/guide/xml/ref-params.xml +++ b/src/guide/xml/ref-params.xml @@ -904,6 +904,44 @@ this script will be added to the document. This script must contain the JavaScri necessary to support the theme controls. + + + + + xs:string? + copyinstructions-uri + + + + URI for a file with copy instructions for image files + + + Description + This parameter is empty by default. If this parameter contains a valid file path, this + means that support for copying image files is requested (should be media files in general, + but only image files are implemented yet). The level of support depends on whether the + file:copy function from EXPATH File is available during + the transformation: + + + When file:copy is available, the stylesheets will copy the files to the + place where the generated HTML files expects them. In this case, the file at + copyinstructions-uri is a logfile with one entry for each copy + operation. + + + When file:copy is not available, the file at + copyinstructions-uri contains instructions which should be executed in + some way independently of the stylesheets. The template + is responsible for writing the file, it + determines the format of the "instructions". You may want to override it to generate a + batch file in UNIX® or Windows style. + + + When it is given as a relative path, it will be resolved against the current working + directory (see ext:cwd). + + diff --git a/src/guide/xml/ref-templates.xml b/src/guide/xml/ref-templates.xml index da040b117d..9665421e92 100644 --- a/src/guide/xml/ref-templates.xml +++ b/src/guide/xml/ref-templates.xml @@ -624,6 +624,52 @@ to process footnotes at the bottom of a table. chunking is performed, this should provide links between pages. + + + + + t:write-copyinstructions + {http://docbook.org/ns/docbook/templates}write-copyinstructions + + + t:write-copyinstructions + Writes copy instructions for media files + template + + + Description + This template is responsible for writing copy instructions for media files. + It is called when the parameter copyinstructions-uri is set. + The default implementation simply writes an XML filewith an copy element for each media file. + You may want to overwrite this template to produce a batch file for UNIX or Microsoft Windows environment. + + It is called with three parameters: + + + instructions: map(xs:anyURI, xs:anyURI) + + A map with one entry for every copy destination of some media file. + key is destination, value is source of media file. + This ensures that we have only on copy instruction, even if the media file is references many times in the document. + + + + href: xs:anyURI + + the absolute path for the file that is generated by this template. + Calculated from copyinstructions-uri. + + + + mediaobject-basedirectory: xs:anyURI? + + The base directory for every media file. + Not required, only for documentation. + + + + + diff --git a/src/guide/xml/references.xml b/src/guide/xml/references.xml index 1456d77e43..b72e66188a 100644 --- a/src/guide/xml/references.xml +++ b/src/guide/xml/references.xml @@ -118,6 +118,12 @@ W3C Recommendation. 8 June 2017. xlink:href="https://www.w3.org/TR/xsl/">Extensible Stylesheet Language (XSL) Version 1.1. Anders Berglund, Editor. W3C Recommendation. 5 December 2006. + + + EXPATH File + File Module 1.0, + 20 February 2015. Christian Grün, Editor. + diff --git a/src/main/xslt/docbook.xsl b/src/main/xslt/docbook.xsl index 82f9d7341e..13c50a9a20 100644 --- a/src/main/xslt/docbook.xsl +++ b/src/main/xslt/docbook.xsl @@ -5,6 +5,7 @@ xmlns:err='http://www.w3.org/2005/xqt-errors' xmlns:ext="http://docbook.org/extensions/xslt" xmlns:f="http://docbook.org/ns/docbook/functions" + xmlns:ghost="http://docbook.org/ns/docbook/ephemeral" xmlns:fp="http://docbook.org/ns/docbook/functions/private" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:m="http://docbook.org/ns/docbook/modes" @@ -275,6 +276,24 @@ + + + + + + + + + + + + + + @@ -448,5 +467,10 @@ + + + + + diff --git a/src/main/xslt/main.xsl b/src/main/xslt/main.xsl index 2f30f8b5fd..ef725fe73f 100644 --- a/src/main/xslt/main.xsl +++ b/src/main/xslt/main.xsl @@ -59,6 +59,7 @@ + diff --git a/src/main/xslt/modules/copyinstructions.xsl b/src/main/xslt/modules/copyinstructions.xsl new file mode 100644 index 0000000000..4683cf3d01 --- /dev/null +++ b/src/main/xslt/modules/copyinstructions.xsl @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/xslt/modules/objects.xsl b/src/main/xslt/modules/objects.xsl index 70c8b10094..07640a644d 100644 --- a/src/main/xslt/modules/objects.xsl +++ b/src/main/xslt/modules/objects.xsl @@ -5,6 +5,7 @@ xmlns:ext="http://docbook.org/extensions/xslt" xmlns:f="http://docbook.org/ns/docbook/functions" xmlns:fp="http://docbook.org/ns/docbook/functions/private" + xmlns:ghost="http://docbook.org/ns/docbook/ephemeral" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:m="http://docbook.org/ns/docbook/modes" xmlns:map="http://www.w3.org/2005/xpath-functions/map" @@ -756,7 +757,9 @@ + + @@ -767,12 +770,13 @@ + - +