1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #! /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
- }' "$@"
|