Hello all,
I'm trying to set up locationmap-based user configuration of the
FOPNGSerializer, but I'm having some problems.
In the present output.xmap within the pdf plugin, FOPNGSerializer is
defined/initialised as follows:
<map:serializers default="fo2pdf">
<map:serializer name="fo2pdf"
src="org.apache.cocoon.blocks.fop.FOPNGSerializer" mime-
type="application/pdf" />
</map:serializers>
This is fine as long as you don't need to change any of the default
fonts. But as is discussed on the mailing lists from time to time, the
default fonts are not enough in some cases, and cause some or all of
your chars to appear as squares in the pdf document.[1]
The solution is to specify a font configuration file, and point the
FOPNGSerializer to it. This is done using a <user-config> element as a
daughter to the <map:serializer> element, like this:
<map:serializers default="fo2pdf">
<map:serializer name="fo2pdf"
src="org.apache.cocoon.blocks.fop.FOPNGSerializer" mime-
type="application/pdf">
<user-config>/Users/sjur/gtsvn/xtdoc/sd/src/documentation/
resources/fonts/config.xml</user-config>
</map:serializer>
</map:serializers>
The above specification works for me, but as you can see, the path is
hardcoded, and you have to change the output.xmap in the plugin. What
I would like to have is something like:
<map:serializers default="fo2pdf">
<map:serializer name="fo2pdf"
src="org.apache.cocoon.blocks.fop.FOPNGSerializer" mime-
type="application/pdf">
<user-config>{lm:pdf.user-config}</user-config>
</map:serializer>
</map:serializers>
combined with a locationmap match (in locationmap.xml in the plugin)
like:
<match pattern="pdf.user-config">
<select>
<location src="resources/fonts/config.xml"/>
</select>
</match>
The intended behavior is that if the config.xml file exists in the
project directory hierarchy, the path to it should be returned, and
the config file used. If there is NO such file defined, the
locationmap should return the empty string, as a <user-config> element
with no content will behave as nothing was specified, and fall back to
defaults. This is what most users would want.
But the locationmap instead returns:
/usr/local/forrest/build/plugins/org.apache.forrest.plugin.output.pdf/
pdf.user-config}
which of course triggers an error.
To me it looks like the locationmap, when nothing is found, returns
the path to the locationmap.xml file (excluding the filename),
combined with the last part of the lm: specification in the sitemap:
'pdf.user-config}'
An empty locationmap selection:
<match pattern="pdf.user-config">
<select>
<location src="resources/fonts/config.xml"/> <!-- no such
file, select the next one -->
<location src=""/> <!-- should return an empty string, but
returns a bad, non-empty string -->
</select>
</match>
returns the same bogus string as above.
Anybody any clue about what is going on? How can I get the intended
behaviour?
Sjur
[1] http://marc.info/?l=forrest-user&m=118525205328423&w=2