This commit is contained in:
Austen Adler 2017-01-08 00:11:10 -05:00
parent d35581a323
commit cc158ba3b7
No known key found for this signature in database
GPG Key ID: 7ECEE590CCDFE3F1
4 changed files with 22 additions and 2508 deletions

2407
Doxyfile

File diff suppressed because it is too large Load Diff

View File

@ -3,18 +3,10 @@
## Requirements
- zsh
- astyle 2.04+
- perl
- doxygen (optional, for checking if all code is documented)
## Usage
```sh
cd path/with/code/
git clone https://github.ncsu.edu/agadler/csc230-autoformat ../autoformat
git clone https://austenwares.com/gogs/autoformat ../autoformat
../autoformat/autoformat.sh
```
## Known Issues
- Automatically formatting this doesn't work (`(true)` doesn't get placed after `while ``): ```
while
(true) {}
```

View File

@ -1,41 +1,29 @@
#!/bin/zsh
# Format all c files
GLOB=( **/*.c )
# For support:
# https://austenwares.com/gogs/stonewareslord/autoformat/src/java
#
# Format all java files
GLOB=( **/*.java )
# Astyle options:
# --mode=c : c formatting
# -xc : Brace attached to class names
# --style=stroustrup : stroustrup style (similar to 1tbs)
# -j : Always add brackets (even on one line if statements)
# -s2 : Three spaces
# -xG : Indent modifiers
# -S : Indent switches
# -K : Indent cases
# -N : Indent namespaces
# -xn : Attach bracket to namespace
# -xl : Attach inlines
# -n : Don't make a backup
# -p : Pad operators
# -H : Pad header (space after if, for, while)
OPTS=( --mode=c -xc --style=stroustrup -j -s2 -xG -S -K -N -xn -xl -n -p -H )
# Process the c files by adding the comment and removing newlines
perl "${0:h}/process.pl" $GLOB
# --mode=java : java formatting
# -xc : Brace attached to class names
# --style=google : google style (similar to 1tbs)
# -j : Always add brackets (even on one line if statements)
# -s2 : Three spaces
# -xG : Indent modifiers
# -xe : Erase blank lines
# -S : Indent switches
# -K : Indent cases
# -N : Indent namespaces
# -xn : Attach bracket to namespace
# -xl : Attach inlines
# -n : Don't make a backup
# -p : Pad operators
# -H : Pad header (space after if, for, while)
OPTS=( --mode=java -xc --style=google -j -s2 -xG -xe -S -K -N -xn -xl -n -p -H )
# Colorize output if you can
if which colout>/dev/null; then
astyle $OPTS $GLOB|\grep -P '^(?!Unchanged)'|colout '(Formatted)' green||true
else
astyle $OPTS $GLOB|\grep -P '^(?!Unchanged)'||true
fi
# Now check for documentation
# Run doxygen, redirecting stdout to dev null, and setting stderr to $OUTPUT
if command -v doxygen >/dev/null; then
OUTPUT=$((doxygen "${0:h}/Doxyfile" > /dev/null) 2>&1)
# If there is output, something went wrong
if [ ! -z "$OUTPUT" ]; then
printf "$OUTPUT\n" >&2
return 2
fi
#TODO: We might need this in the future, bur for now, delete html directory
rm -r html || true
else
printf "You don't have doxygen installed. Can't check documentation\n" >&2
fi

View File

@ -1,59 +0,0 @@
#!/usr/bin/perl
use strict;
use autodie;
use warnings;
use File::Compare;
use File::Basename;
no warnings 'once';
# For every argument (file)
foreach my $file (@ARGV) {
# If it exists
if (-e $file) {
# Load the autoformatted data into $data
my ($data, $old_data) = process_file($file);
# Check if original data matches new data, if it doesn't, write it
# If it matches (there were no changes made), do nothing
if (not $data eq $old_data) {
# Write out the data
open(MYOUTPUTFILE, "+>$file") or die "Error opening output file $!";
print MYOUTPUTFILE $data;
close(MYOUTPUTFILE);
# Tell the user that we changed the file
print "Processed $file\n";
}
}
}
# Creates the automatically formatted file
sub process_file {
my($filename) = "$_[0]";
open(MYINPUTFILE, "<$filename") or die "x $!";
# The formatted file
my($data) = "";
# The original file (used for comparison to see if changes were made)
my($old_data) = "";
# Loop through every line in the file
while(<MYINPUTFILE>) {
# Add data to $old_data
$old_data .= $_;
# Get rid of trailing whitespace
s/\s*$//;
my($line) = $_;
# If it is not a whitespace only line, append it to $data
if($line !~ /^\s*$/) {
$data = $data . "$line\n";
}
}
close(MYINPUTFILE);
# Get rid of final newline
chomp($data);
if ($data !~ /^\s*\/\*\*/) {
# Get the basename of the file, this prevents making the block comment say:
# @file src/folders/code.c
# And instead uses
# @file code.c
my $basename = basename($filename);
$data = "/**\n * \@file $basename\n * \@author Austen Adler (agadler)\n * TODO: Description\n */\n$data";
}
$data .= "\n";
return ($data, $old_data);
}