[PATCH xkeyboard-config v2] Use XSL to generate man page from the rules XML
Peter Hutterer
peter.hutterer at who-t.net
Mon Jun 13 15:39:30 PDT 2011
Generate a man-page from the evdev.xml through the xslt/man.xsl stylesheet.
Adds a requirement on the xorg util-macros and xsltproc.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
Reviewed-by: Gaetan Nadon <memsize at videotron.ca>
---
Changes to v1:
- more table-specific syntax to soothe the eyes ;)
- remove AM_V_GEN from sed command
Tables are now boxed in. I didn't change from using tab as separator
because it makes the generated source still easier to read than using e.g.
"@" (like in troff(1)).
Makefile.am | 2 +-
configure.in | 10 ++++
man/Makefile.am | 17 +++++++
man/man.xsl | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 165 insertions(+), 1 deletions(-)
create mode 100644 man/Makefile.am
create mode 100644 man/man.xsl
diff --git a/Makefile.am b/Makefile.am
index e98117e..943539f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
AUTOMAKE_OPTIONS = foreign
-SUBDIRS = compat geometry keycodes keymap po rules semantics symbols types docs
+SUBDIRS = compat geometry keycodes keymap po rules semantics symbols types docs man
pkgconfigdir = $(datadir)/pkgconfig
pkgconfig_DATA = xkeyboard-config.pc
diff --git a/configure.in b/configure.in
index 527e807..e98919a 100644
--- a/configure.in
+++ b/configure.in
@@ -3,6 +3,15 @@ AC_CONFIG_SRCDIR(rules/base.xml.in)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
+# Require X.Org macros 1.12 or later for XORG_WITH_XSLTPROC
+m4_ifndef([XORG_MACROS_VERSION],
+ [m4_fatal([must install xorg-macros 1.12 or later before
+ running autoconf/autogen])])
+XORG_MACROS_VERSION(1.12)
+XORG_MANPAGE_SECTIONS
+XORG_WITH_XSLTPROC
+AC_PROG_SED
+
AC_SUBST(VERSION)
AC_PATH_PROG([XKBCOMP], [xkbcomp], [not_found])
@@ -104,6 +113,7 @@ types/Makefile
xkeyboard-config.pc
xkeyboard-config.spec
docs/Makefile
+man/Makefile
])
echo '***********************************************************'
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644
index 0000000..f090f88
--- /dev/null
+++ b/man/Makefile.am
@@ -0,0 +1,17 @@
+EXTRA_DIST = man.xsl
+
+if HAVE_XSLTPROC
+miscmandir = $(MISC_MAN_DIR)
+miscman_PRE = xkeyboard-config.man
+miscman_DATA = $(miscman_PRE:man=@MISC_MAN_SUFFIX@)
+CLEANFILES = $(miscman_DATA) $(miscman_PRE)
+SUFFIXES = .$(MISC_MAN_SUFFIX) .man
+MAN_SUBSTS += -e 's|__xkb_base__|$(xkb_base)|g'
+
+xkeyboard-config.man: $(top_builddir)/rules/evdev.xml $(srcdir)/man.xsl
+ $(XSLTPROC) -nonet $(srcdir)/man.xsl $(top_builddir)/rules/evdev.xml > $@
+
+.man.$(MISC_MAN_SUFFIX):
+ $(SED) $(MAN_SUBSTS) < $< > $@
+
+endif
diff --git a/man/man.xsl b/man/man.xsl
new file mode 100644
index 0000000..a5bd14d
--- /dev/null
+++ b/man/man.xsl
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
+ <xsl:output method="text" encoding="UTF-8" doctype-system="xkb.dtd"/>
+ <xsl:template match="/xkbConfigRegistry">
+ <xsl:text><![CDATA[.\" WARNING: this man page is autogenerated. Do not edit or you will lose all your changes.
+.TH XKEYBOARD-CONFIG __miscmansuffix__ __vendorversion__
+.SH NAME
+xkeyboard-config \- XKB data description files
+.SH DESCRIPTION
+xkeyboard-config provides the description files for the X Keyboard
+Extension (XKB). The configuration options below are usually applied with
+setxkbmap(__appmansuffix__).
+.SH MODELS
+.TS
+left,box;
+lB lB
+___
+lB l.
+Model Description
+]]></xsl:text>
+ <xsl:apply-templates select="modelList"/>
+ <xsl:text><![CDATA[
+.TE
+.SH LAYOUTS
+.TS
+left,box;
+lB lB
+____
+lB l.
+Layout(Variant) Description
+]]></xsl:text>
+ <xsl:apply-templates select="layoutList"/>
+ <xsl:text><![CDATA[
+.TE
+.SH OPTIONS
+]]></xsl:text>
+ <xsl:apply-templates select="optionList"/>
+ <xsl:text><![CDATA[
+.SH FILES
+__xkb_base__/compat
+
+__xkb_base__/compiled
+
+__xkb_base__/geometry
+
+__xkb_base__/keycodes
+
+__xkb_base__/keymap
+
+__xkb_base__/rules
+
+__xkb_base__/semantics
+
+__xkb_base__/symbols
+
+__xkb_base__/types
+
+.SH SEE ALSO
+setxkbmap(__appmansuffix__)
+]]></xsl:text>
+ </xsl:template>
+
+<!-- split model/description into a normal table -->
+ <xsl:template match="modelList">
+ <xsl:for-each select="model">
+ <xsl:value-of select="configItem/name"/><xsl:text>	</xsl:text><xsl:value-of select="configItem/description"/>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+<!-- split layout/variant/description into a table like this
+
+ layout1 description
+ layout1(variant1) description
+ layout1(variant2) description
+ layout2 description
+ layout2(variant1) description
+-->
+ <xsl:template match="layoutList">
+ <xsl:for-each select="layout">
+ <xsl:value-of select="configItem/name"/>
+ <xsl:text>	</xsl:text>
+ <xsl:value-of select="configItem/description"/>
+ <xsl:text> </xsl:text>
+ <xsl:for-each select="variantList/variant">
+ <xsl:value-of select="../../configItem/name"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="configItem/name"/>
+ <xsl:text>)</xsl:text>
+ <xsl:text>	</xsl:text>
+ <xsl:value-of select="configItem/description"/>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ <xsl:text> </xsl:text>
+ <xsl:text>_ </xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+<!-- split option into a table like this
+
+option description:
+ optarg description
+ optarg description
+ optarg description
+
+option2 description:
+ optarg description
+ optarg description
+-->
+ <xsl:template match="optionList">
+ <xsl:for-each select="group">
+ <xsl:text><![CDATA[
+.SS]]></xsl:text>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="configItem/description"/>
+ <xsl:text><![CDATA[
+.BR
+.TS
+left,box;
+lB lB
+___
+lB l.
+Option Description
+]]></xsl:text>
+ <xsl:for-each select="option">
+ <xsl:value-of select="configItem/name"/>
+ <xsl:text>	</xsl:text>
+ <xsl:value-of select="configItem/description"/>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ <xsl:text><![CDATA[
+.TE
+
+]]></xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>
--
1.7.5.1
More information about the xorg-devel
mailing list