hxtool: Support SRST/ERST directives

We want to add support for including rST document fragments
in our .hx files, in the same way we currently have texinfo
fragments. These will be delimited by SRST and ERST directives,
in the same way the texinfo is delimited by STEXI/ETEXI.
The rST fragments will not be extracted by the hxtool
script, but by a different mechanism, so all we need to
do in hxtool is have it ignore all the text inside a
SRST/ERST section, with suitable error-checking for
mismatched rST-vs-texi fragment delimiters.

The resulting effective state machine has only three states:
 * flag = 0, rstflag = 0 : reading section for C output
 * flag = 1, rstflag = 0 : reading texi fragment
 * flag = 0, rstflag = 1 : reading rST fragment
and flag = 1, rstflag = 1 is not possible. Using two
variables makes the parallel between the rST handling and
the texi handling clearer; in any case all this code will
be deleted once we've converted entirely to rST.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200124162606.8787-3-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2020-01-24 16:26:00 +00:00
parent e0f3728d81
commit b0cecc0d65
1 changed files with 32 additions and 1 deletions

View File

@ -7,7 +7,7 @@ hxtoh()
case $str in
HXCOMM*)
;;
STEXI*|ETEXI*) flag=$(($flag^1))
STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
;;
*)
test $flag -eq 1 && printf "%s\n" "$str"
@ -27,12 +27,17 @@ print_texi_heading()
hxtotexi()
{
flag=0
rstflag=0
line=1
while read -r str; do
case "$str" in
HXCOMM*)
;;
STEXI*)
if test $rstflag -eq 1 ; then
printf "line %d: syntax error: expected ERST, found '%s'\n" "$line" "$str" >&2
exit 1
fi
if test $flag -eq 1 ; then
printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2
exit 1
@ -40,12 +45,38 @@ hxtotexi()
flag=1
;;
ETEXI*)
if test $rstflag -eq 1 ; then
printf "line %d: syntax error: expected ERST, found '%s'\n" "$line" "$str" >&2
exit 1
fi
if test $flag -ne 1 ; then
printf "line %d: syntax error: expected STEXI, found '%s'\n" "$line" "$str" >&2
exit 1
fi
flag=0
;;
SRST*)
if test $rstflag -eq 1 ; then
printf "line %d: syntax error: expected ERST, found '%s'\n" "$line" "$str" >&2
exit 1
fi
if test $flag -eq 1 ; then
printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2
exit 1
fi
rstflag=1
;;
ERST*)
if test $flag -eq 1 ; then
printf "line %d: syntax error: expected ETEXI, found '%s'\n" "$line" "$str" >&2
exit 1
fi
if test $rstflag -ne 1 ; then
printf "line %d: syntax error: expected SRST, found '%s'\n" "$line" "$str" >&2
exit 1
fi
rstflag=0
;;
DEFHEADING*)
print_texi_heading "$(expr "$str" : "DEFHEADING(\(.*\))")"
;;