* added first draft of documentation
git-svn-id: svn+ssh://svn.synyx.de/var/svn/synyx/opensource/hera/trunk@3246 5a64d73e-33d6-4ccc-9058-23f8668ecac9
@@ -6,6 +6,10 @@
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
|
||||
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
|
||||
256
hera-core/src/doc/core.xml
Normal file
@@ -0,0 +1,256 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<chapter>
|
||||
<title>Core</title>
|
||||
|
||||
<section>
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>Host system provides a plugin interface providers have to implement.
|
||||
Core system is build to hold a container of instances of this interface
|
||||
and works with them.</para>
|
||||
|
||||
<example>
|
||||
<title>Basic example of plugin interface and host</title>
|
||||
|
||||
<programlisting language="java">/**
|
||||
* Interface contract for the providers to be implemented.
|
||||
*/
|
||||
public interface MyPluginInterface {
|
||||
|
||||
public void bar();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A host application class working with instances of the plugin
|
||||
* interface.
|
||||
*/
|
||||
public class HostImpl implements Host {
|
||||
|
||||
private List<MyPluginInterface> plugins;
|
||||
|
||||
/**
|
||||
* Setter to inject the plugins
|
||||
*/
|
||||
public void setPlugins(List<MyPluginInterface> plugins) {
|
||||
this.plugins = plugins;
|
||||
}
|
||||
|
||||
/**
|
||||
* Some business method actually working with the given plugins.
|
||||
*/
|
||||
public void someBusinessMethod() {
|
||||
|
||||
for (MyPluginInterface plugin : plugins) {
|
||||
plugin.bar();
|
||||
}
|
||||
}
|
||||
}</programlisting>
|
||||
</example>
|
||||
|
||||
<para>This is the way you would typically construct a host component in
|
||||
general. Leveraging dependency injection via setters allows flexible usage
|
||||
in a variety of environments. Thus you could easily provide a factory
|
||||
class that is able to lookup
|
||||
<interfacename>MyPluginInterface</interfacename> implementations from the
|
||||
classpath, instantiate them and inject them into HostImpl.</para>
|
||||
|
||||
<para>Using Spring as component container you could configure something
|
||||
like this:</para>
|
||||
|
||||
<example>
|
||||
<title>Configuring HostImpl with Spring</title>
|
||||
|
||||
<programlisting language="xml"><bean id="host" class="com.acme.HostImpl">
|
||||
<property name="plugins">
|
||||
<list>
|
||||
<bean class="MyPluginImplementation" />
|
||||
</list>
|
||||
</property>
|
||||
</bean></programlisting>
|
||||
</example>
|
||||
|
||||
<para>This is pretty much well known to Spring developers and let's us
|
||||
face the wall that this is rather static. Everytime you want to add a new
|
||||
plugin implementation instance you have to modify configuration of the
|
||||
core. Let's see how we can get this dance a little more.</para>
|
||||
</section>
|
||||
|
||||
<section id="core.collecting-beans">
|
||||
<title>Collecting Spring beans dynamically</title>
|
||||
|
||||
<para>With the <classname>BeanListBeanFactoryPostProcessor</classname>
|
||||
<productname>Hera</productname> provides a Spring container extension,
|
||||
that allows to lookup beans of a given type in the current
|
||||
<interfacename>ApplicationContext</interfacename> and register them as
|
||||
list under a given name. Take a look at the configuration now:</para>
|
||||
|
||||
<example>
|
||||
<title>Host and plugin configuration with Hera support</title>
|
||||
|
||||
<programlisting lang="" language="xml"><import resource="classpath*:com/acme/**/plugins.xml" />
|
||||
|
||||
<bean id="host" class="com.acme.HostImpl">
|
||||
<property name="plugins" ref="plugins" />
|
||||
</bean>
|
||||
|
||||
<bean class="org.synyx.hera.plugin.support.BeanListBeanFactoryPostProcessor">
|
||||
<property name="lists">
|
||||
<map>
|
||||
<entry key="plugins" value="org.acme.MyPluginInterface" />
|
||||
</map>
|
||||
</property>
|
||||
</bean></programlisting>
|
||||
|
||||
<programlisting language="xml"><!-- In a file called plugins.xml in the plugin project -->
|
||||
<bean class="MyPluginimplementation" /></programlisting>
|
||||
</example>
|
||||
|
||||
<para>You can see that we include a wildcarded configurationfile that
|
||||
allows plugin projects to easily contribute plugin implementations by
|
||||
declaring them as beans in configuration files matching the wildcarded
|
||||
path. If you use Spring 2.5 component scanning you don't have to use the
|
||||
import trick at all as Spring would detect the implementation
|
||||
automatically as long as it is annotated with <code>@Component</code>,
|
||||
<code>@Service</code> a.s.o.</para>
|
||||
|
||||
<para>The <classname>BeanListBeanFactoryPostProcessor</classname> in turn
|
||||
allows registering a map of lists to be created, where the maps entry key
|
||||
is the id under which the list will be registered and the entry's value is
|
||||
the type to be looked up.</para>
|
||||
|
||||
<note>
|
||||
<para>The design of the
|
||||
<classname>BeanListBeanFactoryPostProcessor</classname> might seem a
|
||||
little confusing at first (especially to set a map on a property named
|
||||
lists). This is due to the posibility to register more than one list to
|
||||
be looked up. We think about dropping this functionality for the sake of
|
||||
simplicity in future versions.</para>
|
||||
</note>
|
||||
|
||||
<simplesect>
|
||||
<title>A whole lotta XML - namespace to help!</title>
|
||||
|
||||
<para>Actually this already serves a lot of requirements we listed in
|
||||
<xref linkend="preface.context" />. Nevertheless the amount of XML to be
|
||||
written is quite large. Furthermore it's rather not intuitive to
|
||||
configure a bean id as key, and a type as value. We can heavily shrink
|
||||
the XML required to a single line by providing a Spring namespace
|
||||
boiling configuration down to this:</para>
|
||||
|
||||
<example>
|
||||
<title>Host configuration using the plugin namespace</title>
|
||||
|
||||
<programlisting language="xml"><import resource="classpath*:com/acme/**/plugins.xml" />
|
||||
|
||||
<bean id="host" class="com.acme.HostImpl">
|
||||
<property name="plugins" ref="plugins" />
|
||||
</bean>
|
||||
|
||||
<plugin:list id="plugins" class="org.acme.MyPluginInterface" /></programlisting>
|
||||
</example>
|
||||
|
||||
<para>Suggested you have added the namespace XSD into Eclipse and
|
||||
installed Spring IDE, you should get code completion on filling the
|
||||
class attribute.</para>
|
||||
</simplesect>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Plugin beans</title>
|
||||
|
||||
<para>Using plain interfaces and
|
||||
<classname>BeanListBeanFactoryPostProcessor</classname> offers an easy way
|
||||
to dynamically lookup beans in Spring environments. Nevertheless, very
|
||||
often you face the situation that you want to have dedicated access to a
|
||||
subset of all plugins, choose plugins by a given criteria or use a decent
|
||||
default plugin or the like. Thus we need a basic infrastructure interface
|
||||
for plugin interfaces to extend and a more sophisticated plugin
|
||||
container.</para>
|
||||
|
||||
<simplesect>
|
||||
<title>Plugin</title>
|
||||
|
||||
<para>Hera's central infrastructure interfacte is
|
||||
<interfacename>Plugin<S></interfacename>, where S defines the
|
||||
delimiter type you want to let implementations decide on, whether they
|
||||
shall be invoked or not. Thus the plugin implementation have to
|
||||
implement <methodname>supports(S delimiter)</methodname> to come to the
|
||||
decision. Consider the following example:</para>
|
||||
|
||||
<example>
|
||||
<title></title>
|
||||
|
||||
<programlisting language="java">public enum ProductType {
|
||||
|
||||
SOFTWARE, HARDWARE;
|
||||
}
|
||||
|
||||
public interface ProductProcessor extends Plugin<ProductType> {
|
||||
|
||||
public void process(Product product);
|
||||
}</programlisting>
|
||||
</example>
|
||||
|
||||
<para>This design would allow plugin providers to implement
|
||||
<methodname>supports(ProductType productType)</methodname> to decide
|
||||
which product types they want to process and provide actual processing
|
||||
logic in <methodname>process(Product product)</methodname>.</para>
|
||||
</simplesect>
|
||||
|
||||
<simplesect>
|
||||
<title>PluginRegistry</title>
|
||||
|
||||
<para>Using a <interfacename>List</interfacename> as plugin container as
|
||||
well as the <interfacename>Plugin</interfacename> interface you can now
|
||||
select plugins supporting the given delimiter. To not reimplement the
|
||||
lookup logic for common cases Hera provides a
|
||||
<classname>PluginRegistry<T extends Plugin<S>,
|
||||
S></classname> that provides sophisticated methods to access certain
|
||||
plugins:</para>
|
||||
|
||||
<example>
|
||||
<title>Usage of the PluginRegistry</title>
|
||||
|
||||
<programlisting language="java">PluginRegistry<ProductProcessor, ProductType> registry =
|
||||
PluginRegistry.create();
|
||||
|
||||
// Add plugin instances
|
||||
registry.add(new FooImplementation());
|
||||
|
||||
// Returns the first plugin supporting SOFTWARE
|
||||
registry.getPluginFor(ProductType.SOFTWARE);
|
||||
|
||||
// Returns the first plugin supporting SOFTWARE,
|
||||
// or DefaultPlugin if none found
|
||||
registry.getPluginFor(ProductType.SOFTWARE, new DefaultPlugin());
|
||||
|
||||
// Returns all plugins supporting HARDWARE,
|
||||
// throwing the given exception if none found
|
||||
registry.getPluginsFor(ProductType.HARDWARE, new MyException("Damn!");</programlisting>
|
||||
</example>
|
||||
</simplesect>
|
||||
|
||||
<simplesect>
|
||||
<title>Configuration and namespace</title>
|
||||
|
||||
<para>Similar to the
|
||||
<classname>BeanListBeanFactoryPostProcessor</classname> described in
|
||||
<xref linkend="core.collecting-beans" /> Hera provides a
|
||||
<classname>PluginRegistryBeanFactoryPostProcessor</classname> to
|
||||
automatically lookup beans of a dedicated type to be aggregated in a
|
||||
<classname>PluginRegistry</classname>. Note that the type has to be
|
||||
assignable to <interfacename>Plugin</interfacename> to let the registry
|
||||
work as expected.</para>
|
||||
|
||||
<para>Furthermore there is also an element in the namespace to shrink
|
||||
down configuration XML:</para>
|
||||
|
||||
<example>
|
||||
<title>Using the XML namespace to configure a registry</title>
|
||||
|
||||
<programlisting language="xml"><plugin:registry id="plugins" class="com.acme.MyPluginInterface" /></programlisting>
|
||||
</example>
|
||||
</simplesect>
|
||||
</section>
|
||||
</chapter>
|
||||
6
hera-metadata/src/doc/metadata.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<chapter>
|
||||
<title>Metadata</title>
|
||||
|
||||
<para>TODO</para>
|
||||
</chapter>
|
||||
116
pom.xml
@@ -64,6 +64,121 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- Docbook -->
|
||||
<plugin>
|
||||
<groupId>com.agilejava.docbkx</groupId>
|
||||
<artifactId>docbkx-maven-plugin</artifactId>
|
||||
<version>2.0.8</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>generate-html</goal>
|
||||
<goal>generate-pdf</goal>
|
||||
</goals>
|
||||
<phase>pre-site</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<inherited>false</inherited>
|
||||
<dependencies>
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>offo.hyphenation</groupId>
|
||||
<artifactId>fop-hyph</artifactId>
|
||||
<version>0.1</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.docbook</groupId>
|
||||
<artifactId>docbook-xml</artifactId>
|
||||
<version>4.4</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<sourceDirectory>
|
||||
${basedir}/src/doc
|
||||
</sourceDirectory>
|
||||
<targetDirectory>
|
||||
${basedir}/target/doc
|
||||
</targetDirectory>
|
||||
|
||||
<foCustomization>
|
||||
src/doc/layout/pdf/fo-pdf.xsl
|
||||
</foCustomization>
|
||||
|
||||
<htmlCustomization>
|
||||
src/doc/layout/html/fo-html.xsl
|
||||
</htmlCustomization>
|
||||
|
||||
<htmlStylesheet>
|
||||
resources/styles.css
|
||||
</htmlStylesheet>
|
||||
<chunkedOutput>true</chunkedOutput>
|
||||
|
||||
<fonts>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>normal</style>
|
||||
<weight>normal</weight>
|
||||
<embedFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiR__.ttf
|
||||
</embedFile>
|
||||
<metricsFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiR__.xml
|
||||
</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>italic</style>
|
||||
<weight>normal</weight>
|
||||
<embedFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiI__.ttf
|
||||
</embedFile>
|
||||
<metricsFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiI__.xml
|
||||
</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>normal</style>
|
||||
<weight>bold</weight>
|
||||
<embedFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiB__.ttf
|
||||
</embedFile>
|
||||
<metricsFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiB__.xml
|
||||
</metricsFile>
|
||||
</font>
|
||||
<font>
|
||||
<name>StellaLining</name>
|
||||
<style>italic</style>
|
||||
<weight>bold</weight>
|
||||
<embedFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiBI_.ttf
|
||||
</embedFile>
|
||||
<metricsFile>
|
||||
${basedir}/src/doc/layout/pdf/fonts/SteLiBI_.xml
|
||||
</metricsFile>
|
||||
</font>
|
||||
</fonts>
|
||||
|
||||
<preProcess>
|
||||
<copy todir="${basedir}/target/doc/images">
|
||||
<!-- Copy layout images -->
|
||||
<fileset dir="${basedir}/src/doc/layout/pdf/images" />
|
||||
<fileset dir="${basedir}/src/doc/layout/html/images" />
|
||||
<!-- Copy content images -->
|
||||
<fileset dir="${basedir}/src/doc/images" />
|
||||
</copy>
|
||||
<copy todir="${basedir}/target/doc/resources">
|
||||
<fileset dir="${basedir}/src/doc/layout/html/resources" />
|
||||
</copy>
|
||||
</preProcess>
|
||||
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
@@ -107,7 +222,6 @@
|
||||
<scmCommentPrefix> * [maven-release-plugin] - </scmCommentPrefix>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
|
||||
</plugins>
|
||||
</reporting>
|
||||
|
||||
168
src/doc/hera-reference.xml
Normal file
@@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY core SYSTEM "../../hera-core/src/doc/core.xml">
|
||||
<!ENTITY metadata SYSTEM "../../hera-metadata/src/doc/metadata.xml">
|
||||
]>
|
||||
<!-- book -->
|
||||
<book>
|
||||
<bookinfo>
|
||||
<title>Hera</title>
|
||||
|
||||
<subtitle>The smallest plugin system ever</subtitle>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Oliver</firstname>
|
||||
|
||||
<surname>Gierke</surname>
|
||||
|
||||
<affiliation>
|
||||
<jobtitle>Software Architect</jobtitle>
|
||||
|
||||
<orgname>Synyx GmbH & Co. KG</orgname>
|
||||
</affiliation>
|
||||
|
||||
<email>gierke@synyx.de</email>
|
||||
|
||||
<address>Karlstraße 68, 76137 Karsruhe, Germany</address>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<releaseinfo>V0.1</releaseinfo>
|
||||
|
||||
<pubdate>04.11.2008</pubdate>
|
||||
|
||||
<copyright>
|
||||
<year>2008</year>
|
||||
|
||||
<holder>Synyx GmbH & Co. KG</holder>
|
||||
</copyright>
|
||||
|
||||
<revhistory>
|
||||
<revision>
|
||||
<date>04.11.2008</date>
|
||||
|
||||
<author>
|
||||
<firstname>Oliver</firstname>
|
||||
|
||||
<surname>Gierke</surname>
|
||||
</author>
|
||||
|
||||
<revremark>Initial draft </revremark>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</bookinfo>
|
||||
|
||||
<preface>
|
||||
<title>Preface</title>
|
||||
|
||||
<section>
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>Building extensible architectures nowadays is a core principle to
|
||||
create maintainable applications. This is why fully fledged plugin
|
||||
environments like <glossterm><abbrev>OSGi</abbrev></glossterm> are so
|
||||
poular these days. Unfortunately the introduction of
|
||||
<glossterm><abbrev>OSGi</abbrev></glossterm> introduces a lot of
|
||||
complexity to projects.</para>
|
||||
|
||||
<para>Hera provides a more pragmatic approach to plugin development by
|
||||
providing the core flexibility of having plugin implementations
|
||||
extending a core system's functionality but of course not delivering
|
||||
core <abbrev>OSGi</abbrev> features like dynamic class loading or
|
||||
runtime installation and deployment of plugins. Although Hera thus is
|
||||
not nearly as powerful as <abbrev>OSGi</abbrev>, it servers little man's
|
||||
requirements to build a modular extensible application.</para>
|
||||
</section>
|
||||
|
||||
<section id="preface.context">
|
||||
<title>Context</title>
|
||||
|
||||
<para><itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>You want to build an extensible architecture minimizing
|
||||
overhead as much as possible</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>You cannot use OSGi as fully fledged plugin architecture for
|
||||
whatever reasons</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>You want to express extensibility by providing dedicated
|
||||
plugin interfaces</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>You want to extend the core system by simply providing an
|
||||
implementation of the plugin interface bundled in a JAR file and
|
||||
available in the classpath.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>(You use Spring in your application)</para>
|
||||
</listitem>
|
||||
</itemizedlist></para>
|
||||
|
||||
<para>The last point actually is not essential although Hera gains a lot
|
||||
of momentum in collaborative use with Spring.</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Technologies</title>
|
||||
|
||||
<simplesect>
|
||||
<title>Spring</title>
|
||||
|
||||
<para>Spring is the defacto standard application framework for Java
|
||||
applications. Its consistent programming model, easy configuration and
|
||||
wide support for all kinds of third party libraries makes it the first
|
||||
class citizen of application frameworks. Hera tightly integrates into
|
||||
Spring's component model and extends the core container with some
|
||||
custom functionality.</para>
|
||||
</simplesect>
|
||||
</section>
|
||||
</preface>
|
||||
|
||||
&core;
|
||||
|
||||
&metadata;
|
||||
|
||||
<glossary>
|
||||
<glossdiv>
|
||||
<title>O</title>
|
||||
|
||||
<glossentry>
|
||||
<glossterm>OSGi</glossterm>
|
||||
|
||||
<glossdef>
|
||||
<para>Open Services Gateway Initiative - a fully fledged plugin
|
||||
runtime environment on top of the Java VM - <ulink
|
||||
url="http://en.wikipedia.org/wiki/OSGi">http://en.wikipedia.org/wiki/OSGi</ulink>.</para>
|
||||
</glossdef>
|
||||
</glossentry>
|
||||
</glossdiv>
|
||||
|
||||
<glossdiv>
|
||||
<title>X</title>
|
||||
|
||||
<glossentry>
|
||||
<glossterm>XML</glossterm>
|
||||
|
||||
<glossdef>
|
||||
<para>eXtensible Markup Language</para>
|
||||
</glossdef>
|
||||
</glossentry>
|
||||
|
||||
<glossentry>
|
||||
<glossterm>XSD</glossterm>
|
||||
|
||||
<glossdef>
|
||||
<para>Xml Schema Definition</para>
|
||||
</glossdef>
|
||||
</glossentry>
|
||||
</glossdiv>
|
||||
</glossary>
|
||||
</book>
|
||||
89
src/doc/layout/html/fo-html.xsl
Normal file
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="us-ascii"?>
|
||||
<!--
|
||||
This is the XSL HTML configuration file for the Spring
|
||||
Reference Documentation.
|
||||
-->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
|
||||
|
||||
<xsl:import href="urn:docbkx:stylesheet"/>
|
||||
|
||||
<!--###################################################
|
||||
HTML Settings
|
||||
################################################### -->
|
||||
|
||||
<xsl:param name="html.stylesheet">html.css</xsl:param>
|
||||
|
||||
<!-- These extensions are required for table printing and other stuff -->
|
||||
<xsl:param name="use.extensions">1</xsl:param>
|
||||
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||
<xsl:param name="callout.extensions">1</xsl:param>
|
||||
<xsl:param name="graphicsize.extension">0</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Table Of Contents
|
||||
################################################### -->
|
||||
|
||||
<!-- Generate the TOCs for named components only -->
|
||||
<xsl:param name="generate.toc">
|
||||
book toc
|
||||
</xsl:param>
|
||||
|
||||
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Labels
|
||||
################################################### -->
|
||||
|
||||
<!-- Label Chapters and Sections (numbering) -->
|
||||
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||
<xsl:param name="section.autolabel" select="1"/>
|
||||
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||
|
||||
<!--###################################################
|
||||
Callouts
|
||||
################################################### -->
|
||||
|
||||
<!-- Use images for callouts instead of (1) (2) (3) -->
|
||||
<xsl:param name="callout.graphics">0</xsl:param>
|
||||
|
||||
<!-- Place callout marks at this column in annotated areas -->
|
||||
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Admonitions
|
||||
################################################### -->
|
||||
|
||||
<!-- Use nice graphics for admonitions -->
|
||||
<xsl:param name="admon.graphics">0</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Misc
|
||||
################################################### -->
|
||||
<!-- Placement of titles -->
|
||||
<xsl:param name="formal.title.placement">
|
||||
figure after
|
||||
example before
|
||||
equation before
|
||||
table before
|
||||
procedure before
|
||||
</xsl:param>
|
||||
<xsl:template match="author" mode="titlepage.mode">
|
||||
<xsl:if test="name(preceding-sibling::*[1]) = 'author'">
|
||||
<xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<span class="{name(.)}">
|
||||
<xsl:call-template name="person.name"/>
|
||||
<xsl:apply-templates mode="titlepage.mode" select="./contrib"/>
|
||||
<xsl:apply-templates mode="titlepage.mode" select="./affiliation"/>
|
||||
</span>
|
||||
</xsl:template>
|
||||
<xsl:template match="authorgroup" mode="titlepage.mode">
|
||||
<div class="{name(.)}">
|
||||
<h2>Authors</h2>
|
||||
<p/>
|
||||
<xsl:apply-templates mode="titlepage.mode"/>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
291
src/doc/layout/html/resources/styles.css
Normal file
@@ -0,0 +1,291 @@
|
||||
body {
|
||||
font-family: Verdana, Arial, monospace;
|
||||
text-align: justify;
|
||||
width: 900px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
a,a[accesskey ^="h"],a[accesskey ^="n"],a[accesskey ^="u"],a[accesskey ^="p"]
|
||||
{
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
p {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
p,dl,dt,dd,blockquote {
|
||||
color: #000000;
|
||||
margin-bottom: 3px;
|
||||
margin-top: 3px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
ol,ul,p {
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
p,blockquote {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
p.releaseinfo {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
p.pubdate {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
td {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
td,th,span {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
td[width ^="40%"] {
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
table[summary ^="Navigation header"] tbody tr th[colspan ^="3"] {
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h6,H6 {
|
||||
color: #000000;
|
||||
font-weight: 500;
|
||||
margin-top: 0;
|
||||
padding-top: 14px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
h2.title {
|
||||
font-weight: 800;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
h2.subtitle {
|
||||
font-weight: 800;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.firstname,.surname {
|
||||
font-size: 12px;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border: 1px black;
|
||||
empty-cells: hide;
|
||||
margin: 10px 0 30px 50px;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
div.table {
|
||||
margin: 30px 0 30px 0;
|
||||
border: 1px dashed gray;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
div .table-contents table {
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
div.table>p.title {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table[summary ^="Navigation footer"] {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border: 1px black;
|
||||
empty-cells: hide;
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table[summary ^="Note"],table[summary ^="Warning"],table[summary ^="Tip"]
|
||||
{
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border: 1px black;
|
||||
empty-cells: hide;
|
||||
margin: 10px 0px 10px -20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 4pt;
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
}
|
||||
|
||||
div.warning TD {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 90%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 100%;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
tt {
|
||||
font-size: 110%;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.navheader,.navfooter {
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.navfooter table {
|
||||
background-color: #eef;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 110%;
|
||||
padding: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: #CCCCCC;
|
||||
background-color: #eef;
|
||||
}
|
||||
|
||||
ul,ol,li {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #CCCCCC;
|
||||
border-width: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.variablelist {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.term {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.mediaobject {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.legalnotice {
|
||||
font-family: Verdana, Arial, helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
float: right;
|
||||
margin: 10px 0 10px 30px;
|
||||
padding: 10px 20px 20px 20px;
|
||||
width: 33%;
|
||||
border: 1px solid black;
|
||||
background-color: #F4F4F4;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.property {
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
}
|
||||
|
||||
a code {
|
||||
font-family: Verdana, Arial, monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
td code {
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
div.note * td,div.tip * td,div.warning * td,div.calloutlist * td {
|
||||
text-align: justify;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.programlisting .interfacename,.programlisting .literal,.programlisting .classname
|
||||
{
|
||||
font-size: 95%;
|
||||
}
|
||||
|
||||
.title .interfacename,.title .literal,.title .classname {
|
||||
font-size: 130%;
|
||||
}
|
||||
|
||||
/* everything in a <lineannotation/> is displayed in a coloured, comment-like font */
|
||||
.programlisting * .lineannotation,.programlisting * .lineannotation * {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.question * p {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.answer * p {
|
||||
font-size: 100%;
|
||||
}
|
||||
437
src/doc/layout/pdf/fo-pdf.xsl
Normal file
@@ -0,0 +1,437 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
|
||||
|
||||
<!-- Import standard docbook stylesheet -->
|
||||
<xsl:import href="urn:docbkx:stylesheet"/>
|
||||
|
||||
<!-- Import highlighting color codes -->
|
||||
<xsl:import href="highlight-fo.xsl"/>
|
||||
|
||||
|
||||
<xsl:param name="glossterm.auto.link">1</xsl:param>
|
||||
<xsl:param name="highlight.source">1</xsl:param>
|
||||
<xsl:param name="use.extensions">1</xsl:param>
|
||||
<xsl:param name="callouts.extension">1</xsl:param>
|
||||
|
||||
|
||||
<!-- Custom Title Page -->
|
||||
|
||||
<xsl:template name="book.titlepage.recto">
|
||||
<fo:block>
|
||||
<fo:table table-layout="fixed" width="175mm">
|
||||
<fo:table-column column-width="175mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell text-align="center">
|
||||
<fo:block font-size="22pt" font-weight="bold" padding-before="30mm">
|
||||
<xsl:value-of select="bookinfo/title"/>
|
||||
</fo:block>
|
||||
<fo:block font-size="14pt" padding="10mm">
|
||||
<xsl:value-of select="bookinfo/subtitle"/>
|
||||
</fo:block>
|
||||
<fo:block font-size="12pt" padding="10mm">
|
||||
<xsl:value-of select="bookinfo/releaseinfo"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell text-align="center">
|
||||
<fo:block font-size="12pt" padding="10mm" padding-top="40mm">
|
||||
<xsl:value-of select="bookinfo/pubdate"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell text-align="center">
|
||||
<fo:block>
|
||||
<fo:external-graphic src="file:target/doc/images/synyx-logo.tiff" width="70mm" height="auto" content-width="scale-to-fit" content-height="scale-to-fit" />
|
||||
</fo:block>
|
||||
<fo:block font-size="12pt" padding="10mm">
|
||||
<xsl:for-each select="bookinfo/authorgroup/author">
|
||||
<xsl:if test="position() > 1">
|
||||
<xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="firstname"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="surname"/>
|
||||
<xsl:text> (</xsl:text>
|
||||
<xsl:value-of select="affiliation/jobtitle"/>
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:value-of select="affiliation/orgname"/>
|
||||
<xsl:text>)</xsl:text>
|
||||
</xsl:for-each>
|
||||
</fo:block>
|
||||
<fo:block font-size="12pt" padding="10mm">
|
||||
<xsl:text>Copyright © </xsl:text>
|
||||
<xsl:value-of select="bookinfo/copyright/year" />
|
||||
</fo:block>
|
||||
|
||||
<fo:block font-size="10pt" padding="1mm">
|
||||
<xsl:value-of select="bookinfo/legalnotice"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!-- Prevent blank pages in output -->
|
||||
<xsl:template name="book.titlepage.before.verso">
|
||||
</xsl:template>
|
||||
<xsl:template name="book.titlepage.verso">
|
||||
</xsl:template>
|
||||
<xsl:template name="book.titlepage.separator">
|
||||
</xsl:template>
|
||||
|
||||
<!-- Header -->
|
||||
|
||||
<!-- More space in the center header for long text
|
||||
<xsl:attribute-set name="header.content.properties">
|
||||
<xsl:attribute name="font-family">
|
||||
<xsl:value-of select="$body.font.family"/>
|
||||
</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
-->
|
||||
|
||||
<!-- Custom Footer -->
|
||||
<xsl:template name="footer.content">
|
||||
<xsl:param name="pageclass" select="''"/>
|
||||
<xsl:param name="sequence" select="''"/>
|
||||
<xsl:param name="position" select="''"/>
|
||||
<xsl:param name="gentext-key" select="''"/>
|
||||
<xsl:variable name="Version">
|
||||
<xsl:value-of select="//bookinfo/title" />
|
||||
<!--
|
||||
<xsl:if test="//releaseinfo">
|
||||
<xsl:text>Product Oriented Import (</xsl:text><xsl:value-of select="//releaseinfo"/><xsl:text>)</xsl:text>
|
||||
</xsl:if>-->
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$sequence='blank'">
|
||||
<xsl:if test="$position = 'center'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:if>
|
||||
</xsl:when>
|
||||
<!-- for double sided printing, print page numbers on alternating sides (of the page) -->
|
||||
<xsl:when test="$double.sided != 0">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$sequence = 'even' and $position='left'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$sequence = 'odd' and $position='right'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$position='center'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<!-- for single sided printing, print all page numbers on the right (of the page) -->
|
||||
<xsl:when test="$double.sided = 0">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$position='center'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$position='right'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Table Of Contents -->
|
||||
|
||||
<!-- Generate the TOCs for named components only -->
|
||||
<xsl:param name="generate.toc">
|
||||
book toc,title
|
||||
</xsl:param>
|
||||
|
||||
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||
<xsl:param name="toc.section.depth">2</xsl:param>
|
||||
|
||||
<!-- Dot and Whitespace as separator in TOC between Label and Title-->
|
||||
<xsl:param name="autotoc.label.separator" select="'. '"/>
|
||||
|
||||
|
||||
<!-- Paper & Page Size -->
|
||||
|
||||
<!-- Paper type, no headers on blank pages, no double sided printing -->
|
||||
<xsl:param name="paper.type" select="'A4'"/>
|
||||
<xsl:param name="double.sided">0</xsl:param>
|
||||
<xsl:param name="headers.on.blank.pages">0</xsl:param>
|
||||
<xsl:param name="footers.on.blank.pages">0</xsl:param>
|
||||
|
||||
<!-- Space between paper border and content (chaotic stuff, don't touch) -->
|
||||
|
||||
<xsl:param name="region.before.extent">15mm</xsl:param>
|
||||
<xsl:param name="region.after.extent">10mm</xsl:param>
|
||||
|
||||
<xsl:param name="body.margin.top">10mm</xsl:param>
|
||||
<xsl:param name="body.margin.bottom">10mm</xsl:param>
|
||||
|
||||
<xsl:param name="page.margin.top">15mm</xsl:param>
|
||||
<xsl:param name="page.margin.bottom">15mm</xsl:param>
|
||||
|
||||
<xsl:param name="page.margin.outer">18mm</xsl:param>
|
||||
<xsl:param name="page.margin.inner">18mm</xsl:param>
|
||||
|
||||
<!-- No intendation of Titles -->
|
||||
<xsl:param name="title.margin.left">0pc</xsl:param>
|
||||
|
||||
<!-- Fonts & Styles -->
|
||||
|
||||
<!-- Left aligned text and no hyphenation -->
|
||||
<xsl:param name="alignment">justify</xsl:param>
|
||||
<xsl:param name="hyphenate">true</xsl:param>
|
||||
|
||||
<!-- Links -->
|
||||
<xsl:param name="xref.with.number.and.title" select="1"/>
|
||||
|
||||
<xsl:attribute-set name="xref.properties">
|
||||
<xsl:attribute name="color">
|
||||
<xsl:choose>
|
||||
<xsl:when test="self::ulink | self::xref">blue</xsl:when>
|
||||
<xsl:otherwise>inherit</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="text-decoration">
|
||||
<xsl:choose>
|
||||
<xsl:when test="self::ulink | self::xref">underline</xsl:when>
|
||||
<xsl:otherwise>inherit</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
|
||||
<!-- Default Font size -->
|
||||
<xsl:param name="title.font.family">StellaLining</xsl:param>
|
||||
|
||||
<xsl:param name="body.font.family">StellaLining</xsl:param>
|
||||
<xsl:param name="body.font.master">11</xsl:param>
|
||||
<xsl:param name="body.font.small">9</xsl:param>
|
||||
|
||||
<!-- Line height in body text -->
|
||||
<xsl:param name="line-height">1.3</xsl:param>
|
||||
|
||||
<!-- Monospaced fonts are smaller than regular text -->
|
||||
<xsl:attribute-set name="monospace.properties">
|
||||
<xsl:attribute name="font-family">
|
||||
<xsl:value-of select="$monospace.font.family"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="font-size">0.9em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Tables -->
|
||||
|
||||
<!-- The table width should be adapted to the paper size -->
|
||||
<xsl:param name="default.table.width">15.4cm</xsl:param>
|
||||
|
||||
<!-- Some padding inside tables -->
|
||||
<xsl:attribute-set name="table.cell.padding">
|
||||
<xsl:attribute name="padding-left">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">4pt</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Only hairlines as frame and cell borders in tables -->
|
||||
<xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
|
||||
<xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
|
||||
|
||||
<!-- Labels -->
|
||||
|
||||
<!-- Label Chapters and Sections (numbering) -->
|
||||
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||
<xsl:param name="section.autolabel" select="1"/>
|
||||
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||
|
||||
<!-- Titles -->
|
||||
|
||||
<!-- Chapter title size -->
|
||||
<xsl:attribute-set name="chapter.titlepage.recto.style">
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.8"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Why is the font-size for chapters hardcoded in the XSL FO templates?
|
||||
Let's remove it, so this sucker can use our attribute-set only... -->
|
||||
<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
|
||||
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:use-attribute-sets="chapter.titlepage.recto.style">
|
||||
<xsl:call-template name="component.title">
|
||||
<xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
|
||||
</xsl:call-template>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
|
||||
<xsl:attribute-set name="section.title.level1.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.5"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
<xsl:attribute-set name="section.title.level2.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.25"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
<xsl:attribute-set name="section.title.level3.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.0"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Titles of formal objects (tables, examples, ...) -->
|
||||
<xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Programlistings -->
|
||||
|
||||
<!-- Verbatim text formatting (programlistings) -->
|
||||
<xsl:attribute-set name="monospace.verbatim.properties">
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.small"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="verbatim.properties">
|
||||
<xsl:attribute name="keep-together.within-column">always</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">1em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.optimum">1em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">1em</xsl:attribute>
|
||||
<xsl:attribute name="border-color">#444444</xsl:attribute>
|
||||
<xsl:attribute name="border-style">solid</xsl:attribute>
|
||||
<xsl:attribute name="border-width">0.1pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="margin-right">0.5em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Shade (background) programlistings -->
|
||||
<xsl:param name="shade.verbatim">1</xsl:param>
|
||||
<xsl:attribute-set name="shade.verbatim.style">
|
||||
<xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Callouts -->
|
||||
|
||||
<!-- Use images for callouts instead of (1) (2) (3) -->
|
||||
<xsl:param name="callout.graphics">0</xsl:param>
|
||||
<xsl:param name="callout.unicode">1</xsl:param>
|
||||
|
||||
<!-- Place callout marks at this column in annotated areas -->
|
||||
<xsl:param name="callout.defaultcolumn">79</xsl:param>
|
||||
|
||||
<!-- Admonitions -->
|
||||
|
||||
<!-- Use nice graphics for admonitions
|
||||
|
||||
<xsl:param name="admon.graphics">'1'</xsl:param>
|
||||
<xsl:param name="admon.graphics.path">src/docbkx/resources/images/admons/</xsl:param>-->
|
||||
|
||||
<!-- Misc -->
|
||||
|
||||
<!-- Placement of titles -->
|
||||
<xsl:param name="formal.title.placement">
|
||||
figure after
|
||||
example before
|
||||
equation before
|
||||
table before
|
||||
procedure before
|
||||
</xsl:param>
|
||||
|
||||
<!-- Format Variable Lists as Blocks (prevents horizontal overflow) -->
|
||||
<xsl:param name="variablelist.as.blocks">1</xsl:param>
|
||||
|
||||
<!-- The horrible list spacing problems -->
|
||||
<xsl:attribute-set name="list.block.spacing">
|
||||
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- colored and hyphenated links -->
|
||||
<xsl:template match="ulink">
|
||||
<fo:basic-link external-destination="{@url}" xsl:use-attribute-sets="xref.properties" text-decoration="underline" color="blue">
|
||||
<xsl:choose>
|
||||
<xsl:when test="count(child::node())=0">
|
||||
<xsl:value-of select="@url"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:basic-link>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="link">
|
||||
<fo:basic-link internal-destination="{@linkend}" xsl:use-attribute-sets="xref.properties" text-decoration="underline" color="blue">
|
||||
<xsl:choose>
|
||||
<xsl:when test="count(child::node())=0">
|
||||
<xsl:value-of select="@linkend"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:basic-link>
|
||||
</xsl:template>
|
||||
|
||||
<!--
|
||||
<xsl:template match="xref">
|
||||
<fo:basic-link internal-destination="{@linkend}" xsl:use-attribute-sets="xref.properties" text-decoration="underline" color="blue">
|
||||
<xsl:choose>
|
||||
<xsl:when test="count(child::node())=0">
|
||||
<xsl:value-of select="@linkend"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:basic-link>
|
||||
</xsl:template>-->
|
||||
|
||||
</xsl:stylesheet>
|
||||
BIN
src/doc/layout/pdf/fonts/SteLiBI_.ttf
Normal file
1
src/doc/layout/pdf/fonts/SteLiBI_.xml
Normal file
BIN
src/doc/layout/pdf/fonts/SteLiB__.ttf
Normal file
1
src/doc/layout/pdf/fonts/SteLiB__.xml
Normal file
BIN
src/doc/layout/pdf/fonts/SteLiI__.ttf
Normal file
1
src/doc/layout/pdf/fonts/SteLiI__.xml
Normal file
BIN
src/doc/layout/pdf/fonts/SteLiR__.ttf
Normal file
1
src/doc/layout/pdf/fonts/SteLiR__.xml
Normal file
39
src/doc/layout/pdf/highlight-fo.xsl
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Simple highlighter for FO/PDF output. Follows the Eclipse color scheme.
|
||||
-->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xslthl="http://xslthl.sf.net" exclude-result-prefixes="xslthl" version="1.0">
|
||||
|
||||
<xsl:template match="xslthl:keyword">
|
||||
<fo:inline font-weight="bold" color="#7F0055"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:comment">
|
||||
<fo:inline font-style="italic" color="#3F5F5F"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:oneline-comment">
|
||||
<fo:inline font-style="italic" color="#3F5F5F"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:multiline-comment">
|
||||
<fo:inline font-style="italic" color="#3F5FBF"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:tag">
|
||||
<fo:inline color="#3F7F7F"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:attribute">
|
||||
<fo:inline color="#7F007F"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:value">
|
||||
<fo:inline color="#2A00FF"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="xslthl:string">
|
||||
<fo:inline color="#2A00FF"><xsl:apply-templates/></fo:inline>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
BIN
src/doc/layout/pdf/images/callouts/1.png
Normal file
|
After Width: | Height: | Size: 329 B |
BIN
src/doc/layout/pdf/images/callouts/10.png
Normal file
|
After Width: | Height: | Size: 361 B |
BIN
src/doc/layout/pdf/images/callouts/11.png
Normal file
|
After Width: | Height: | Size: 565 B |
BIN
src/doc/layout/pdf/images/callouts/12.png
Normal file
|
After Width: | Height: | Size: 617 B |
BIN
src/doc/layout/pdf/images/callouts/13.png
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
src/doc/layout/pdf/images/callouts/14.png
Normal file
|
After Width: | Height: | Size: 411 B |
BIN
src/doc/layout/pdf/images/callouts/15.png
Normal file
|
After Width: | Height: | Size: 640 B |
BIN
src/doc/layout/pdf/images/callouts/2.png
Normal file
|
After Width: | Height: | Size: 353 B |
BIN
src/doc/layout/pdf/images/callouts/3.png
Normal file
|
After Width: | Height: | Size: 350 B |
BIN
src/doc/layout/pdf/images/callouts/4.png
Normal file
|
After Width: | Height: | Size: 345 B |
BIN
src/doc/layout/pdf/images/callouts/5.png
Normal file
|
After Width: | Height: | Size: 348 B |
BIN
src/doc/layout/pdf/images/callouts/6.png
Normal file
|
After Width: | Height: | Size: 355 B |
BIN
src/doc/layout/pdf/images/callouts/7.png
Normal file
|
After Width: | Height: | Size: 344 B |
BIN
src/doc/layout/pdf/images/callouts/8.png
Normal file
|
After Width: | Height: | Size: 357 B |
BIN
src/doc/layout/pdf/images/callouts/9.png
Normal file
|
After Width: | Height: | Size: 357 B |