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