From e25b35d2f5cde831d3047e5ea04ce7625e959dbf Mon Sep 17 00:00:00 2001 From: PjrCodes Date: Wed, 20 May 2020 22:53:33 +0530 Subject: [PATCH] Update readme --- README.md | 179 ++++++++++++++++++++++++++++++++++++++++++++++++----- README.pdf | Bin 0 -> 31019 bytes 2 files changed, 162 insertions(+), 17 deletions(-) create mode 100644 README.pdf diff --git a/README.md b/README.md index 9770de7..676ad18 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,186 @@ # CodeStyliser -This is the repository for the Code Styliser utility, written by Pranjal Rastogi. -The Code Styliser utility adds curly braces \[`{}`\] in all C-source \[`.c`\] files and Header \[`.h`\] files under a given directory, wherever needed. -It adds braces after single line `if()`, `for()`, `while()`, `else`, `else if()` statements. +This is the Code Styliser utility. + +The Code Styliser utility adds curly braces (`{}`) in C-source (`.c`) files wherever needed + +It adds braces after single line `if()`, `for()`, `while()`, `else` and `else if()` statements. For example, ```c -if(a == b) +if(condition) statement; ``` will become ```c -if(a == b) { +if(condition) { statement; } ``` -This utility is written in Python 3.7.7, 64-Bit. Currently, you must have Python 3.7.7, 64-Bit installed on your machine for this utility to work. Check [install](#Install) for more details +*It is my suggestion to check all the code once this utility is finished running, as few issues may arise*. + +There is no guarantee that this software will work out of the box without any issues. Please check [License](#License) for more details + +**NOTE:** This utility will replace all `\r\n` line endings with `\n`. + +## Usage -## Install +This utility is written in Python 3.7.7, 64-Bit. However, you **dont** need to have python installed on your machine. -* Make sure you have Python 3.7.7 64-Bit installed on your device. - * If this is not done, Install Python3.7.7 from [python.org](https://www.python.org) -* Now, download `utilities.py` and `codeStyliser.py` from releases into the required directory +The usage is as follows: -* now, just run `$ python3.7 codeStyliser.py .` in the desired directory +* Download the binary file attached into the directory you want to run the utility from. +* Now, just run the file in the following manner + * If you want to run it for a file: + + `$ ./codeStyliser -f file-name` + * Or, if you want to run it for a directory: + + `$ ./codeStyliser -d directory-name` + +* The complete usage of this binary is as follows: + +```shell + usage: codeStyliser.py [-h] (-f file-name | -d directory-name) + + optional arguments: + -h, --help show this help message and exit + -f file-name, --file file-name + file name to format + -d directory-name, --directory directory-name + directory to format files under +``` ## Known issues -Please check [issues](https://github.com/PjrCodes/CodeStyliser/issues) for the latest bugs - +### Encoding issue + +The utility only changes UTF-8 encoded files, it will ignore all other file encodings. + +### Non-keyword block of code + +If a block of code, that is not a keyword( `for()`, `if()`, `while()`, `do`, etc.) is in the code after a keyword, which doesn't have curly braces (`{}`), the closing curly brace (`}`) is added in the wrong position by the utility. + +For example, + +```c +for (...) + NOT_A_KEYWORD () { + statement 1; + statement 2; + ... + } +``` + +becomes: + +```c +for (...) { + NOT_A_KEYWORD () { + statement 1; +} + statement 2; + ... + } +``` + +This doesnt happen if the block of code starts on a keyword + +### Tab indentation error + +If the characters used to indent keywords, are tabs (`\t`), then the output code will not be indented properly. + +The indented characters must always use spaces to indent. + +For example, + +```c + for(...) + statement; +``` + +becomes + +```c + for(...) { + statement; + } +``` + +if the characters used to indent the `for(...)` are tabs, and not spaces. + +### Hash ignore + +The code will ignore all keywords that have a `#` on the next immediate valid line. + +A valid line is a line which has no comment and isnt a blank line. + +For example, + +```c + for(...) + #endif + + for(...) + + // comment + + #endif + + for(...) statement; + #endif +``` + +Here, the `for(...)` is ignored, i.e. *NO* braces will be added. + +```c +for(...) +foo; +#endif +``` + +In the above case, the `for(...)` is not ignored, i.e. braces will be added. + +### Issues with Comments + +Comments like the following will cause issues, as explained in this block: + +```c +// the following for(); isnt detected + +/*comment*/ for(...) + statement; + +// this will result in an error, and this line will be ignored + +for( /*comment*/ ) + statement; + +// this for is also not detected +/*comment*/ for(...) //comment + statement; + +// Similiarly, this for is also not detected +/*comment*/ for() /*comment*/ + statement; + +// Here, the code results in an UnboundLocalError + +/* +foo */ for(...) statement; //bar + +``` + ## License -Copyright (C) Pranjal Rastogi 2020 -This utility has no warranty. -license: BSD-2 Clause -Please see LICENSE for more information +**Copyright (c) 2020, Pranjal Rastogi,** + +**All rights reserved.** + +This utility has **NO** warranty. + +This utility is licensed under a **BSD 2-Clause License**, please see LICENSE for more information diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3f3dcd1cf710d65c96edb211c153c49d613cae6b GIT binary patch literal 31019 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