sphinx: cheesy script to convert .tmpl files

This script uses pandoc to convert existing DocBook template files to RST
templates.  A couple of sed scripts are need to massage things both before
and after the conversion, but the result is then usable with no hand
editing.

[Jani: Change usage to tmplcvt <in> <out>. Fix escaping for docproc
directives. Add support the new kernel-doc extension.]

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
Jonathan Corbet 2016-03-06 20:29:31 -07:00 committed by Jani Nikula
parent c13ce448c8
commit 89a66d7610
3 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,14 @@
#
# Pandoc doesn't grok <function> or <structname>, so convert them
# ahead of time.
#
# Use "$bq" instead of "`" so that pandoc won't mess with it.
#
s%<function>\([^<(]\+\)()</function>%:c:func:$bq\1$bq%g
s%<function>\([^<(]\+\)</function>%:c:func:$bq\1$bq%g
s%<structname>struct *\([^<]\+\)</structname>%:ref:$bqstruct \1$bq%g
s%<structname>\([^<]\+\)</structname>%:ref:$bqstruct \1$bq%g
#
# Wrap docproc directives in para and code blocks.
#
s%^\(!.*\)$%<para><code>DOCPROC: \1</code></para>%

View File

@ -0,0 +1,19 @@
#
# pandoc thinks that both "_" needs to be escaped. Remove the extra
# backslashes. Also put in proper backquotes now that pandoc won't quote
# them.
#
s/$bq/`/g
s/\\_/_/g
#
# Unwrap docproc directives.
#
s/^``DOCPROC: !E\(.*\)``$/.. kernel-doc:: \1\n :export:/
s/^``DOCPROC: !I\(.*\)``$/.. kernel-doc:: \1\n :internal:/
s/^``DOCPROC: !F\([^ ]*\) \(.*\)``$/.. kernel-doc:: \1\n :functions: \2/
s/^``DOCPROC: !P\([^ ]*\) \(.*\)``$/.. kernel-doc:: \1\n :doc: \2/
s/^``DOCPROC: \(!.*\)``$/.. WARNING: DOCPROC directive not supported: \1/
#
# Trim trailing whitespace.
#
s/[[:space:]]*$//

19
Documentation/sphinx/tmplcvt Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
#
# Convert a template file into something like RST
#
# fix <function>
# feed to pandoc
# fix \_
# title line?
#
in=$1
rst=$2
tmp=$rst.tmp
cp $in $tmp
sed --in-place -f convert_template.sed $tmp
pandoc -s -S -f docbook -t rst -o $rst $tmp
sed --in-place -f post_convert.sed $rst
rm $tmp