| #! /bin/sh | |
| # | |
| # Fix multiline comments to match docs/devel/style.rst | |
| # | |
| # Copyright (C) 2018 Red Hat, Inc. | |
| # | |
| # Author: Paolo Bonzini | |
| # | |
| # Usage: scripts/fix-multiline-comments.sh [-i] FILE... | |
| # | |
| # -i edits the file in place (requires gawk 4.1.0). | |
| # | |
| # Set the AWK environment variable to choose the awk interpreter to use | |
| # (default 'awk') | |
| if test "$1" = -i; then | |
| # gawk extension | |
| inplace="-i inplace" | |
| shift | |
| fi | |
| ${AWK-awk} $inplace 'BEGIN { indent = -1 } | |
| { | |
| line = $0 | |
| # apply a star to the indent on lines after the first | |
| if (indent != -1) { | |
| if (line == "") { | |
| line = sp " *" | |
| } else if (substr(line, 1, indent + 2) == sp " ") { | |
| line = sp " *" substr(line, indent + 3) | |
| } | |
| } | |
| is_lead = (line ~ /^[ \t]*\/\*/) | |
| is_trail = (line ~ /\*\//) | |
| if (is_lead && !is_trail) { | |
| # grab the indent at the start of a comment, but not for | |
| # single-line comments | |
| match(line, /^[ \t]*\/\*/) | |
| indent = RLENGTH - 2 | |
| sp = substr(line, 1, indent) | |
| } | |
| # the regular expression filters out lone /*, /**, or */ | |
| if (indent != -1 && !(line ~ /^[ \t]*(\/\*+|\*\/)[ \t]*$/)) { | |
| if (is_lead) { | |
| # split the leading /* or /** on a separate line | |
| match(line, /^[ \t]*\/\*+/) | |
| lead = substr(line, 1, RLENGTH) | |
| match(line, /^[ \t]*\/\*+[ \t]*/) | |
| line = lead "\n" sp " *" substr(line, RLENGTH) | |
| } | |
| if (is_trail) { | |
| # split the trailing */ on a separate line | |
| match(line, /[ \t]*\*\//) | |
| line = substr(line, 1, RSTART - 1) "\n" sp " */" | |
| } | |
| } | |
| if (is_trail) { | |
| indent = -1 | |
| } | |
| print line | |
| }' "$@" |