Преглед на файлове

Build updates to include uploading of distro and docs, plus addition of admon graphics path to docbook plugin.

Luke Taylor преди 15 години
родител
ревизия
dbf673ec37
променени са 4 файла, в които са добавени 506 реда и са изтрити 436 реда
  1. 2 1
      .gitignore
  2. 82 11
      build.gradle
  3. 3 3
      docs/manual/manual.gradle
  4. 419 421
      docs/manual/src/xsl/pdf-custom.xsl

+ 2 - 1
.gitignore

@@ -4,4 +4,5 @@ target/
 .settings/
 build/
 *.log
-.gradle/
+.gradle/
+gradle.properties

+ 82 - 11
build.gradle

@@ -6,12 +6,14 @@ apply id: 'base'
 allprojects {
     version = '3.0.2.CI-SNAPSHOT'
     releaseBuild = version.endsWith('RELEASE')
+    snapshotBuild = version.endsWith('SNAPSHOT')
+
     group = 'org.springframework.security'
 
     repositories {
         mavenRepo name:'Local', urls:'file:///Users/luke/.m2/repository'
         mavenCentral()
-        mavenRepo name:'SpringSource Milestone Repo', urls:'http://repository.springsource.com/maven/bundles/milestone'
+//        mavenRepo name:'SpringSource Milestone Repo', urls:'http://repository.springsource.com/maven/bundles/milestone'
     }
 }
 
@@ -121,6 +123,20 @@ configure(javaProjects()) {
     conf2ScopeMappings.addMapping(1, configurations.provided, "provided")
 }
 
+repositories {
+    // Required for ant s3 task
+    mavenRepo name: "s2.com release", urls: "http://repository.springsource.com/maven/bundles/release"
+}
+
+configurations {
+    antlibs
+}
+
+dependencies {
+    antlibs "org.springframework.build:org.springframework.build.aws.ant:3.0.3.RELEASE",
+            "net.java.dev.jets3t:jets3t:0.6.1"
+}
+
 task apidocs(type: Javadoc) {
     destinationDir = new File(buildDir, 'apidocs')
     optionsFile = file("$buildDir/tmp/javadoc.options")
@@ -133,25 +149,69 @@ task apidocs(type: Javadoc) {
         project.sourceSets.main.compileClasspath })
 }
 
