mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 20:44:16 +00:00 
			
		
		
		
	 b0cecc0d65
			
		
	
	
		b0cecc0d65
		
	
	
	
	
		
			
			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
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| hxtoh()
 | |
| {
 | |
|     flag=1
 | |
|     while read -r str; do
 | |
|         case $str in
 | |
|             HXCOMM*)
 | |
|             ;;
 | |
|             STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
 | |
|             ;;
 | |
|             *)
 | |
|             test $flag -eq 1 && printf "%s\n" "$str"
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| }
 | |
| 
 | |
| print_texi_heading()
 | |
| {
 | |
|     if test "$*" != ""; then
 | |
|         title="$*"
 | |
|         printf "@subsection %s\n" "${title%:}"
 | |
|     fi
 | |
| }
 | |
| 
 | |
| 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
 | |
|             fi
 | |
|             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(\(.*\))")"
 | |
|             ;;
 | |
|             ARCHHEADING*)
 | |
|             print_texi_heading "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")"
 | |
|             ;;
 | |
|             *)
 | |
|             test $flag -eq 1 && printf '%s\n' "$str"
 | |
|             ;;
 | |
|         esac
 | |
|         line=$((line+1))
 | |
|     done
 | |
| }
 | |
| 
 | |
| case "$1" in
 | |
| "-h") hxtoh ;;
 | |
| "-t") hxtotexi ;;
 | |
| *) exit 1 ;;
 | |
| esac
 | |
| 
 | |
| exit 0
 |