From 081e0c8d4d47ab2628a9d11d6c4e0ed014180a20 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Mon, 27 Feb 2017 10:44:59 -0500
Subject: [PATCH v2] Create INSTALL file via XSLT

As before, create an INSTALL.html file for processing with lynx, but use
xsltproc and a new XSLT stylesheet instead of jade and DSSSL.

Replacing jade with xsltproc removes jade from the requirements for
distribution building.
---
 doc/src/sgml/.gitignore          |  1 +
 doc/src/sgml/Makefile            | 35 ++++++++------
 doc/src/sgml/stylesheet-text.xsl | 98 ++++++++++++++++++++++++++++++++++++++++
 doc/src/sgml/stylesheet.dsl      | 43 ------------------
 4 files changed, 120 insertions(+), 57 deletions(-)
 create mode 100644 doc/src/sgml/stylesheet-text.xsl

diff --git a/doc/src/sgml/.gitignore b/doc/src/sgml/.gitignore
index 2f0329c15f..cdeace2991 100644
--- a/doc/src/sgml/.gitignore
+++ b/doc/src/sgml/.gitignore
@@ -7,6 +7,7 @@
 /man-stamp
 # Other popular build targets
 /INSTALL
+/INSTALL.xml
 /postgres-US.pdf
 /postgres-A4.pdf
 /postgres.html
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index fe7ca65cd4..774d35de20 100644
--- a/doc/src/sgml/Makefile
+++ b/doc/src/sgml/Makefile
@@ -217,10 +217,9 @@ postgres.pdf:
 
 
 ##
-## Semi-automatic generation of some text files.
+## Generation of some text files.
 ##
 
-JADE.text = $(JADE) $(JADEFLAGS) $(SGMLINCLUDE) $(CATALOG) -d stylesheet.dsl -i output-text -t sgml
 ICONV = iconv
 LYNX = lynx
 
@@ -233,10 +232,15 @@ LYNX = lynx
 # locale support and is very picky about locale name spelling.  The
 # below has been finely tuned to run on FreeBSD and Linux/glibc.
 INSTALL: % : %.html
-	$(PERL) -p -e 's/<H(1|2)$$/<H\1 align=center/g' $< | LC_ALL=en_US.ISO8859-1 $(LYNX) -force_html -dump -nolist -stdin | $(ICONV) -f latin1 -t us-ascii//TRANSLIT > $@
+	$(PERL) -p -e 's,<h(1|2) class="title",<h\1 align=center,g' $< | LC_ALL=en_US.ISO8859-1 $(LYNX) -force_html -dump -nolist -stdin | $(ICONV) -f latin1 -t us-ascii//TRANSLIT > $@
 
-INSTALL.html: standalone-install.sgml installation.sgml version.sgml
-	$(JADE.text) -V nochunks standalone-install.sgml installation.sgml > $@
+INSTALL.html: %.html : stylesheet-text.xsl %.xml
+	$(XMLLINT) --noout --valid $*.xml
+	$(XSLTPROC) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $^ >$@
+
+INSTALL.xml: standalone-install.sgml installation.sgml version.sgml
+	$(OSX) -D. -x lower $(filter-out version.sgml,$^) >$@.tmp
+	$(call mangle-xml,chapter)
 
 
 ##
@@ -247,12 +251,15 @@ INSTALL.html: standalone-install.sgml installation.sgml version.sgml
 # if we try to do "make all" in a VPATH build without the explicit
 # $(srcdir) on the postgres.sgml dependency in this rule.  GNU make bug?
 postgres.xml: $(srcdir)/postgres.sgml $(ALMOSTALLSGML)
