51 lines
1.5 KiB
Bash
51 lines
1.5 KiB
Bash
#!/usr/bin/env sh
|
||
|
||
temp="/tmp/clean-hp-tempXXXXXXXXXX"
|
||
tempname=$(mktemp "$temp")
|
||
|
||
trap 'rm "$temp"' INT TERM QUIT
|
||
|
||
quote_removal() {
|
||
previous_line=""
|
||
merge=""
|
||
while read -r line; do
|
||
if echo "$previous_line" | grep -q '^"'; then
|
||
if echo "$line" | grep -q '^"'; then
|
||
merge="$previous_line $(echo "$line" | cut -c 2-)"
|
||
else
|
||
merge="$previous_line $line"
|
||
fi
|
||
fi
|
||
if echo "$merge" | grep -Eq '^"[^"]+"[\.!]?$'; then
|
||
echo "$merge"
|
||
previous_line=""
|
||
else
|
||
if echo "$line" | grep -q '^"'; then
|
||
if [ -n "$merge" ]; then
|
||
previous_line="$merge"
|
||
elif echo "$line" | grep -Eq '"[\.!]?$'; then
|
||
echo "$line" | sed -E 's|(")([\.!])$|\2|'
|
||
previous_line=""
|
||
else
|
||
previous_line="$line"
|
||
fi
|
||
elif echo "$line" | grep -Eq '"[\.!]?$'; then
|
||
echo "$merge"
|
||
previous_line=""
|
||
else
|
||
[ -n "$previous_line" ] && echo "$previous_line"
|
||
echo "$line"
|
||
previous_line=""
|
||
fi
|
||
fi
|
||
merge=""
|
||
done < "${1:-/dev/stdin}"
|
||
}
|
||
|
||
sed -E 's|^--?||;s|^"?–||;s|—||;s|―||;s|^_||;s|^ ||' < "${1:-/dev/stdin}" |
|
||
uniq | quote_removal | sed -E 's|^"+ ?||' > "$tempname"
|
||
sh until-no-change.sh "sed '/,$/ {N; s/\n/ /g;}' < '$tempname' | uniq" \
|
||
'sed "/,$/ {N; s/\n/ /g;}" | uniq'
|
||
|
||
rm "$tempname"
|