Skip to content

Commit

Permalink
Use XSL to generate man page from the rules XML
Browse files Browse the repository at this point in the history
Take evdev.xml and convert it into a man page, install it as
xkeyoard-config.7 man page to list all option that xkeyboard-config
provides.

man.xsl is badly indented because I couldn't figure out how to make xsl
ignore whitespaces properly.

Adds a requirement on the xorg util-macros.

Signed-off-by: Peter Hutterer <[email protected]>
  • Loading branch information
whot authored and Sergey V. Udaltsov committed Jun 8, 2011
1 parent a9fc729 commit 35dc61a
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 0 deletions.
14 changes: 14 additions & 0 deletions configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@ AC_CONFIG_SRCDIR(rules/base.xml.in)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE

# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION],
[m4_fatal([must install xorg-macros 1.8 or later before
running autoconf/autogen])])
XORG_MACROS_VERSION(1.8)
XORG_MANPAGE_SECTIONS

AC_SUBST(VERSION)

AC_PATH_PROG([XKBCOMP], [xkbcomp], [not_found])
Expand All @@ -24,6 +31,13 @@ AC_ARG_ENABLE( compat_rules,
enable_compat_rules="$enableval",
enable_compat_rules="yes" )

AC_PATH_PROG(SED, [sed])
AC_PATH_PROG(XSLTPROC, [xsltproc])
AM_CONDITIONAL([HAVE_XSLTPROC], [test "x$XSLTPROC" != "x"])
if test "x$XSLTPROC" = "x"; then
AC_MSG_WARN([xsltproc not found, needed to generate man page.])
fi

# xkeyboard-config does not have build-time dependencies. However, it does
# have run-time dependencies and keyboard layouts may not work without the
# right libX11 or xproto installed.
Expand Down
8 changes: 8 additions & 0 deletions rules/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -234,3 +234,11 @@ rulesdir = $(xkb_base)/rules
xmldir = $(rulesdir)

@INTLTOOL_XML_NOMERGE_RULE@

xkeyboard-config.man: evdev.xml
$(XSLTPROC) $(top_srcdir)/xslt/man.xsl evdev.xml > $@

xkeyboard-config.7: xkeyboard-config.man
$(SED) $(MAN_SUBSTS) < $< > $@

dist_man_MANS = xkeyboard-config.7
106 changes: 106 additions & 0 deletions xslt/man.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?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"><![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.
.SH MODELS
.TS
l l
___
lB l.
model description ]]>
<xsl:apply-templates select="modelList"/>
<![CDATA[
.TE
.SH LAYOUTS
.TS
l l l
____
lB lB l.
layout variant description ]]>
<xsl:apply-templates select="layoutList"/>
<![CDATA[
.TE
.SH OPTIONS
]]>
<xsl:apply-templates select="optionList"/>
<![CDATA[
.SH SEE ALSO
setxkbmap(__appmansuffix__)
]]>
</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
variant1 description
variant2 description
layout2 description
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:text> </xsl:text><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>
</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">
<![CDATA[
.SS]]> <xsl:value-of select="configItem/description"/>
<![CDATA[
.BR
.TS
l l
___
lB l.
option description ]]>
<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>
<![CDATA[
.TE
]]>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

0 comments on commit 35dc61a

Please sign in to comment.