-	$(OSX) -D. -x lower -i include-xslt-index $< >postgres.xmltmp
-	$(PERL) -p -e 's/\[(aacute|acirc|aelig|agrave|amp|aring|atilde|auml|bull|copy|eacute|egrave|gt|iacute|lt|mdash|nbsp|ntilde|oacute|ocirc|oslash|ouml|pi|quot|scaron|uuml) *\]/\&\1;/gi;' \
-	           -e '$$_ .= qq{<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">\n} if $$. == 1;' \
-	  <postgres.xmltmp > $@
-	rm postgres.xmltmp
-# ' hello Emacs
+	$(OSX) -D. -x lower -i include-xslt-index $< >$@.tmp
+	$(call mangle-xml,book)
+
+define mangle-xml
+$(PERL) -p -e 's/\[(aacute|acirc|aelig|agrave|amp|aring|atilde|auml|bull|copy|eacute|egrave|gt|iacute|lt|mdash|nbsp|ntilde|oacute|ocirc|oslash|ouml|pi|quot|scaron|uuml) *\]/\&\1;/gi;' \
+           -e '$$_ .= qq{<!DOCTYPE $(1) PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">\n} if $$. == 1;' \
+  <$@.tmp > $@
+rm $@.tmp
+endef
 
 ifeq ($(STYLE),website)
 XSLTPROC_HTML_FLAGS += --param website.stylesheet 1
@@ -386,13 +393,13 @@ check-tabs:
 # This allows removing some files from the distribution tarballs while
 # keeping the dependencies satisfied.
 .SECONDARY: postgres.xml $(GENERATED_SGML) HTML.index
-.SECONDARY: INSTALL.html
+.SECONDARY: INSTALL.html INSTALL.xml
 .SECONDARY: %-A4.tex-ps %-US.tex-ps %-A4.tex-pdf %-US.tex-pdf
 
 clean:
 # text --- these are shipped, but not in this directory
 	rm -f INSTALL
-	rm -f INSTALL.html
+	rm -f INSTALL.html INSTALL.xml
 # single-page output
 	rm -f postgres.html postgres.txt
 # print
@@ -400,7 +407,7 @@ clean:
 # index
 	rm -f HTML.index $(GENERATED_SGML)
 # XSLT
-	rm -f postgres.xml postgres.xmltmp htmlhelp.hhp toc.hhc index.hhk *.fo
+	rm -f postgres.xml *.tmp htmlhelp.hhp toc.hhc index.hhk *.fo
 # EPUB
 	rm -f postgres.epub
 # Texinfo
