1*6afeb397SPaolo Bonzini#! /bin/sh 2*6afeb397SPaolo Bonzini# 3*6afeb397SPaolo Bonzini# Fix multiline comments to match CODING_STYLE 4*6afeb397SPaolo Bonzini# 5*6afeb397SPaolo Bonzini# Copyright (C) 2018 Red Hat, Inc. 6*6afeb397SPaolo Bonzini# 7*6afeb397SPaolo Bonzini# Author: Paolo Bonzini 8*6afeb397SPaolo Bonzini# 9*6afeb397SPaolo Bonzini# Usage: scripts/fix-multiline-comments.sh [-i] FILE... 10*6afeb397SPaolo Bonzini# 11*6afeb397SPaolo Bonzini# -i edits the file in place (requires gawk 4.1.0). 12*6afeb397SPaolo Bonzini# 13*6afeb397SPaolo Bonzini# Set the AWK environment variable to choose the awk interpreter to use 14*6afeb397SPaolo Bonzini# (default 'awk') 15*6afeb397SPaolo Bonzini 16*6afeb397SPaolo Bonziniif test "$1" = -i; then 17*6afeb397SPaolo Bonzini # gawk extension 18*6afeb397SPaolo Bonzini inplace="-i inplace" 19*6afeb397SPaolo Bonzini shift 20*6afeb397SPaolo Bonzinifi 21*6afeb397SPaolo Bonzini${AWK-awk} $inplace 'BEGIN { indent = -1 } 22*6afeb397SPaolo Bonzini{ 23*6afeb397SPaolo Bonzini line = $0 24*6afeb397SPaolo Bonzini # apply a star to the indent on lines after the first 25*6afeb397SPaolo Bonzini if (indent != -1) { 26*6afeb397SPaolo Bonzini if (line == "") { 27*6afeb397SPaolo Bonzini line = sp " *" 28*6afeb397SPaolo Bonzini } else if (substr(line, 1, indent + 2) == sp " ") { 29*6afeb397SPaolo Bonzini line = sp " *" substr(line, indent + 3) 30*6afeb397SPaolo Bonzini } 31*6afeb397SPaolo Bonzini } 32*6afeb397SPaolo Bonzini 33*6afeb397SPaolo Bonzini is_lead = (line ~ /^[ \t]*\/\*/) 34*6afeb397SPaolo Bonzini is_trail = (line ~ /\*\//) 35*6afeb397SPaolo Bonzini if (is_lead && !is_trail) { 36*6afeb397SPaolo Bonzini # grab the indent at the start of a comment, but not for 37*6afeb397SPaolo Bonzini # single-line comments 38*6afeb397SPaolo Bonzini match(line, /^[ \t]*\/\*/) 39*6afeb397SPaolo Bonzini indent = RLENGTH - 2 40*6afeb397SPaolo Bonzini sp = substr(line, 1, indent) 41*6afeb397SPaolo Bonzini } 42*6afeb397SPaolo Bonzini 43*6afeb397SPaolo Bonzini # the regular expression filters out lone /*, /**, or */ 44*6afeb397SPaolo Bonzini if (indent != -1 && !(line ~ /^[ \t]*(\/\*+|\*\/)[ \t]*$/)) { 45*6afeb397SPaolo Bonzini if (is_lead) { 46*6afeb397SPaolo Bonzini # split the leading /* or /** on a separate line 47*6afeb397SPaolo Bonzini match(line, /^[ \t]*\/\*+/) 48*6afeb397SPaolo Bonzini lead = substr(line, 1, RLENGTH) 49*6afeb397SPaolo Bonzini match(line, /^[ \t]*\/\*+[ \t]*/) 50*6afeb397SPaolo Bonzini line = lead "\n" sp " *" substr(line, RLENGTH) 51*6afeb397SPaolo Bonzini } 52*6afeb397SPaolo Bonzini if (is_trail) { 53*6afeb397SPaolo Bonzini # split the trailing */ on a separate line 54*6afeb397SPaolo Bonzini match(line, /[ \t]*\*\//) 55*6afeb397SPaolo Bonzini line = substr(line, 1, RSTART - 1) "\n" sp " */" 56*6afeb397SPaolo Bonzini } 57*6afeb397SPaolo Bonzini } 58*6afeb397SPaolo Bonzini if (is_trail) { 59*6afeb397SPaolo Bonzini indent = -1 60*6afeb397SPaolo Bonzini } 61*6afeb397SPaolo Bonzini print line 62*6afeb397SPaolo Bonzini}' "$@" 63