diff mbox series

[v2,2/8] hxtool: Support SRST/ERST directives

Message ID 20200124162606.8787-3-peter.maydell@linaro.org
State New
Headers show
Series qemu-img, qemu-trace-stap, virtfs-proxy-helper: convert to rST | expand

Commit Message

Peter Maydell Jan. 24, 2020, 4:26 p.m. UTC
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>
---
 scripts/hxtool | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

Comments

Alex Bennée Jan. 24, 2020, 6:10 p.m. UTC | #1
Peter Maydell <peter.maydell@linaro.org> writes:

> 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>
Philippe Mathieu-Daudé Jan. 27, 2020, 8:23 a.m. UTC | #2
On 1/24/20 5:26 PM, Peter Maydell wrote:
> 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>
> ---
>   scripts/hxtool | 33 ++++++++++++++++++++++++++++++++-
>   1 file changed, 32 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/hxtool b/scripts/hxtool
> index 7d7c4289e32..0003e7b673d 100644
> --- a/scripts/hxtool
> +++ b/scripts/hxtool
> @@ -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(\(.*\))")"
>               ;;
> 

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
diff mbox series

Patch

diff --git a/scripts/hxtool b/scripts/hxtool
index 7d7c4289e32..0003e7b673d 100644
--- a/scripts/hxtool
+++ b/scripts/hxtool
@@ -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(\(.*\))")"
             ;;