diff --git a/doc/src/sgml/stylesheet-text.xsl b/doc/src/sgml/stylesheet-text.xsl
new file mode 100644
index 0000000000..476b871870
--- /dev/null
+++ b/doc/src/sgml/stylesheet-text.xsl
@@ -0,0 +1,98 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version='1.0'
+                xmlns="http://www.w3.org/TR/xhtml1/transitional"
+                exclude-result-prefixes="#default">
+
+<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"/>
+<xsl:import href="stylesheet-common.xsl" />
+
+<!-- The customizations here are somewhat random in order to make the text
+     output look good. -->
+
+<!-- no section numbers or ToC -->
+<xsl:param name="chapter.autolabel" select="0"/>
+<xsl:param name="section.autolabel" select="0"/>
+<xsl:param name="generate.toc"></xsl:param>
+
+<!-- don't need them, and they mess up formatting -->
+<xsl:template match="indexterm">
+</xsl:template>
+
+<xsl:template match="step">
+  <li>
+    <xsl:call-template name="common.html.attributes"/>
+    <xsl:call-template name="id.attribute"/>
+<!-- messes up formatting
+    <xsl:call-template name="anchor"/>
+-->
+    <xsl:apply-templates/>
+  </li>
+</xsl:template>
+
+<!-- produce "ASCII markup" for emphasis and such -->
+
+<xsl:template match="emphasis">
+  <xsl:text>*</xsl:text>
+  <xsl:apply-templates/>
+  <xsl:text>*</xsl:text>
+</xsl:template>
+
+<xsl:template match="para/command|para/filename|para/option|para/replaceable">
+  <xsl:call-template name="gentext.startquote"/>
+  <xsl:apply-templates/>
+  <xsl:call-template name="gentext.endquote"/>
+</xsl:template>
+
+<xsl:template match="filename/replaceable|firstterm">
+  <xsl:apply-templates/>
+</xsl:template>
+
+<!-- tweak formatting for note, warning, etc. -->
+<xsl:template name="nongraphical.admonition">
+  <div>
+    <xsl:call-template name="common.html.attributes">
+      <xsl:with-param name="inherit" select="1"/>
+    </xsl:call-template>
+    <xsl:call-template name="id.attribute"/>
+
+    <xsl:if test="$admon.textlabel != 0 or title or info/title">
+      <p>
+        <b>
+          <xsl:call-template name="anchor"/>
+          <xsl:apply-templates select="." mode="object.title.markup"/>:
+        </b>
+      </p>
+    </xsl:if>
+
+    <xsl:apply-templates/>
+  </div>
+</xsl:template>
+
+<!-- horizontal rules before titles (matches old DSSSL style) -->
+
+<xsl:template match="sect1/title
+                    |sect1/info/title
+                    |sect1info/title"
+              mode="titlepage.mode" priority="2">
+  <hr/>
+  <xsl:call-template name="section.title"/>
+</xsl:template>
+
+<xsl:template match="sect2/title
+                    |sect2/info/title
+                    |sect2info/title"
+              mode="titlepage.mode" priority="2">
+  <hr/>
+  <xsl:call-template name="section.title"/>
+</xsl:template>
+
+<xsl:template match="sect3/title
+                    |sect3/info/title
+                    |sect3info/title"
+              mode="titlepage.mode" priority="2">
+  <hr/>
+  <xsl:call-template name="section.title"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/src/sgml/stylesheet.dsl b/doc/src/sgml/stylesheet.dsl
index 61d2963b17..05cab9a5f3 100644
--- a/doc/src/sgml/stylesheet.dsl
+++ b/doc/src/sgml/stylesheet.dsl
@@ -4,7 +4,6 @@
 <!-- must turn on one of these with -i on the jade command line -->
 <!ENTITY % output-html          "IGNORE">
 <!ENTITY % output-print         "IGNORE">
-<!ENTITY % output-text          "IGNORE">
 
 <![ %output-html; [
 <!ENTITY dbstyle PUBLIC "-//Norman Walsh//DOCUMENT DocBook HTML Stylesheet//EN" CDATA DSSSL>
@@ -14,10 +13,6 @@
 <!ENTITY dbstyle PUBLIC "-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN" CDATA DSSSL>
 ]]>
 
-<![ %output-text; [
-<!ENTITY dbstyle PUBLIC "-//Norman Walsh//DOCUMENT DocBook HTML Stylesheet//EN" CDATA DSSSL>
-]]>
-
 ]>
 
 <style-sheet>
@@ -796,44 +791,6 @@
 
 ]]> <!-- %output-print -->
 
-
-<!-- Plain text output customization ............................... -->
-
-<!--
-This is used for making the INSTALL file and others.  We customize the
-HTML stylesheets to be suitable for dumping plain text (via Netscape,
-Lynx, or similar).
--->
-
-<![ %output-text; [
-
-(define %section-autolabel% #f)
-(define %chapter-autolabel% #f)
-(define $generate-chapter-toc$ (lambda () #f))
-
-;; For text output, produce "ASCII markup" for emphasis and such.
-
-(define ($asterix-seq$ #!optional (sosofo (process-children)))
-  (make sequence
-    (literal "*")
-    sosofo
-    (literal "*")))
-
-(define ($dquote-seq$ #!optional (sosofo (process-children)))
-  (make sequence
-    (literal (gentext-start-quote))
-    sosofo
-    (literal (gentext-end-quote))))
-
-(element (para command) ($dquote-seq$))
-(element (para emphasis) ($asterix-seq$))
-(element (para filename) ($dquote-seq$))
-(element (para option) ($dquote-seq$))
-(element (para replaceable) ($dquote-seq$))
-(element (para userinput) ($dquote-seq$))
-
-]]> <!-- %output-text -->
-
   </style-specification-body>
  </style-specification>
 
-- 
2.12.0