-task dist (type: Zip) {
-    def docsDir = new File(project(':manual').buildDir, 'docs')
-    into('docs/apidocs') {
+task apitar(type: Tar, dependsOn: apidocs) {
+    compression = Compression.BZIP2
+    classifier = 'apidocs'
+    into('apidocs') {
         from apidocs.destinationDir
     }
-    into('docs/reference') {
-        from docsDir
-    }
-    into('dist') {
-        from coreModuleProjects().collect { project -> project.libsDir }
+}
+
+task login << {
+    ant.input("Please enter the ssh username for host '$sshHost'", addproperty: "ssh.username")
+    ant.input("Please enter the ssh password '$sshHost'", addproperty: "ssh.password")
+    def username = ant.properties['ssh.username']
+    def password = ant.properties['ssh.password']
+}
+
+task uploadApidocs (dependsOn: login) << {
+    ant.scp(file: apitar.archivePath, todir: "${login.username}@$sshHost:$remoteDocsDir", password: password)
+    ant.sshexec(host: sshHost, username: login.username, password: login.password, command: "cd $remoteDocsDir && tar -xjf ${apitar.archiveName}")
+    ant.sshexec(host: sshHost, username: login.username, password: login.password, command: "rm $remoteDocsDir/${apitar.archiveName}")
+}
+
+task dist (type: Zip) {
+    def docsDir = new File(project(':manual').buildDir, 'docs')
+    def zipRootDir = "${project.name}-$version"
+    into (zipRootDir) {
+        into('docs/apidocs') {
+            from apidocs.destinationDir
+        }
+        into('docs/reference') {
+            from docsDir
+        }
+        into('dist') {
+            from coreModuleProjects().collect { project -> project.libsDir }
+            from project(':spring-security-samples-tutorial').libsDir
+            from project(':spring-security-samples-contacts').libsDir
+        }
     }
 }
 
+dist.dependsOn apidocs, ':manual:doc'
+dist.dependsOn subprojects.collect { "$it.path:assemble" }
+
 dist.doLast {
     ant.checksum(file: archivePath, algorithm: 'SHA1', fileext: '.sha1')
 }
 
-dist.dependsOn apidocs, ':manual:doc'
-dist.dependsOn subprojects.collect { "$it.path:assemble" }
+task uploadDist << {
+    def shaFile = file("${dist.archivePath}.sha1")
+    assert dist.archivePath.isFile()
+    assert shaFile.isFile()
+    ant.taskdef(resource: 'org/springframework/build/aws/ant/antlib.xml', classpath: configurations.antlibs.asPath)
+    ant.s3(accessKey: s3AccessKey, secretKey: s3SecretAccessKey) {
+        upload(bucketName: 'dist.springframework.org', file: dist.archivePath,
+                toFile: releaseType() + "/SEC/${dist.archiveName}", publicRead: 'true') {
+            metadata(name: 'project.name', value: 'Spring Security')
+            metadata(name: 'release.type', value: releaseType())
+            metadata(name: 'bundle.version', value: version)
+            metadata(name: 'package.file.name', value: dist.archiveName)
+        }
+        upload(bucketName: 'dist.springframework.org', file: shaFile,
+                toFile: releaseType() + "/SEC/${dist.archiveName}.sha1", publicRead: 'true')
+    }
+}
 
 def javaProjects() {
     subprojects.findAll { project -> project.name != 'faq' && project.name != 'manual' }
@@ -164,3 +224,14 @@ def sampleProjects() {
 def coreModuleProjects() {
     javaProjects() - sampleProjects()
 }
+
+def releaseType() {
+    if (releaseBuild) {
+        'release'
+    } else if (snapshotBuild) {
+        'snapshot'
+    } else {
+        'milestone'
+    }
+}
+

+ 3 - 3
docs/manual/manual.gradle

@@ -4,14 +4,14 @@ apply id: 'docbook'
 docbookSrcFileName = 'springsecurity.xml'
 docbookHtml.stylesheet = new File(projectDir, 'src/xsl/html-custom.xsl')
 docbookFoPdf.stylesheet = new File(projectDir, 'src/xsl/pdf-custom.xsl')
+def imagesDir = new File(projectDir, 'src/docbook/images');
+docbookFoPdf.admonGraphicsPath = "${imagesDir}/"
 
 task doc (dependsOn: [docbookHtml, docbookFoPdf]) << {
     resourcesDir = new File(projectDir, 'src/resources')
     ant {
         docsDir = new File(buildDir, 'docs')
         copy(toDir: docsDir) {fileset(dir: resourcesDir)}
-        copy(toDir: new File(docsDir, 'images')) {fileset(dir: new File(projectDir, 'src/docbook/images'))}
-        // TODO: Add this to the plugin
-        delete { fileset(dir: docsDir, includes: "*.fo")}
+        copy(toDir: new File(docsDir, 'images')) {fileset(dir: imagesDir)}
     }
 }

+ 419 - 421
docs/manual/src/xsl/pdf-custom.xsl

@@ -20,482 +20,480 @@
 -->
 
 <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:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
-	<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/highlight.xsl"/>
-
-	<xsl:param name="admon.graphics">'1'</xsl:param>
-	<xsl:param name="admon.graphics.path">src/docbook/images/</xsl:param>
-	<!-- xsl:param name="draft.watermark.image" select="'images/draft.png'"/ -->
-	<xsl:param name="paper.type" select="'A4'"/>
-
-	<xsl:param name="page.margin.top" select="'1cm'"/>
-	<xsl:param name="region.before.extent" select="'1cm'"/>
-	<xsl:param name="body.margin.top" select="'1.5cm'"/>
-
-	<xsl:param name="body.margin.bottom" select="'1.5cm'"/>
-	<xsl:param name="region.after.extent" select="'1cm'"/>
-	<xsl:param name="page.margin.bottom" select="'1cm'"/>
-	<xsl:param name="title.margin.left" select="'0cm'"/>
+                xmlns:fo="http://www.w3.org/1999/XSL/Format"
+                xmlns:xslthl="http://xslthl.sf.net"
+                exclude-result-prefixes="xslthl"
+                version='1.0'>
+    <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
+    <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/highlight.xsl"/>
+
+    <!-- xsl:param name="draft.watermark.image" select="'images/draft.png'"/ -->
+    <xsl:param name="paper.type" select="'A4'"/>
+
+    <xsl:param name="page.margin.top" select="'1cm'"/>
+    <xsl:param name="region.before.extent" select="'1cm'"/>
+    <xsl:param name="body.margin.top" select="'1.5cm'"/>
+
+    <xsl:param name="body.margin.bottom" select="'1.5cm'"/>
+    <xsl:param name="region.after.extent" select="'1cm'"/>
+    <xsl:param name="page.margin.bottom" select="'1cm'"/>
+    <xsl:param name="title.margin.left" select="'0cm'"/>
 
 <!--###################################################
-		Header
-	################################################### -->
+        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 name="margin-left">-5em</xsl:attribute>
-		<xsl:attribute name="margin-right">-5em</xsl:attribute>
-	</xsl:attribute-set>
+    <xsl:attribute-set name="header.content.properties">
+        <xsl:attribute name="font-family">
+            <xsl:value-of select="$body.font.family"/>
+        </xsl:attribute>
+        <xsl:attribute name="margin-left">-5em</xsl:attribute>
+        <xsl:attribute name="margin-right">-5em</xsl:attribute>
+    </xsl:attribute-set>
 
 <!--###################################################
-		Table of Contents
-	################################################### -->
+        Table of Contents
+    ################################################### -->
 
-	<xsl:param name="generate.toc">
-		book      toc,title
-	</xsl:param>
+    <xsl:param name="generate.toc">
+        book      toc,title
+    </xsl:param>
 
 <!--###################################################
-		Custom Header
-	################################################### -->
-
-	<xsl:template name="header.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:choose>
-				<xsl:when test="//productname">
-					<xsl:value-of select="//productname"/><xsl:text> </xsl:text>
-				</xsl:when>
-				<xsl:otherwise>
-					<xsl:text>please define productname in your docbook file!</xsl:text>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-
-		<xsl:choose>
-			<xsl:when test="$sequence='blank'">
-				<xsl:choose>
-					<xsl:when test="$position='center'">
-						<xsl:value-of select="$Version"/>
-					</xsl:when>
-					
-					<xsl:otherwise>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:when>
-
-			<xsl:when test="$pageclass='titlepage'">
-			</xsl:when>
-
-			<xsl:when test="$position='center'">
-				<xsl:value-of select="$Version"/>
-			</xsl:when>
-
-			<xsl:otherwise>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
+        Custom Header
+    ################################################### -->
+
+    <xsl:template name="header.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:choose>
+                <xsl:when test="//productname">
+                    <xsl:value-of select="//productname"/><xsl:text> </xsl:text>
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:text>please define productname in your docbook file!</xsl:text>
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$position='center'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+            </xsl:when>
+
+            <xsl:when test="$position='center'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
 
 <!--###################################################
-		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:choose>
-				<xsl:when test="//releaseinfo">
-					<xsl:value-of select="//releaseinfo"/>
-				</xsl:when>
-				<xsl:otherwise>
-				</xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-
-		<xsl:variable name="Title">
-			<xsl:value-of select="//title"/>
-		</xsl:variable>
-
-		<xsl:choose>
-			<xsl:when test="$sequence='blank'">
-				<xsl:choose>
-					<xsl:when test="$double.sided != 0 and $position = 'left'">
-						<xsl:value-of select="$Version"/>
-					</xsl:when>
-
-					<xsl:when test="$double.sided = 0 and $position = 'center'">
-					</xsl:when>
-
-					<xsl:otherwise>
-						<fo:page-number/>
-					</xsl:otherwise>
-				</xsl:choose>
-			</xsl:when>
-
-			<xsl:when test="$pageclass='titlepage'">
-			</xsl:when>
-
-			<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
-				<fo:page-number/>
-			</xsl:when>
-
-			<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
-				<fo:page-number/>
-			</xsl:when>
-
-			<xsl:when test="$double.sided = 0 and $position='right'">
-				<fo:page-number/>
-			</xsl:when>
-
-			<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
-				<xsl:value-of select="$Version"/>
-			</xsl:when>
-
-			<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
-				<xsl:value-of select="$Version"/>
-			</xsl:when>
-
-			<xsl:when test="$double.sided = 0 and $position='left'">
-				<xsl:value-of select="$Version"/>
-			</xsl:when>
-
-			<xsl:when test="$position='center'">
-				<xsl:value-of select="$Title"/>
-			</xsl:when>
-
-			<xsl:otherwise>
-			</xsl:otherwise>
-		</xsl:choose>
-	</xsl:template>
-
-	<xsl:template match="processing-instruction('hard-pagebreak')">
-		<fo:block break-before='page'/>
-	</xsl:template>
+        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:choose>
+                <xsl:when test="//releaseinfo">
+                    <xsl:value-of select="//releaseinfo"/>
+                </xsl:when>
+                <xsl:otherwise>
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+
+        <xsl:variable name="Title">
+            <xsl:value-of select="//title"/>
+        </xsl:variable>
+
+        <xsl:choose>
+            <xsl:when test="$sequence='blank'">
+                <xsl:choose>
+                    <xsl:when test="$double.sided != 0 and $position = 'left'">
+                        <xsl:value-of select="$Version"/>
+                    </xsl:when>
+
+                    <xsl:when test="$double.sided = 0 and $position = 'center'">
+                    </xsl:when>
+
+                    <xsl:otherwise>
+                        <fo:page-number/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+
+            <xsl:when test="$pageclass='titlepage'">
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='right'">
+                <fo:page-number/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$double.sided = 0 and $position='left'">
+                <xsl:value-of select="$Version"/>
+            </xsl:when>
+
+            <xsl:when test="$position='center'">
+                <xsl:value-of select="$Title"/>
+            </xsl:when>
+
+            <xsl:otherwise>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <xsl:template match="processing-instruction('hard-pagebreak')">
+        <fo:block break-before='page'/>
+    </xsl:template>
 
 <!--###################################################
-		Extensions
-	################################################### -->
-
-	<!-- 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="fop.extensions">1</xsl:param>
-	-->
+        Extensions
+    ################################################### -->
+
+    <!-- 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="fop.extensions">1</xsl:param>
+    -->
 <!--###################################################
-		Paper & Page Size
-	################################################### -->
+        Paper & Page Size
+    ################################################### -->
 
-	<!-- Paper type, no headers on blank pages, no double sided printing --> 
-	<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>
+    <!-- Paper type, no headers on blank pages, no double sided printing -->
+    <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>
 
 <!--###################################################
-		Fonts & Styles
-	################################################### -->
+        Fonts & Styles
+    ################################################### -->
 
-	<xsl:param name="hyphenate">false</xsl:param>
+    <xsl:param name="hyphenate">false</xsl:param>
 
-<!-- Default Font size --> 
-	<xsl:param name="body.font.master">11</xsl:param>
-	<xsl:param name="body.font.small">8</xsl:param>
+<!-- Default Font size -->
+    <xsl:param name="body.font.master">11</xsl:param>
+    <xsl:param name="body.font.small">8</xsl:param>
 
-	<!-- Line height in body text --> 
-	<xsl:param name="line-height">1.4</xsl:param>
+    <!-- Line height in body text -->
+    <xsl:param name="line-height">1.4</xsl:param>
 
 <!-- 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>
+    <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>
+    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>
+
+    <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>
 
 <!-- Use code syntax highlighting -->
-	<xsl:param name="highlight.source" select="1"/>
-	<xsl:param name="highlight.default.language" select="xml" />
-
-	<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:param name="highlight.source" select="1"/>
+    <xsl:param name="highlight.default.language" select="xml" />
+
+    <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>
 
 <!--###################################################
-		Tables
-	################################################### -->
+        Tables
+    ################################################### -->
 
-	<!-- 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>
+    <!-- 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>
+    <xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
+    <xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
 
 <!--###################################################
-		Labels
-	################################################### -->
+        Labels
+    ################################################### -->
 
 <!-- Label Chapters and Sections (numbering) -->
-	<xsl:param name="chapter.autolabel" select="1"/>
-	<xsl:param name="section.autolabel" select="1"/>
-	<xsl:param name="section.autolabel.max.depth" select="1"/>
+    <xsl:param name="chapter.autolabel" select="1"/>
+    <xsl:param name="section.autolabel" select="1"/>
+    <xsl:param name="section.autolabel.max.depth" select="1"/>
 
-	<xsl:param name="section.label.includes.component.label" select="1"/>
-	<xsl:param name="table.footnote.number.format" select="'1'"/>
+    <xsl:param name="section.label.includes.component.label" select="1"/>
+    <xsl:param name="table.footnote.number.format" select="'1'"/>
 
 <!--###################################################
-		Programlistings
-	################################################### -->
-
-	<!-- Verbatim text formatting (programlistings) -->
-	<xsl:attribute-set name="monospace.verbatim.properties">
-		<xsl:attribute name="font-size">
-			<xsl:value-of select="$body.font.small * 1.0"/>
-			<xsl:text>pt</xsl:text>
-		</xsl:attribute>
-	</xsl:attribute-set>
-
-	<xsl:attribute-set name="verbatim.properties">
-		<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="space-after.minimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-after.maximum">0.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>
-
-	<xsl:attribute-set name="list.block.spacing">
-		<xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-before.minimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-before.maximum">0.1em</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="example.properties">
-		<xsl:attribute name="space-before.minimum">0.5em</xsl:attribute>
-		<xsl:attribute name="space-before.optimum">0.5em</xsl:attribute>
-		<xsl:attribute name="space-before.maximum">0.5em</xsl:attribute>
-		<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
-		<xsl:attribute name="keep-together.within-column">always</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 * 1.0"/>
+            <xsl:text>pt</xsl:text>
+        </xsl:attribute>
+    </xsl:attribute-set>
+
+    <xsl:attribute-set name="verbatim.properties">
+        <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="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.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>
+
+    <xsl:attribute-set name="list.block.spacing">
+        <xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-before.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.1em</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="example.properties">
+        <xsl:attribute name="space-before.minimum">0.5em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">0.5em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.5em</xsl:attribute>
+        <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+        <xsl:attribute name="keep-together.within-column">always</xsl:attribute>
+    </xsl:attribute-set>
+
 <!--###################################################
-		Title information for Figures, Examples etc.
-	################################################### -->
-
-	<xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
-		<xsl:attribute name="font-weight">normal</xsl:attribute>
-		<xsl:attribute name="font-style">italic</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-before.minimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
-		<xsl:attribute name="space-before.maximum">0.1em</xsl:attribute>
-	</xsl:attribute-set>
+        Title information for Figures, Examples etc.
+    ################################################### -->
+
+    <xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
+        <xsl:attribute name="font-weight">normal</xsl:attribute>
+        <xsl:attribute name="font-style">italic</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-before.minimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-before.optimum">0.1em</xsl:attribute>
+        <xsl:attribute name="space-before.maximum">0.1em</xsl:attribute>
+    </xsl:attribute-set>
 
 <!--###################################################
-		Callouts
-	################################################### -->
+        Callouts
+    ################################################### -->
 
-<!-- don't use images for callouts 
-	<xsl:param name="callout.graphics">0</xsl:param>
-	<xsl:param name="callout.unicode">1</xsl:param>
+<!-- don't use images for callouts
+    <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">90</xsl:param>
+<!-- Place callout marks at this column in annotated areas
+    <xsl:param name="callout.defaultcolumn">90</xsl:param>
 -->
 <!--###################################################
-		Misc
-	################################################### -->
+        Misc
+    ################################################### -->
 
 <!-- Placement of titles -->
-	<xsl:param name="formal.title.placement">
-		figure after
-		example after
-		equation before
-		table before
-		procedure before
-	</xsl:param>
+    <xsl:param name="formal.title.placement">
+        figure after
+        example after
+        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>
+    <xsl:param name="variablelist.as.blocks">1</xsl:param>
 
-	<xsl:param name="body.start.indent">0pt</xsl:param>
+    <xsl:param name="body.start.indent">0pt</xsl:param>
 
 <!-- Show only Sections up to level 3 in the TOCs -->
-	<xsl:param name="toc.section.depth">3</xsl:param>
-
-	<!-- Remove "Chapter" from the Chapter titles... -->
-	<xsl:param name="local.l10n.xml" select="document('')"/>
-	<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
-		<l:l10n language="en">
-			<l:context name="title-numbered">
-				<l:template name="chapter" text="%n.&#160;%t"/>
-				<l:template name="section" text="%n&#160;%t"/>
-			</l:context>
-			<l:context name="title">
-				<l:template name="example" text="Example&#160;%n&#160;%t"/>
-			</l:context>
-		</l:l10n>
-	</l:i18n>
+    <xsl:param name="toc.section.depth">3</xsl:param>
+
+    <!-- Remove "Chapter" from the Chapter titles... -->
+    <xsl:param name="local.l10n.xml" select="document('')"/>
+    <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+        <l:l10n language="en">
+            <l:context name="title-numbered">
+                <l:template name="chapter" text="%n.&#160;%t"/>
+                <l:template name="section" text="%n&#160;%t"/>
+            </l:context>
+            <l:context name="title">
+                <l:template name="example" text="Example&#160;%n&#160;%t"/>
+            </l:context>
+        </l:l10n>
+    </l:i18n>
 
 <!--###################################################
-		colored and hyphenated links 
-	################################################### --> 
+        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="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:stylesheet>
+</xsl:stylesheet>