# Artistic Style Release Notes Archives

### Artistic Style 2.04 (November 2013)

- Add new programming language Objective-C.
- Add new bracket style option "style=google" (-A14).
- Add new option "indent-preproc-cond" (xw) to indent preprocessor conditional statements (#118).
- Add new bracket modify options "attach-namespaces", "attach-classes", "attach-inlines", and "attach-extern-c".
- Add new option "indent-modifiers" (-xG) to indent class access modifiers one-half indent (#130).
- Add new option "remove-brackets" (-xj) to remove brackets from single line conditional statements.
- Add new option "remove-comment-prefix" (-xp) to remove the leading '*' from multi-line comments.
- Add new option "align-method-colon" (-xM) to align Objective-C method colons.
- Add new option "pad-method-colon=#" (-xP#) to space pad Objective-C method colons.
- Add new options "pad-method-prefix" (-xQ), and "unpad-method-prefix" (-xR) to pad the Objective-C "-" and "+" method prefix.
- Add new dll entry point AStyleMainUtf16 for processing C# UTF-16 strings.
- Add formatting of C++11 raw string literals (#222).
- Add "style=knf" as an alternative to "style=linux".
- Remove depreciated "bracket=" options.
- Improve recognition and formatting of pointers and references (#174 and other changes).
- Improve the recognition of block-opening brackets.
- Improve code using a static code analyzer (#195).
- Change "max-code-length" to include Objective-C methods.
- Change "indent-elseifs" and "break-blocks" to look ahead only if in command-type brackets (speed improvement).
- Fix linux bracket styles to break the opening bracket in inline function definitions (#185).
- Fix indentation of switch block comments (#164).
- Fix enums to indent with tabs when requested (#92, #121).
- Fix formatting of rvalue reference without a name in a declaration (#219).
- Fix "pad-first-paren-out" to not pad if the following parens are empty (#232).
- Fix end-of-statement reset when comments follow closing bracket.
- Fix the ASBeautifier active and waiting stacks to delete the ASBeautifier objects before deleting the pointers.
- Fix ASBeautifier "init" to delete the tempStack vectors before deleting the tempStack.
- Fix Linux piping problem by changing "cin" input to build a stringstream before formatting.
- Fix to identify the correct bracket type when 'extern "C"' is part of the enum definition.
- Fix to clear 'extern "C"' variables when the block is closed.
- Fix unindented 'extern "C"' to not indent when in a #else preprocessor directive.
- Fix not always correctly formatting linux type brackets for enum blocks.
- Fix align-pointer in a range-based for statement (#217).
- Fix pointer-reference argument alignment to correctly position a following comment (#235).
- Fix to not attach a bracket to a line ending in a backslash '\' (#186, #214, #220).
- Fix to recognize templates using multiple lines (#85, #87, #136).
- Fix formatting of template continuation lines (#85, #87, #136).
- Fix to allow '^' as an array operator (#233).
- Fix an "enum" argument being mistaken for an enumeration (#211).
- Fix to recognize a non-instatement array after a "},{" sequence.
- Fix "pad-oper" to not pad before a following comma.
- Fix recognition of an operator when the calculation contains a bitwise "not" '~' (#166).
- Fix to allow a preprocessor statement within a preprocessor define (#238).
- Fix preprocessor comparison to check for whole words (#246).
- Fix "add-brackets" when a line contains more than one paren pairs (#181).
- Fix to allow Mac old CR line endings in the options file (#129).
- Refactor to aid debugging and improve design and decomposition:
  - Move ALL preliminary indentation calculations to computePreliminaryIndentation() in ASBeautifier.
  - Move calculation of 'force tab' indents to preLineWS() in ASBeautifier.
  - Combine methods init() and init(ASSourceIterator*) in ASBeautifier.
  - Extract method adjustParsedLineIndentation() in ASBeautifier.
  - Extract method parseCurrentLine() in ASEnhancer.
  - Remove astyle_main.cpp unused functions getFilesUnchanged, getOptionsFileRequired, and setOptionsFileRequired.

### Artistic Style 2.03 (April 2013)

- Add new option "indent=force-tab-x=#" (-xT#) to allow a tab length that different from the indent length (3430662).
- Add new option, "pad-first-paren-out" (xd), to pad only the first paren in a series on the outside (3350356).
- Add new option "max-code-length=#" (-xC#) to limit the length of code on a line.
- Add new option "break-after-logical" (-xL) to modify a "max-code-length" line break for conditionals.
- Add new option "close-templates" (-xy) to close whitespace in the angle brackets ">" of template definitions.
- Add formatting of C++ rvalue references (&&) using the existing "align-pointer" and "align-reference" options.
- Add formatting of C++/CLI managed pointers (the "^" character) to the "align-pointer" option.
- Add translations for Dutch, Finnish, Italian, Japanese, Korean, Polish, Portuguese, Russian, Swedish, and Ukrainian.
- Remove byte-order-mark from ASLocalizer.cpp.
- Change the short option for delete-empty-lines from "xd" to "xe".
- Change the ASTYLE_LIB option to remove __declspec for a Visual C static library when ASTYLE_NO_VCX is also declared.
- Change to remove any space padding in a pointer to pointer (**).
- Fix "break-elseifs" to format one-line "if" and "else" statements the same as when the option is not used.
- Fix "break-elseifs" to break else-if statements when "keep-one-line-statements" also is requested.
- Fix "break-elseifs" to correctly format comments preceding the else-if.
- Fix C# not correctly identifying lambda expressions as a command-type bracket.
- Fix C# preprocessor statements adding extra empty lines when "break-blocks" is used.
- Fix C# padding "get" and "set" statements that are not headers when "break-blocks" is used.
- Fix C# to recognize the "#line" statement.
- Fix C++11 standard for range-based "for" loops (3458402, 3480095).
- Fix C++11 standard for "enum" with a base type (3458402).
- Fix C++11 standard for template closing angle brackets (no space required) (3495192).
- Fix C/C++ keyword 'extern "C"' in a preprocessor causing an extra indent (1514844, 2953388, 2963382, 3093842, 3467479).
- Fix breaking after a switch "default" statement when "break-elseifs" is used without "keep-one-line-statements" (3559365).
- Fix in-statement arrays to indent correctly when they exceed the "max-instatement-indent".
- Fix quote continuation sometimes being processed as a preprocessor directive (3445475).
- Fix formatting of some conditional statements on a continuation-line.
- Fix Java formatting of generics with wildcards (3428140).
- Fix formatting of pointers and references to work with the new "max-code-length" option.
- Fix formatting of pointers and references after a template close.
- Fix formatting of empty attached brackets (3505002).
- Fix C comments beginning a line breaking if they follow a semi-colon (3502700).
- Fix "pad-header" not padding "return" and "throw" statements (3509134).
- Fix recognition problems with templates.
- Fix "struct" return type being mistaken for a struct.
- Fix "pad-oper" in java for-each loop.
- Fix recognition of a macro multi-line comment (3414970).
- Fix bracketTypeStack entries added by #if and #else if the # is separated from the word.
- Fix C++ breaking a line on an access modifier in a one-line block when "keep-one-line-blocks" is used.
- Fix memory leak when "ascii" option is used.
- Fix memory leak when a preprocessor statement is used without a closing #endif.
- Fix preprocessor directive to allow compiling with mingw-x64 compiler.
- Fix redirection on Windows so it does not hang when Linux line ends are used (3514712).
- Fix redirection on Linux to output the correct line ends (3514712).
- Fix non-portable return value on locale name (3452574).
- Fix assert errors caused by not checking the text length on the return from peekNextText().
- Fix spelling of "depreciated" in help message (3454735).
- Refactor to improve design and decomposition:
  - Fix warning messages from Visual Studio static code analysis.
  - Fix warning messages from cppcheck, except for constructor uninitialized variables (false positive).
  - Remove astyle_main.h dependency from ASLocalizer.h
  - Remove appendChar() from the inline functions.
  - Extract methods for pointer or reference alignment in ASFormatter.

### Artistic Style 2.02.1 (November 2011)

- Add to C# the recognition of pointers and address-of operators.
- Improve recognition of pointers and references (3,314,499, 3,298,204, and 2,990,608).
- Improve alignment of a reference to a pointer (*&).
- Fix crash with "align-pointer=type" when pointer to pointer (**) starts a new line (3,431,431).
- Fix breaking after a "case" statement when "break-elseifs" is used without "keep-one-line-statements" (3,421,577, and 3,314,247).
- Fix "pad-oper" used with "keep-one-line-statements" not padding operators in a one-line "case" statement.
- Fix not recognizing a "pointer dereference" or "address of" that follows a comment (3,431,431).
- Fix "break-blocks" used with "delete-empty-lines" not correctly breaking blocks on the first run.
- Fix "pad-oper" not padding the alternate comparison operators "and" and "or" (3,342,373).

### Artistic Style 2.02 (May 2011)

- Add new program module, ASLocalizer, containing language translations.
- Add new short option prefix "x" to allow for expansion of short options.
- Add new command line only option "ascii" (-I).
- Add new bracket style, "style=pico" (-A11).
- Add new bracket style, "style=lisp" (-A12).
- Add new option "align-reference=" (-W#) (3,136,744).
- Add new options ignore-exclude-errors (-i) and ignore-exclude-errors-x (-xi) (3,259,910).
- Add new option "style=break" for Allman style brackets.
- Add new option "style=attach" for Java style brackets.
- Add processing of UTF-16 files by converting to UTF-8 and back to UTF-16.
- Add Microsoft C++ extensions for try-finally and try-except statements (3,222,216).
- Add "override" and "sealed" modifiers (Visual C specific) to preCommandHeaders vector (3,167,978).
- Add "case" and "default" to the list of formatters in ASFormatter (3,276,212).
- Remove "indent-brackets" and "indent-blocks" from the valid options.
- Remove "volatile" from headers and remove comparisons in ASBeautifier.
- Change "delete-empty-lines" short option from "x" to "xd".
- Change "max-instatement-indent" maximum value from 80 to 120 (3,255,930).
- Change "brackets=horstman" to "brackets=run-in", used for both Horstmann and Pico styles.
- Change C enumerations to allow in-statement indents (3,280,454).
- Change functions setting the "indent-brackets" and "indent-blocks" variables from public to protected.
- Change to indent lines beginning with an assignment operator (3,292,880).
- Change to abort if UTF-32 files are detected.
- Change "Cannot set native locale" error message from cout to cerr (3,139,873).
- Fix Linux infinite loop when a directory name is entered instead of a file name.
- Fix trying to process directories as files when a wildcard is used without recursive (3,134,108).
- Fix processing a "const" variable as a "const" method when it follows a header (3,168,156).
- Fix indentation of a one-line block that follows a header.
- Fix breaking a preprocessor define that has code after a comment end (3,132,531).
- Fix "pad-oper" padding a dereference that follows a C-style cast (3,259,713).
- Fix "unpad-parens" not recognizing an xor (^) operator (3,285,639).
- Fix "break-blocks" procedure for "case" and "default" headers.
- Fix "add-brackets" adding brackets to the "while" of a "do-while" loop (3,267,880).
- Fix "add-brackets" adding brackets to an empty statement.
- Fix "pad-paren" used with "align-pointer=name" incorrectly adding an extra space.
- Fix not clearing a flag when a "?" conditional is included in an "if" statement (2,989,638).
- Fix incorrect indentation when "volatile" modifier is used (3,279,856).
- Fix indentation for Microsoft "#pragma region" and "#pragma endregion" preprocessor directives.
- Fix not printing a zero for formatted numbers.
- Fix indentation of a class opening bracket followed by a class modifier on the same line when indent‑namespaces and indent‑classes are used.
- Refactor to aid debugging, improve speed, and improve the design and decomposition:
  - Extract method processProcessor() from beautify() in ASBeautifier.
  - Extract method computePreliminaryIndentation() from beautify() in ASBeautifier.
  - Extract method parseCurrentLine() from beautify() in ASBeautifier.
  - Remove unnecessary copies to outBuffer variable in ASBeautifier.
  - Add preCommandHeaders vector to ASBeautifier and remove the "const" modifier comparisons.
  - Change static vectors to member variables.
  - Add isDigit() function to avoid the assert statements in Visual C.

### Artistic Style 2.01 (November 2010)

- Add recognition of language characters supported by the native locale.
- Add formatting of numbers according to the native locale.
- Add checksum verification to source file output.
- Add formatting of MFC macros BEGIN_DISPATCH_MAP, BEGIN_EVENT_MAP, and BEGIN_PROPPAGEIDS.
- Add error message if --recursive is used without a wildcard in the file name.
- Add private (unusable) copy constructors for classes with dynamic allocation.
- Add error message if the "cin" stream cannot be processed because a pipe is used.
- Improve recognition of ARRAY_TYPE brackets.
- Improve formatting of multi-line comments when the number of leading spaces must be changed.
- Improve formatting of embedded SQL when the number of leading spaces must be changed.
- Improve recognition of C++ templates.
- Change --style=linux to always use a minimum conditional indent of one-half the indent length.
- Change --pad-oper to pad operators in block parens.
- Change to indent OpenMP pragmas with the code.
- Change to display all (instead of one) option errors before abort.
- Change the second argument of the fpError typedef from "char*" to "const char*".
- Change Linux Makefiles to allow external values for CFLAGS and LDFLAGS.
- Change all destructors to virtual.
- Fix crash when --break-blocks is used and there is no closing bracket.
- Fix deleting the previous line when a closing bracket follows a comment close.
- Fix not recognizing text in quotes when identifying struct access modifiers.
- Fix not popping the paren stack when a bracket precedes an end of line comment.
- Fix not breaking a closing bracket when empty parens are enclosed in a single line block.
- Fix indenting of C# anonymous statement closing bracket.
- Fix recognition of C# non in-statement arrays.
- Fix breaking single line blocks for C# abstract methods.
- Fix not always clearing isNonInStatementArray flag.
- Fix indenting "case" statements in a preprocessor definition when --indent-preprocessor is not requested.
- Fix not recognizing the "volatile" type qualifier as a keyword.
- Fix class initializers not being recognized as an in-statement indent.
- Fix indenting Java abstract methods when "new" starts the line and brackets are broken.
- Fix broken initializer lines (ending with comma) when there is more than one space after the type.
- Fix --brackets=attach inserting a bracket inside comments following a preprocessor statement.
- Fix --brackets=attach attaching an array bracket from a one line block to the previous line.
- Fix --brackets=horstmann not breaking a comment line when the comment ends the line with a bracket.
- Fix --pad-oper to recognize all * and & operators within a function call.
- Fix --unpad-paren to recognize * and & operators within a function call.
- Fix --pad-paren used with --delete-empty-lines causing a space to be added at end of line in some cases.
- Fix --pad-paren padding a closing paren followed by a block paren.
- Fix --add-brackets when a header is followed by a semi-colon.
- Fix --align-pointer to pad or unpad pointers followed by parens or comments.
- Fix --align-pointer to pad or unpad pointers following a scope resolution operator.
- Fix --align-pointer to pad or unpad pointers that end the line.
- Fix --align-pointer used with --pad-parens-out causing a space to be padded for each run.
- Fix --break-blocks used with --delete-empty-lines causing an assert error when end of file is reached.
- Fix --break-blocks used with --delete-empty-lines causing an assert error for some combinations of comment lines.
- Fix --break-blocks used with --delete-empty-lines causing a duplicate line in some cases.
- Fix --break-blocks used with --delete-empty-lines not always breaking opening blocks.
- Fix --break-blocks used with --delete-empty-lines not always deleting empty lines for closing blocks.
- Fix --break-blocks used with --fill-empty-lines not always correctly filling empty lines in a switch statement.
- Fix --unpad-paren used with --pad-paren-in not padding between opening parens when multiple parens are used.
- Fix --pad-oper incorrectly padding a template with a default parameter.
- Fix ASBeautifier findOperator() method to recognize a C# lambda (=>) operator.
- Fix ASFormatter nextLine() method to output an entire operator instead of individual characters.
- Fix incorrectly identifying "*" as pointers in block parens.
- Fix MinGW -Wshadow warnings.
- Fix VS2010 "string subscript out of range" asserts.
- Refactor:
  - Remove template definition for parseOptions() by using a vector reference instead of iterators as function arguments.
  - New ASOptions class to encapsulate global functions used by both the console and library builds.
  - Replace argc and argv in processOptions() with a vector to simplify test cases.
  - Replace IS_OPTION and IS_OPTIONS macros with ASOptions methods.
  - Replace GET_PARAM and GET_PARAMS macros with ASOptions methods.
  - Extract ASFormatter methods checkIfTemplateOpener() and isClosingHeader().

### Artistic Style 1.24 (February 2010)

- Add new option ‑‑brackets=horstmann (-g) to place run‑in statements on the same line as an opening bracket.
- Add new style --style=horstmann (-A9) using horstmann brackets to predefined styles.
- Add new option ‑‑add-brackets (-j) and --add-one-line-brackets (-J) to place brackets around one line statements.
- Add new style --style=1tbs and --style=otbs (-A10) using linux brackets and the --add-brackets option to predefined styles.
- Add new option ‑‑pad‑header (‑H) from Mario Gleichmann to insert space padding after paren headers.
- Add new option ‑‑align‑pointer=type (-k1), ‑‑align‑pointer=middle (-k2) and ‑‑align‑pointer=name (-k3) from J P Nurmi.
- Add new option ‑‑lineend=windows (-z1), ‑‑lineend=linux (-z2) and ‑‑lineend=macold (-z3) from MrTact.
- Add new option ‑‑indent‑col1‑comments (-Y) to indent C++ comments beginning in column one.
- Add formatting of embedded SQL statements in C/C++.
- Add rejecting 16 or 32 bit file encoding and display a warning message.
- Remove .tmp file by using ostringstream instead of ofstream.
- Remove depreciated option style=kr.
- Remove trace file from ASFormatter and use 'cout' instead.
- Improve assembler statement processing to include extended assembly.
- Improve assembler statement processing to include Microsoft specific lines and blocks.
- Improve recognition of pointers and references vs. arithmetic operators.
- Improve recognition of arithmetic operators for --pad-oper (-p) option.
- Change "class" initializer statement to one indent.
- Change "class" initializer statement continuation lines to align on the first initializer.
- Change predefined styles to allow changes to spaces per indent.
- Change --style=stroustrup to 5 spaces per indent.
- Change --style=linux default minimum conditional indent to 4.
- Change default formatting to leave paren headers unchanged instead of inserting space padding.
- Change ‑‑unpad‑paren to unpad headers unless padding is requested.
- Change NONE_MODE brackets to allow run-in statements from horstmann type brackets.
- Change array brackets to allow run-in statements from horstmann type brackets.
- Change --min-conditional-indent to allow for statements preceded by a bracket (horstmann brackets).
- Change ASBeautifier and ASFormatter to output an entire comment line instead of characters.
- Change quote formatting in ASFormatter to output the entire string instead of single characters.
- Change from Ettl Martin for cppcheck compliance.
- Change space padding of line end comments to one space when the proper alignment cannot be maintained.
- Change spaces per tab minimum value from 1 to 2.
- Change the help display of "Formatting Options" to "Formatting Options" and "Padding Options".
- Fix MinGW file globing by moving the _CRT_glob variable outside the astyle namespace.
- Fix default line end processing to always output consistent line ends.
- Fix identification of pointer dereferences and address-of indicators.
- Fix memory leaks by changing static vectors to static vector pointers so the object can be deleted.
- Fix console build trying to use Unicode character set.
- Fix stringEndsWith method when end is longer than the string.
- Fix --exclude option rejecting a full file path.
- Fix --verbose option when used with --quiet.
- Fix --quiet option for excluded files and directories.
- Fix --indent-classes for C++ structs containing access modifiers.
- Fix formatting of variable types with multiple names.
- Fix from Christian Stimming for alignment of << and >> operators.
- Fix in-statement indent of "enum class".
- Fix 'if' statement following an 'else' sometimes attaching to a comment.
- Fix recognition of non-indent line comments in the first two lines of a source file.
- Fix non-instatement array to recognize an empty bracket.
- Fix indenting non-indent line comments in an event table or message map.
- Fix to move comments when breaking one line blocks and -keep-one-line-statements is used.
- Fix to recognize parens in template definitions.
- Fix recognition of class initializer when class description contains multiple lines.
- Fix from Colin D Bennett for 64-bit comparison.
- Fix console error procedure to terminate on an error.
- Fix 'return' statement for padding or not padding arithmetic operators.
- Fix C# 'delegate' and 'unchecked' not being identified as keywords.
- Fix occasional array formatting problem with one-line blocks when indent-brackets is used.
- Fix to check for max-instatement-indent when the previous line ends with an opening paren.
- Fix predefined style options to allow the use of --indent=tab (-t) and --indent=force-tab (-T) options.
- Fix --in-statement indent to allow for non-indentation tabs in the line.
- Fix formatting problems with non in-statement arrays.
- Fix infinite loop when preprocessor #else is missing #if.
- Fix Borland string compares to check for comparison past the end of string.
- Fix ‑‑fill‑empty‑lines when ‑‑indent=force‑tab is also used.
- Fix break-blocks formatting with preceding mixed comments and line comments.
- Fix not breaking a closing bracket following a comment.
- Fix attached brackets to not change empty brackets when both are on the same line.
- Fix attached brackets sometimes deleting a previous comment line when the bracket cannot be attached.
- Fix attached brackets attaching a closing header to a single line block.
- Fix broken brackets breaking a single line block before a comment.
- Fix 'extern' keyword using in-statement indents instead of tab indents.
- Fix errno checking problem on old OpenVMS versions.
- Fix deleting a space before a line end comment when attaching 'else' to a closing bracket.
- Fix adding a space before a line end comment when the comment is preceded by a tab.
- Fix to leave tab indentation on no-indent line comments.
- Fix comments when a bracket is added or removed from a line.
- Fix indenting preprocessor statements in a wxWidgets or MFC macro.
- Fix memory leak reporting of global and static class member vectors.
- Refactor to implement unit testing and improve design and decomposition:
  - Replace multiple line conditional statements with a method to eliminate complex "not" (!) logic.
  - Change to call standardizePath when a vector entry is built.
  - Change g_console from an object to an object pointer to allow rebuilding the object.
  - Change ASConsole variables to private with getters and setters.
  - Change processOptions method to return to main instead of exiting.
  - Move formatFile call from getFilePaths to main.
  - Move peekNextChar function from ASBeautifier to ASBase.
  - Move multi-line comment alignment from ASBeautifier to ASFormatter.
  - Encapsulate global variable isModeManuallySet.
  - Extract methods formatOpeningBracket, formatClosingBracket and isCurrentBracketBroken.
  - Extract methods formatCommentOpener and formatCommentBody.
  - Extract methods formatLineCommentOpener and formatLineCommentBody.
  - Extract methods formatQuoteOpener and formatQuoteBody.
  - Extract methods processFiles and writeOutputFile.
  - Extract methods processSwitchBlock and findCaseColon.
  - Extract method updateExcludeVector.
  - Extract method copyTempStacks.
  - Extract method formatCinToCout.
  - Extract method isLineBreakBeforeClosingHeader.

### Artistic Style 1.23 (February 2009)

- Add --brackets=stroustrup (-u) to bracket types.
- Add --style=stroustrup to predefined styles.
- Add --style=whitesmith to predefined styles.
- Add --style=banner to predefined styles.
- Add --style=k&r and --style=k/r to predefined styles.
- Add --style=allman and --style=bsd to predefined styles.
- Change --style=kr to --style=java.
- Add short options -A1 thru -A8 for predefined styles.
- Change the following long options to eliminate duplicate keys (the short options have not changed).
  - --force-indent=tab=# changed to --indent=force-tab=#
  - --brackets=break-closing changed to --break-closing-brackets
  - --pad=oper changed to --pad-oper
  - --pad=paren changed to --pad-paren
  - --pad=paren-out changed to --pad-paren-out
  - --pad=paren-out changed to --pad-paren-in
  - --unpad=paren changed to --unpad-paren
  - --one-line=keep-statement changed to --keep-one-line-statements
  - --one-line=keep-blocks changed to --keep-one-line-blocks
- Add new option --indent=force-tab (assumes tab setting is 4).
- Add new option --delete‑empty‑lines to delete the empty lines within a function.
- Add new option --formatted (-Q) to display only the files that are formatted.
- Change --convert-tabs to replace tabs with spaces and maintain the correct spacing.
- Change --indent-blocks to indent only blocks within a function.
- Change --indent-blocks to NOT indent the opening bracket for namespaces, classes, and interfaces.
- Change --indent-blocks and --indent-brackets to NOT indent namespaces unless --indent-namespaces is used.
- Change --indent-blocks and --indent-brackets to always break closing headers so the 'else' aligns with the corresponding 'if'.
- Change --indent-blocks and --indent-brackets to be mutually exclusive (--indent‑blocks will be used).
- Fix --indent-blocks indenting a java 'interface' statement.
- Fix --indent-blocks to indenting opening brackets in a java method containing a 'throws' clause.
- Fix --indent-blocks indenting opening brackets in a java static constructor.
- Fix --indent-blocks formatting in a C++ const function.
- Fix --indent‑brackets indenting brackets within comments.
- Move set-up of predefined styles to ASFormatter so the style options will override all other options.
- Fix --else-if statements to join by default.
- Fix to always space pad after semi‑colons.
- Fix --pad-oper to space pad all commas.
- Fix --break‑blocks and --break‑blocks=all options.
  - Fix to recognize a semi‑colon as end of block when brackets are not used.
  - Fix to break comments preceding a block so that comments are kept with the block.
  - Fix 'for' statement semi‑colons being mistaken for the end of a statement.
  - Fix bracketFormatMode of NONE_MODE to break closing headers.
  - Fix incorrect breaking of a block that follows a comment.
  - Fix breaking of opening and closing headers preceded by a comment.
  - Fix breaking of statements when comments follow a header block.
  - Fix incorrectly breaking blocks for namespaces, interfaces, and classes.
  - Fix incorrectly breaking blocks for access modifiers when keep-one-line-statements is used.
  - Fix to NOT break single line blocks.
  - Fix breaking a closing 'while' statement in a do-while block.
  - Fix preprocessor directives not resetting all variables.
  - Fix peekNextText function not correctly identifying an end of file condition.
- Add C# lambda expression arrow '=>' to list of operators so pad‑oper will not separate.
- Add C# '??' to list of operators so pad‑oper will not separate.
- Fix C# to identify 'add' and 'remove' methods as command type brackets.
- Fix C# indentation of closing headers 'set' and 'remove'.
- Fix C# to identify methods containing a 'where' keyword as block headers.
- Fix C# files to recognize preprocessor statements.
- Fix C# indentation following a #region statement containing a keyword.
- Fix C# to recognize nullable types so --pad‑paren will not separate (e.g. 'int?').
- Fix C# to recognize non-generic default values (e.g. 'default(int)').
- Fix C# indentation when a class declaration contains multiple class statements.
- Fix C# linux bracket placement for an interface statement.
- Fix C# --break-elseifs also breaking 'catch' statements.
- Fix C# --break-blocks breaking of 'set' and 'remove' statements.
- Fix Java static constructor not being identified as a command type bracket.
- Fix Java 'new' array not having an in statement indent.
- Refactor NONE_MODE in ASFormatter to use common procedures with other bracket types.
- Refactor astyle_main to improve maintainability.
  - New class ASConsole to encapsulate console variables.
  - New header file astyle_main.h
  - Move console only functions to ASConsole class.
  - New functions processOptions and processFilePath to improve decomposition.
- Apply patches from Eran Ifrah to remove memory leaks.
- Apply patches from Max Horn for the unary plus operator.
- Fix initialization of vector stack objects to remove memory leaks.
- Add comma (,) to valid options separators in the options file.
- Change to display all (instead of one) --exclude errors before abort.
- Change astyle namespace to include all of astyle_main except the functions called externally.
- Change licensing comments from LGPL version 2.1 to LGPL version 3.
- Change JNI function call from GetVersion to AStyleGetVersion.
- Remove 'extern' keyword from headers, nonParenHeaders, PreBlockStatements, and PreCommandHeaders.
- Fix not always space padding a closing bracket.
- Fix not space padding a closing header when breaking one line statements.
- Fix --keep-one-line-blocks breaking closing headers on broken brackets.
- Fix incorrectly attaching a bracket inside a comment after the end of a statement.
- Add number of output lines processed to the --verbose option display.
- Remove trace file from ASEnhancer and use 'cout' instead.
- Replace INIT_CONTAINER and DELETE_CONTAINER macros with template functions.
- Replace IS_A macro with isBracketType function.
- Add GCC extended operators '<?' and '>?' (min and max) to list of operators.
- Fix indentation and breaking of lines in struct and class bit fields.
- Fix indentation of struct definitions.
- Add 'union' to preDefinitionHeaders.
- Change preBlockStatements and preDefinitionHeaders to be dependent on file type.
- Fix a single quote mark used as an apostrophe in preprocessor directives being processed as a quotation.
- Fix linux bracket formatting in nested namespaces.
- Fix --pad‑paren‑in not converting a tab to spaces if convert‑tabs is requested.
- Fix incorrectly breaking a closing bracket when a header is not present.
- Fix inserting duplicate bracketTypeStack entries when preprocessor directives contain unmatched brackets.
- Fix bracketFormatMode of NONE_MODE to correctly break single line blocks.
- Fix --keep‑one‑line‑blocks breaking 'if' statements when --break‑elseifs is used.
- Remove inefficiencies for speed improvement.
  - Reduce calls to frequently used functions by first checking for specific requirements.
  - New class ASBase to inline frequently used functions and eliminate duplication between classes.
  - Change ASEnhancer from inherited to embedded to eliminate scope resolution requirements.
  - Change ASFormatter to output words instead of characters.
  - Resequence operator vectors and add new findHeader and findOperator functions.
- Fix NONE_MODE brackets to break a statement on the same line as an opening broken bracket.
- Add 'errno' message for file and directory errors in the Linux build.
- Add error checking for file remove and rename procedure.
- Fix Linux abort for file sizes over 2 GB.
- Fix searching the entire directory when only one file is requested.
- Change --preserve-date increment to 2 units for Visual Studio 2008.

### Artistic Style 1.22 (April 2008)

- New --recursive (-r, -R) option to recursively process sub directories.
- New --exclude option to exclude files and sub directories from processing.
- New --verbose (-v) option to display optional information, such as release number and statistical data.
- New --quiet (-q) option to suppress all informational messages.
- Change --version short option to -V.
- Change --convert‑tabs short option to -c.
- Change to NOT write a new or backup file if a file contents has not changed,
- Change console file input procedure to create a .tmp file and preserve the input file on a crash.
- Add Java Native Interface (JNI) for developers.
- New peekNextLine and peekReset functions in ASStreamIterator.
- Change ASEnhancer static variables to class member variables and reset them in the init() function.
- Patch from Jens Krinke to fix stack underrun when the number of closing brackets exceed opening brackets.
- Fix stack underrun when the number of closing parens exceed opening parens.
- Fix processing of C/C++ string literal continuation lines.
- Patch from Emilio Guijarro to correct padding and formatting of C# 'foreach' statements.
- Fix C# to correctly identify accessor calls as not being headers.
- Fix C# accessors (get and set) to break when breaking single line blocks.
- Modify template procedure to process C# generics.
- Fix processing of C# verbatim string literals.
- Fix indentation of C# methods containing 'base' or 'this' keywords.
- Fix indentation of C# methods containing generics.
- Fix indentation of C# enums containing a type.
- Fix indentation of C# catch blocks when 'catch' is a non-paren header.
- Fix C# breaking of linux style brackets for methods containing generics and methods containing accessors.
- Allow @ as a C# identifier prefix.
- Fix assert error on C# UTF-8 files when the byte-order mark (BOM) is not followed by a space or a comment.
- Fix nested preprocessor formatting by adding waitingBeautifierStack, activeBeautifierStack, waitingBeautifierStackLengthStack, and activeBeautifierStackLengthStack to the ASBeautifier copy constructor and class destructor.
- Fix ASStreamIterator end of file procedure for ASTYLE_LIB option.
- Add pragma statements for Intel compiler to disable specific warning messages.
- Move line number accumulators from ASSourceIterator class to private in ASStreamIterator class.
- Fix reset of ASFormatter isInPreprocessor flag when \ is followed by a blank line.
- Fix cin, cout, and cerr continuation lines to be indented.
- Fix indentation of inner classes that inherit a base class.
- Add astyle_main.cpp function declarations to astyle_main.cpp.
- Change global variable prefix from '_' to 'g_'.
- Inline selected ASStreamIterator functions.
- Fix brackets=attach from attaching a bracket to a preprocessor directive.
- Fix brackets=attach and brackets=linux breaking in an array immediately after a preprocessor directive.
- Modify Jack Handy's wildcmp() function to make Windows comparisons case insensitive.
- Fix not indenting a bracket when an attached bracket is broken and the following line is a no-indent comment.
- Add error message if 'options=' file cannot be opened.
- Bypass colon enclosed in quotes when processing 'case' statements.
- Fix brackets=none not always breaking a closing bracket when breaking single line blocks.
- Fix padding of header words that are in a definition (array).
- Fix indentation of line immediately after a case statement where the object is enclosed in parens.
- Fix breaking of multiple case statements when the object is enclosed in parens.
- Fix indentation when there is more than one case statement on a line.
- Remove processing for shouldBreakLineAfterComments (no longer used).
- Fix brackets=break not breaking if before a comment that is not at end of line.
- Fix brackets=none not space padding before a bracket.
- Fix brackets=break and brackets=none not breaking comments following a bracket.
- Fix blank line not being trimmed if inside a comment.
- Fix brackets=break incorrectly space padding a preceding preprocessor statement line.
- Fix brackets=attach attaching two consecutive opening brackets before an end-of-line comment.
- Fix break-blocks not inserting a blank line if a bracket preceding a comment was moved to the following line.
- Add 'X' to selected ASEnhancer variables to prevent conflict with ASBeautifier.
- Fix brackets=none not space padding after a closing bracket that precedes a closing header.
- Change minimum indent edit from 2 spaces to 1 space.
- Change to check for preprocessor definitions in C/C++ files only.
- Fix padding of template definitions when pad=oper is used.
- Fix comment formatting in nested preprocessor definitions.
- Fix header dependencies and warning messages for Linux GCC 4.3.
- Use file name from disk for output to maintain correct case in Windows.
- Fix pad=operator padding a negative value in a case statement.
- Fix incorrect identification of bracket type following a struct statement.
- Fix indentation of blank lines outside of brackets when --fill‑empty‑lines is used with --indent‑blocks or --indent‑brackets.
- Fix ASFormatter not identifying comments in preprocessor directives.
- Fix brackets=attach deleting a preceding blank line in array type brackets.

### Artistic Style 1.21 (June 2007)

- New function, formatArrayBrackets, to improve array formatting and indentation.
- Attach brackets to lines with end-of-line comments.
- Break brackets from lines with end-of-line comments without bringing the comments with them.
- Move ASFormatter and ASBeautifier static initialization from constructor to "init" function to allow for changes in the file type.
- Add --preserve-date (-Z) option.
- New functions formatBrackets, padOperators and PadParens to improve decomposition.
- Add identification of file mode (C, C#, or Java) to file open procedure.
- Keywords in headers now depend on file mode (C, C#, or Java) and object type (formatter or beautifier).
- Remove short options -c (mode=c) and -j (mode=java) since the mode is now set automatically from the file extension.
- Change Linux bracket formatting for header files.
- Fix formatting of empty blocks.
- Expand BracketType definition.
- Fix "do not change" bracket mode inconsistencies with other bracket formatting.
- Remove mode=java from Java predefined style.
- Change long option --errors-to-standard-output to --errors-to-stdout.
- Fix breaking of struct variable declaration.
- Add support for OpenVMS compiler.
- Inline the ASBeautifier function isLegalNameChar.
- Fix no-indent of block comments starting in column 1 or 2.
- Fix formatting of Java anonymous class defined as a method call parameter (bracket within a paren).
- Fix indentation for Java "for each" statement.
- Fix bracket being attached to a preprocessor directive.
- Fix extra indent of single line blocks when a previous line probation header is found.
- Fix formatting of block comments when continuation lines have different leading whitespace characters.
- Fix deleting a blank line before a bracket when brackets=attach.
- Fix segmentation fault on preprocessor continuation line followed by an empty line.
- Fix bad bracket indent that sometimes occurs when brackets=attach and it cannot be attached.
- Fix trimming of comment lines.
- Fix incorrect identification of "new" operator pointers as calculations.
- Fix incorrect identification of assignments as command type bracket.
- Fix incorrect indentation of pointers following a dot operator or pointer.
- Fix attaching "else if" statements to a single line block.
- Fix header recognition problem when header is proceeded by a tab instead of a space.
- Fix line break when colon is followed by a comment.
- Fix ASBeautifier not identifying a template definition.
- Change indents around the end of line to two indents.
- Change header includes to fix header dependencies for Linux GCC 4.3.
- Add output line number for debugging.
- Add filename to trace output.
- Add trace for arrays.
- Add trace for bracketType.
- Fix no-indent comment in a #else preprocessor directive.
- Fix block comment continuation line indent when block comments do not start the line.
- Adjust position of block comments (/*) when padding is added or deleted.
- Fix incorrect formatting if "return" is included in a function name.
- Fix incorrect padding if template depth is greater that one and pad=oper is used.
- Fix incorrect bracket type identification when bracket is followed by a comment.
- Fix incorrect bracket type identification when a "const" method is declared.
- Fix incorrect bracket type identification when pre-definition header is inside a paren.
- Fix deleting a space when attaching a bracket with line comments.
- Fix indentation when the conditional "?" operator is used in a single line statement.
- Fix indentation when single line "if" statement is used.
- Add pointers, multiply operators, and selected variables to do not unpad in paren unpad procedure.
- Return exit code 0 for --version and --help.

### Artistic Style 1.20.2 (February 2007)

- Fix problems with the new stream I/O procedure added in release 1.20.1:
  - Fix adding an extra blank line at end of document.
  - Fix line ending on last line when cin and cout option is used.

### Artistic Style 1.20.1 (January 2007)

- The following changes were made to improve processing for Mac OS X platforms:
  - Remove Makefile linker option -s and add a separate "strip" command.
  - Open console input and output streams as binary to allow Linux line ends on a Windows platform.
  - Change stream I/O procedure to allow for Mac OS 9 line endings.
  - Change output stream end of line from endl so output stream is not flushed with each write.
  - Change information messages from cerr to cout.
  - Removed messages when I/O is to cin and cout to accommodate TextWrangler.

### Artistic Style 1.20 (January 2007)

- Call importOptions() from function AStyleMain() to allow slop in options parameters.
- New makefiles for GCC and Intel with new compile options.
- New project file for Visual C with new compile options.
- Change comments to reflect the GNU Lesser General Public License.
- Indent message maps for MFC and event tables for wxWidgets.
- Fix incorrect formatting for an empty comment.
- Fix "Unknown option" in default options file when last line does not contain CR or LF.
- Patch from Dieter Bayer to fix case indent when a scope resolution operator is used.
- Change long option --brackets=break-closing-headers to --brackets=break-closing.
- Add short option -y for --brackets=break-closing.
- Add short option -e for --break-elseifs.
- Add short option -w for --indent-preprocessor.
- Add short option -f for --break-blocks.
- Add short option -F for --break-blocks=all.
- Remove the backup file after formatting when --suffix=none.
- Show total time at end of job.
- Improved error handling for invalid options with ASTYLE_LIB.
- Add function AStyleGetVersion() to ASTYLE_LIB option.
- Change preprocessor macro from ASTYLE_GUI to ASTYLE_LIB.
- Add astyle namespace to ASEnhancer.
- Add #include <ctype.h> for Red Hat distribution of GCC 3.2 (prior to Jan 2004).
- Remove commented-out code.

### Artistic Style 1.19 (July 2006)

- Add unpad=paren option.
- Always pad paren headers (e.g. 'if', 'for', 'while').
- Fix problem of pad=oper working different if pad=paren is declared.
- Add additional tests to distinguish the multiplication operator from pointers.
- Fix padding parens before a member access pointer (->).
- If space padding has changed, move end-of-line comments to the original column, if possible.
- Move potential calculation decision to outside of operator padding function.
- Fix duplication of last line of source if a final endline is not present.
- Fix class initializer not indented on last line if bracket is attached.
- Fix identification of templates contained in parens.
- Fix one line block occurring before end of class.
- Fix line added after one line block with bracketFormatMode = NONE_MODE.
- Add needed variables to ASBeautifier copy constructor.
- Trim end of line for multi-line comments.
- Add a breakLine before paren checks (needed for unpad=paren option).
- Add trace file to ASFormatter.
- Move formatting message from end to beginning of formatting.
- Move the building of vectors to ASResource. Vectors for classes ASBeautifier and ASFormatter should now have the same values.
- Move debugging variable inLineNumber from ASFormatter to ASBeautifier.
- Bypass char processing for UTF8 characters in ASBeautifier.
- Move switchVariables struct from ASEnhancer to the header file.
- Remove preprocessorHeader vector (not used).
- Remove variable isInConst (not used).
- Remove commented-out code.

### Artistic Style 1.18 (June 2006)

- The following changes were made for the option pad=oper:
  - Does not remove extra spaces from formatted expressions.
  - Does not pad opening parens on the outside.
  - Does not remove leading spaces from multi-line comments.
  - Does not pad negative numbers.
  - Does not add a space to the end of preprocessor directives.
  - Will not pad operators inside block parens [].
- The following changes were made for the option pad=paren:
  - Formats correctly with or without pad=oper.
  - Does not add a space for each additional run if pad=oper is not used.
  - Outside of opening paren is padded correctly.
  - Inside of closing paren is padded correctly.
  - Does not pad block parens [].
  - Added short option P, previously used for pad=all.
- Added new options pad=paren-out (d) and pad=paren-in (D).
- Removed option pad=all.
- Add short option V for convert-tabs.
- Added bounds checking to options containing parameters.
- Display a message when a default options file is used.
- Replaced IS_PARAM_OPTION(S) macros with overloaded isParamOption. Fixed compare problem with short param options.
- Fix EOF problem with default options file.

### Artistic Style 1.17 (May 2006)

- The following changes were made for processing bracketFormatMode = NONE_MODE:
  - Removed the function isFormattingEnabled() and always performed the formatting.
  - Removed the formatting bypass for NONE_MODE.
  - Fix brackets always being broken in the 2 cases where NONE_MODE formatting was done.
  - Added new functions to support the processing of NONE_MODE brackets.
  - Made other minor changes necessary for correct NONE_MODE processing.
- Changed indent cases option to indent the entire case block.
- Changed to output Windows or Linux line endings.
- Added ASEnhancer module for case statement indenting.
- Corrected errors in identifying options indent=tab=, and force-indent=tab=.
- Corrected errors in identifying options min-conditional-indent=, and max-instatement-indent=.
- Improved error and information messages.
- Added capability to compile as a console program, shared library, or static library.
- Fixed problem with semicolons and parens being put on a line by themselves.
- Fixed spaces being added before a line comment.
- Fixed blank line added after some preprocessor statements.
- Fixed preprocessor statements not being trimmed.
- Do not indent line comments that begin in column 1 or 2.
- Fixed indentation problem with ending }; of class statements.
- Changed nextLine() function to eliminate char buffer limits.
- Moved Windows default options file to %USERPROFILE%.
- Removed NEW operators to prevent memory leaks.
- Fixed space before the semicolon in return ; statement.
- Fixed extra space that was sometimes added when pad operators was used.
- Removed string parameter from IS_PARAM_OPTION.
- Added forward declaration of parseOption() to eliminate compile error.
- Added input line number counter for debugging.
- Add statements to check for markers if break-blocks or break-blocks=all is used.
- Remove warnings for signed/unsigned mismatch.
- Removed COMPARE macro and used string compare.
- Removed compiler_defines.h.
- Removed USES_NAMESPACE declaration.

### Artistic Style 1.16

> There was no release 1.16.

### Artistic Style 1.15.3 (7 March 2002)

- Bug fix in handling of brackets after line-comments.
- Bug fix: C# add/remove event property headers now properly formatted.

### Artistic Style 1.15.2 (2 March 2002)

- Bug fixes in exception handling phrases, e.g. multiple catches and try..finally.

### Artistic Style 1.15.1 (2 March 2002)

- Bug fix: C# properties are now formatted properly.

### Artistic Style 1.15.0 (2 March 2002)

- Added support for C#.
- Artistic Style is now licensed only under the GNU Public License (GPL).
- Compilation under G++ 3.0 now works properly.
- Bug fix: Opening brackets that appear at the beginning of a line immediately after an empty line comment are now handled properly, and not appended as part of the line comment.
- Bug fix: Brackets inside comments are properly indented within the comment.

### Artistic Style 1.14.1 (2 June 2001)

- Bug fix: : '<' and '>' symbols within template declarations (e.g. 'foo<bar*, xoo>') are now left unpadded in the padding modes.
- Bug fix: Fixed false recognizing of headers within larger words (e.g. 'catch' in 'gcatch').

### Artistic Style 1.14.0 (1 June 2001)

- Bug fix: Fixed indentation of statements within preprocessor '#if...' statements.
- Bug fix: Templates are now not broken from their bodies.
- Bug fix: '<' and '>' symbols within template definitions (e.g. 'template<class T>') are now left unpadded in the padding modes.

### Artistic Style 1.13.8 (13 April 2001)

- Bug fix: Fixed indentation of multiple nested non-block brackets, such as in multi bracketed static array declarations.

### Artistic Style 1.13.7 (6 April 2001)

- New option:'--force-indent=tab=#' (or 'T#') instructs astyle to indent using tabs in all the pre-statement white space, including areas astyle's '--indent=tab' prefers to indent using spaces, such as white space in multi-line statements.
- Bug fix: Fixed unwanted empty line insertions between empty blocks (e.g. '{}') and closing brackets that come immediately after them.
- Bug fix: Fixed unwanted empty line insertions immediately after colons (e.g. 'default:', 'label:', ...)

### Artistic Style 1.13.6 (24 January 2001)

- Bug fix: Preprocessor lines now remain unpadded in padding modes.

### Artistic Style 1.13.5 (24 January 2001)

- Bug fix: Fixed the insertion of phantom empty lines immediately after {} blocks.
- Bug fix: Bare open brackets ('{') with no preceding headers are now broken appropriately from their preceding code lines in the 'attach' and 'linux' bracketmodes.
- Bug fix: Fixed operator recognition for long operators such as '>>=', '<<= '.

### Artistic Style 1.13.4 (24 January 2001)

- Bug fix: L" unicode strings are now handled properly in padding modes.
- Bug fix: Fixed the padding around '-' operators (which went sour somewhere in the past).
- Bug fix: Fixed the handling of exponent numbers (e.g. 12.2e+2) in padding modes. The fix enables 'e+' to be regarded as part of the exponent.

### Artistic Style 1.13.3 (23 January 2001)

- Line that contain both headers and their following non-header code (e.g. 'if (isFoo) doBar();') are now broken by default into multiple lines. To keep these lines as single lines, use '--one-line= keep-statements'.
- Added the new option '--break-elseifs' which breaks 'else if()' statements into multiple lines.
- The option block breaking options now works properly with the padding options.
- Various minor bug fixes.

### Artistic Style 1.13.2 (21 January 2001)

- Added the new option '--brackets=break-closing-headers'. When this option is added to either '--brackets=attach' or '--brackets= linux', astyle breaks closing headers (e.g. 'else', 'catch') from their preceding closing brackets.
- '--break-blocks' and '--break-blocks= all' now correctly handle blocks that appear immediately before closing brackets, and do not append empty lines between them and the closing brackets.

### Artistic Style 1.13.0 (27 September 1999)

- Moved back to odd-minor-numbered development versions, and even-minor-numbered stable versions.
- Added the new option '--break-blocks' which breaks apart unrelated blocks, labels, classes, etc.
- Added the new option '--break-blocks=all' which also breaks apart blocks of closing headers, such as 'else', 'catch', etc.
- Fixed indentation handling of labels and class-definition identifiers such as 'public:', 'protected:', ... (thanks to Daryn Adler for his patch)
- Fixed indentation of nested class definitions. (thanks to Daryn Adler for his patch)
- Added the new option '--indent-preprocessor' which (surprisingly) tries to reindent C/C++ preprocessor macro lines. Astyle should do an pretty nice indentation job if the macro code is sane, but don't expect miracles for horrid macro definitions...

### Artistic Style 1.11.6 (27 September 1999)

- Improved indentation of lines containing single-line blocks.

### Artistic Style 1.11.5 (25 September 1999)

- Improved the bug fix for a 'const' keyword bug which resulted in wrong indentation of methods that are declared const.

### Artistic Style 1.11.4 (18 September 1999)

- Improved handling of single colons (':') in class headers, e.g. class Foo : public Bar { ... }
- Improved handling of single colons (':') in method (constructor) headers, e.g. Foo::Foo(int a) : Bar(a)

### Artistic Style 1.11.3 (16 September 1999)

- Fixed a serious bug in the formatting of brackets, introduced in 1.11.2.

### Artistic Style 1.11.2 (10 September 1999)

- Fixed an indentation bug in statements that contain the 'const', that resulted in wrong indentation of array blocks that where declared const. (Thanks Daniel!)
- Fixed an indentation bug that could arise in lines that appear immediately after several preprocessor commands. (Thanks Daniel!).
- Fixed a bug that inserted an empty line after closing brackets if a comment appeared immediately prior to the closing bracket. (Thanks Ed!)
- Fixed a bug that eliminated empty lines between closing brackets and immediately following opening brackets. (Thanks Ed!)

### Artistic Style 1.11.1 (3 September 1999)

- Fixed a bug that inserted an empty line at the beginning of source files.

### Artistic Style 1.11.0 (3 September 1999)

- Astyle now filters out line-feeds ('\r') before beginning to parse lines. This should take care of bizarre formatting that existed when moving source files from Windows (which breaks lines with a linefeed AND newline ("\r\n") to unix (which breaks lines only with newlines).
- The "struct", "static" and "synchronized" keywords are now finally handled correctly in both the contexts of block headers AND simple keywords.
- Better treatment of precompiler lines that end with backslashes, and the lines that immediately follow them.
- The '--indent-classes' (or '-C') option now works correctly (again...).
- Series of short command-line options (e.g. "-b -s4 -C") are now parsed correctly.

### Artistic Style 1.10.4 (27 July 1999)

- Fixed a MAJOR bug (inserted in 1.10.3) that resulted wrong handling of double-colons ('::') in C++.

### Artistic Style 1.10.3 (24 July 1999)

- Fixed a bug (inserted yesterday) that resulted in unwanted line breaks before closing-brackets.
- Fixed a bug in the handling of 'static' blocks in java.
- Added the new option '--indent-cases' (or '-K') for indenting 'case XXX:' lines so they are flush with their following code lines.
- Added the new option '--fill-empty-lines' (or '-E') which fills empty lines with the white-space of their previous line.

### Artistic Style 1.10.2 (23 July 1999)

- Fixed a series of related bugs that resulted in certain cases of lacking line breaks after close-brackets, and colons. Thanks Jeroen!

### Artistic Style 1.10.1 (18 July 1999)

- Fixed a bug (introduced in astyle 1.10.0) that can result in missing line breaks before closing brackets if they appear immediately after comments. Thanks Larry!

### Artistic Style 1.10.0 Release (14 July 1999)

- Improved handling of empty bracket blocks ( e.g.{ } ). Thanks Michael!

### Artistic Style 1.10.0 Prerelease (4 July 1999)

- Fixed a bug in the in-statement indentation algorithm which resulted in sub-optimal indentation of multiple-line conditional statements that immediately follow headers such as 'if', 'else if', 'while', etc... As a result, the current in-statement indentation is finally what it should have been long ago - MUCH better then in the last stable versions.
- The "linux" bracket style (in which definition brackets are broken while code brackets are attached) has been fixed, and should finally work correctly.
- Artistic Style can now parse both C/C++ and Java files in the same command. Unless a specific language mode is specified (e.g. --style=java or --style=c), astyle will now automatically set the language mode according to each file's suffix (java mode for the '.java' suffix , c mode otherwise).
- Multiple statements in a single line (e.g. aaa; bbb; fff;) are now broken up by default.
- Added the option '--one-line=keep-statements' (or '-o') that keeps multiple statements in a single line attached, thus countering the default break detailed above.
- Changed the option previously called '--keep-one-line-blocks' to '--one-line=keep-blocks', for similarity with the new option above.
- Changed the short option name of the option '--errors-to-standard-output' from '-o' to '-X'.
- Up to now, Artistic Style always inserted a minimal indent of twice the current selected indent size inside multi-line conditional headers ('if', 'while' ...), so that it would be clear where the headers end and the code after them begins. The current version adds the option '--min-conditional-indent=#' (or '-m#') that sets the absolute minimal indent between conditional headers and their multiple-line conditional statements. If this option is not specified, the default indent remains twice the current selected indent size.
  For example, This option should come very handy in code that already has brackets after EVERY conditional statement (even if just one line is in that bracket...) - in such a case, it would be wise to set --min-conditional-indent=0 since the brackets already make it clear where the header ends and the code begins...
- Added the ability to set the assumed tab size when in '--indent-tab' mode by using '--indent-tab=#' or '-t#' and replacing the # with the wanted size. If the size is not specified, the size of each tab is assumed to be 4 spaces long.

### Artistic Style 1.8.2 (18 March 1999)

- Fixed pointer handling problems in ASBeautifier that led to crashes when parsing preprocessor commands.
- Fixed the problem in locating the default options file in the directory pointed to by $HOME or %HOMEPATH% when these system variables do not contain an '/' (or '\' ...) at their end.
- Fixed inverse insertion of spaces vs. tabs when in -t mode. (Thanks Brian!)
- Got rid of those pesky C4786 warnings when compiling under Visual C++ (Thanks John!)

### Artistic Style 1.8.1 (9 March 1999)

- Changed the '--style=k&r' option to '--style= kr' , so that linux/unix machines don't misinterpret the '&' as a background processing command.

### Artistic Style 1.8.0 (3 March 1999)

- Added support for predefined styles. Current supported styles are: ansi, k&r, linux, gnu, java. these can be set by using '--style=THESTYLE' (e.g. '--style=linux').
- Added '--indent-blocks' (or -G) option, which adds indentation to entire blocks, including their brackets, in similar fashion to the standard gnu style.
- Added option '--brackets=linux' (or '-l') which breaks definition-block brackets, but attaches command-block brackets.
- Padding can now be set separately for operators alone('-p' or '--pad=oper'), parentheses alone ('--pad=paren) or both ('-P' or '--pad=all').
- Artistic Style looks for a default options file in the following order:
  1. The contents of the ARTISTIC_STYLE_OPTIONS environment variable if it exists.
  2. The file called .astylerc in the directory pointed to by the HOME environment variable ( i.e. $HOME/.astylerc ).
  3. The file called .astylerc in the directory pointed to by the HOMEPATH environment variable ( i.e. %HOMEPATH%\.astylerc ).
  If a default options file is found, the options in this file will be parsed BEFORE the command-line options. Options within the default option file may be written without the preliminary '-' or '--'. Indentation within #if , #else and #endif precompiler commands now works correctly even if the program lines between these precompiler commands contain non-pared brackets.
- Improved handling of labels (e.g. 'exit:'). By default, labels are now flushed completely to the left. Labels can also be indented to one indent LESS than current standard indentation by using the new option '--indent-labels' (or '-L') .
- Fixed handling of the 'operator' keyword when it is preceded by a non space character (such as '&' or '*').
- Fixed wrong bracket handling after 'throws' statements.
- Fixed wrong indentation of single-line blocks. These where indented 1 indent to much.
- Fixed wrong indentation of headers in internal classes (java mode). These where indented 1 indent to little.
- The option ' --errors-to-standard-output' now has the one-letter option '-o'.
- Fixed bug which resulted in an unneeded indent in function-declarations in which function-variables are declared before the function declaration and are preceded by the 'static' keyword. Thanks Scott.

### Artistic Style 1.6.0 (5 January 1999)

- Fixed zero indentation that resulted when a '-suffix' option was set after a '--indent=spaces' (or '-s') option.
- Wrong options are now announced.
- Changed default indentation to NOT automatically indent class blocks and switch blocks. Instead, the new options '--indent-classes' (or '-C') and '--indent-switches' (or '-S') should be used. The option '--indent-switches' replaces the old option '--flush-switches'.

### Artistic Style 1.4.1 (4 January 1999)

- Fixed ability to write options without the preceding '--' in the default options file.
- Added one-letter options to most options that had only long-options in version 1.4.0.
- Added a '-v' or '--version' option that writes the current Artistic Style version.

### Artistic Style 1.4.0 (3 January 1999)

- MAJOR NEW CHANGE IN THE FORMAT OF OPTIONS:
  Options are now either short one-letter options starting with '-', or long multi-letter options starting with '--'. The Short one-letter options MAY BE ATTACHED TOGETHER. Thus, writing '-bps4' is the same as writing '-b -p -s4'.
  Many options that have up to now had a 2 letter format now retain only their long format. I truly believe that the combination of attached-one-letter options PLUS a default option's file containing long-letter-options related to style will be much easier to work with than the previous setup.
- Added support for a default options file (pointed to by the ARTISTIC_STYLE_OPTIONS environment variable).
- Changed downloading method from the server. From now, there will be specific directories containing the latest stable sources, stable binaries, and development sources.
- Space padding ('-p' or '--pad') now works correctly (1) around semicolons and commas, (2) between headers that require parentheses after them (such as 'if', 'while'...)and those parentheses, and (3) after parentheses (unless immediately followed by a ';' or ',' or '.').
- From now on, namespace blocks are NOT indented by default. To indent namespace blocks use the new '--indent-namespaces' option.
- Added options '--errors-to-standard-output' for redirection of standard-error to standard-output from within Artistic Style, and '--suffix=' for specifying a suffix other than '.orig' to append to original filenames.
- Corrected indentation of 'default' in switch statements. (Up to now, this only worked correctly in java mode...).

### Artistic Style 1.2.0 (19 December 1998)

- Artistic Style 1.2.0 is the first stable result of a new version numbering, in which development versions are numbered with an odd minor number (such as 1.1.x), and stable versions are numbered with an even number (1.2.x). Thus, version 1.2.0 accumulates all the additions/changes of the 1.1.x development versions of Artistic Style.
- A new '-ol' formatting mode that eliminates breaking of one-line blocks.
- Fixed a SERIOUS bug, which resulted in wrong formatting of brackets ('{', '}') that came IMMEDIATELY AFTER definition type brackets, (e.g. brackets that come right after 'class', 'interface', 'name-space', etc ...). This bug was mistakenly introduced when I set out to correctly space-pad pointer and reference signs, somewhere in version 0.9.x.
- Fixed unwanted elimination of final empty lines.
- Fixed broken indentation of virgin opening-brackets that occur immediately after a previous closing-bracket.
- Fixed space-padding to not insert a space in front of ':' characters unless they are a part of a '? ... : ' statement.

### Artistic Style 1.0.5 (11 December 1998)

- 'extern' blocks now handled correctly.
- Fixed handling of ^= in '-p' mode.
- Win32 executables now contain wildcard expansion. *** Look at the README.TXT for info on how to include wildcard expansion abilities when compiling Artistic Style under Win32. (Thanks for the info on wildcard-expansion enabling, Nat!!!)

### Artistic Style 1.0.4 (2 December 1998)

- Fixed unwanted space-padding around urinary minuses and '-' symbols within exponents (e.g. 2.5E-5) when using the '-p' option.

### Artistic Style 1.0.3 (1 December 1998)

- Control characters now remain in the indented file.
- Fixed a bug in which long quoted white-space sequences where mistakenly eliminated in the '-p' mode.
- Fixed unwanted line-breaks in '-ab -p' mode, that in some cases occurred between '//' and the rest of a line comment.
- Fixed handling of '>>=', '<<= ' in '-p' mode.

### Artistic Style 1.0.2 (27 November 1998)

- Fixed a SERIOUS bug of missing needed line-breaks in lines immediately after line-comments when in '-ab' mode.
- Support for the 'finally' header.
- lines that contain only white-space now become empty lines.

### Artistic Style 1.0.1 (26 November 1998)

- Fixed a SERIOUS bug, which lacked a needed line-break between closing brackets and the headers that follow them (e.g. '} else') when in '-bb' mode. In fixing the bug, I used a variation on a patch sent by Richard Bullington - THANKS!
- Fixed a set of SERIOUS bugs which inserted an empty line into both the start and end of the reindented file.
- Improved documentation of formatting options in the file astyle.html .

### Artistic Style 1.0.0 (24 November 1998)

- Indented files now retain the original file name, while the original pre-indented file is saved with a ".orig"at its end. Thus, after the call "astyle -bb foo.cpp", the newly indented file will be called "foo.cpp", while a file called "foo.cpp.orig" will contain the original pre-indented file.
- Artistic Style may now be used and /or modified and/or distributed under EITHER the "Artistic License", or the GNU General Public License (GPL).
- Methods with headers that end with 'const' are now properly indented.
- Cleaner, more robust, and better documented source code.

### Artistic Style 0.9.2

- Fixed a serious bug which led to a maximal supported source code line size of 128 characters!!!
- Maximal supported line size is now 1024 characters.
- Fixed a serious bug in the handling of brackets inside '#define' statements.
- Fixed a serious bug in which '#include' files containing slashes (i.e. #include <foo_dir/foo> ) where space-padded when using option '-p' on C, C++ files.

### Artistic Style 0.9.1

- Much improved space-padding around pointers ('*') and references ('&') and the 'operator' key-word in C and C++ source files when using the '-p' space padding option.
- Fixed several pointer handling bugs which led to potential core dumps.
- Version 0.9.1 now includes all the abilities I am planning for the final 1.0 version, and should be looked at as the first pre-release version of Artistic Style.

### Artistic Style 0.9.0

- Added a formatting layer (ASFormatter.cpp) around the indentation layer (ASBeautifier.cpp).
- As a result, the following formatting capabilities have been added:
  - Bracket ('{' and '}') placement in either ANSI C style or Java style.
  - Space padding around operators, i.e. (1+2)*3-4 becomes ( 1 + 2 ) * 3 - 4.
- Fixed the 'tab' elimination bug introduced in ASBeautifier 0.8.2.
- Fixed a bug which under-indented class headers containing inheritance info.

### ASBeautifier 0.8.2

- Fixed indentation problem in brackets around 'struct', and 'union' blocks.
- Added recognition for '\' characters in the end of lines.
- Improved indentation of post-method-declaration variable initializations.
- Several minor bug fixes.

### ASBeautifier 0.8.1

- Fixed an important bug in pointer arithmetic which resulted both in phantom indentation errors, and in core-dumps when trying to indent java files.

### ASBeautifier 0.8.0

- This is the first public release of ASBeautifier. It is a direct port to C++ of JSBeautifier 1.1.1, PLUS extensions to for C++ indentation.
- So far, very little beta-testing has been done for the C++ extensions. This should change extremely with the open-source release (this was the case with JSBeautifier...), so expect ASBeautifier to become bug-free fast!!!
- The C++ source code is not yet written in optimal quality. I rushed a little so that I could release this initial release as soon as possible. This will soon change.