From e93028f9d7f47ae42733745d3de2d99bf4fe1651 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 21 Feb 2016 02:38:10 -0500 Subject: Fix handling of newlines with here-documents Sequential here-documents were getting indented. Everything after a newline was being considered a here-document. --- diff --git a/parsing/lexer.sh b/parsing/lexer.sh index dc0b48d..d559274 100644 --- a/parsing/lexer.sh +++ b/parsing/lexer.sh @@ -86,8 +86,11 @@ next() if ${here_awaiting_end}; then synexp '' else - here_awaiting_end=false - here_awaiting_word=true + case "${here_queue}" in *"${RS}"*) + here_awaiting_end=false + here_awaiting_word=true + ;; + esac fi lgetc lineno=$((${lineno} + 1)) @@ -195,13 +198,7 @@ next_here() here_end="${here_end#*${US}}" here_escaped="${here##*${US}}" here_queue="${here_queue#*${RS}}" - case "${here_queue}" in - *"${RS}"*) - ;; - *) - here_awaiting_word=false - ;; - esac + here_awaiting_word=false line='' word='' @@ -217,14 +214,13 @@ next_here() "${here_end}" ;; "${LF}") - line="${line}${c}" word="${word}${line}" - case "${line}" in "${here_end}${LF}") - lgetc + case "${line}" in "${here_end}") tok="T_WORD${US}${word}" return ;; esac + word="${word}${c}" line='' ;; "${HT}") -- cgit v0.9.1