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 |
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>
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 --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(\(.*\))")" ;;