main(int argc, char *argv[]) { ASFormatter formatter; vector<string> fileNameVector; vector<string> optionsVector; string optionsFileName = ""; string arg; bool ok = true; bool shouldPrintHelp = false; bool shouldParseOptionsFile = true; _err = &cerr; _suffix = ".orig"; _modeManuallySet = false; // manage flags for (int i=1; i<argc; i++) { arg = string(argv[i]); if ( IS_PARAM_OPTION(arg ,"--options=none") ) { shouldParseOptionsFile = false; } else if ( IS_PARAM_OPTION(arg ,"--options=") ) { optionsFileName = GET_PARAM(arg, "--options="); } else if ( IS_OPTION(arg, "-h") || IS_OPTION(arg, "--help") || IS_OPTION(arg, "-?") ) { shouldPrintHelp = true; } else if (arg[0] == '-') { optionsVector.push_back(arg); } else // file-name { fileNameVector.push_back(arg); } } // parse options file if (shouldParseOptionsFile) { if (optionsFileName.compare("") == 0) { char* env = getenv("ARTISTIC_STYLE_OPTIONS"); if (env != NULL) optionsFileName = string(env); } if (optionsFileName.compare("") == 0) { char* env = getenv("HOME"); if (env != NULL) optionsFileName = string(env) + string("/.astylerc"); } if (optionsFileName.compare("") == 0) { char* env = getenv("HOMEPATH"); if (env != NULL) optionsFileName = string(env) + string("/.astylerc"); } if (optionsFileName.compare("") != 0) { ifstream optionsIn(optionsFileName.c_str()); if (optionsIn) { vector<string> fileOptionsVector; importOptions(optionsIn, fileOptionsVector); ok = parseOptions(formatter, fileOptionsVector.begin(), fileOptionsVector.end(), string("Unknown option in default options file: ")); } optionsIn.close(); if (!ok) { (*_err) << "For help on options, type 'astyle -h' " << endl; } } } // parse options from command line ok = parseOptions(formatter, optionsVector.begin(), optionsVector.end(), string("Unknown command line option: ")); if (!ok) { (*_err) << "For help on options, type 'astyle -h' " << endl; exit(1); } if (shouldPrintHelp) { printHelpAndExit(); } // if no files have been given, use cin for input and cout for output if (fileNameVector.empty()) { formatter.init( new ASStreamIterator(&cin) ); while (formatter.hasMoreLines() ) { cout << formatter.nextLine(); if (formatter.hasMoreLines()) cout << endl; } cout.flush(); } else { // indent the given files for (int i=0; i<fileNameVector.size(); i++) { string originalFileName = fileNameVector[i]; string inFileName = originalFileName + _suffix; remove(inFileName.c_str()); if ( rename(originalFileName.c_str(), inFileName.c_str()) < 0) error("Could not rename ", string(originalFileName + " to " + inFileName).c_str()); ifstream in(inFileName.c_str()); if (!in) error("Could not open input file", inFileName.c_str()); ofstream out(originalFileName.c_str()); if (!out) error("Could not open output file", originalFileName.c_str()); // Unless a specific language mode has been, set the language mode // according to the file's suffix. if (!_modeManuallySet) { if (stringEndsWith(originalFileName, string(".java"))) { formatter.setJavaStyle(); } else { formatter.setCStyle(); } } formatter.init( new ASStreamIterator(&in) ); while (formatter.hasMoreLines() ) { out << formatter.nextLine(); if (formatter.hasMoreLines()) out << endl; } out.flush(); out.close(); in.close(); } } return 0; }
bool parseOption(ASFormatter &formatter, const string &arg, const string &errorInfo) { if ( IS_OPTION(arg, "style=ansi") ) { formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(BREAK_MODE); formatter.setBracketIndent(false); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=gnu") ) { formatter.setSpaceIndentation(2); formatter.setBracketFormatMode(BREAK_MODE); formatter.setBlockIndent(true); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=java") ) { // formatter.setJavaStyle(); // _modeManuallySet = true; formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setBracketIndent(false); formatter.setSwitchIndent(false); } else if ( IS_OPTION(arg, "style=kr") ) { //manuallySetCStyle(formatter); formatter.setSpaceIndentation(4); formatter.setBracketFormatMode(ATTACH_MODE); formatter.setBracketIndent(false); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } else if ( IS_OPTION(arg, "style=linux") ) { formatter.setSpaceIndentation(8); formatter.setBracketFormatMode(BDAC_MODE); formatter.setBracketIndent(false); formatter.setClassIndent(false); formatter.setSwitchIndent(false); formatter.setNamespaceIndent(false); } // must check for mode=cs before mode=c !!! else if ( IS_OPTION(arg, "mode=cs") ) { formatter.setSharpStyle(); _modeManuallySet = true; } else if ( IS_OPTION(arg, "mode=c") ) { formatter.setCStyle(); _modeManuallySet = true; } else if ( IS_OPTION(arg, "mode=java") ) { formatter.setJavaStyle(); _modeManuallySet = true; } else if ( isParamOption(arg, "t", "indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "t", "indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) isOptionError(arg, errorInfo); else formatter.setTabIndentation(spaceNum, false); } else if ( isParamOption(arg, "T", "force-indent=tab=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "T", "force-indent=tab="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) isOptionError(arg, errorInfo); else formatter.setTabIndentation(spaceNum, true); } else if ( IS_OPTION(arg, "indent=tab") ) { formatter.setTabIndentation(4); } else if ( isParamOption(arg, "s", "indent=spaces=") ) { int spaceNum = 4; string spaceNumParam = GET_PARAMS(arg, "s", "indent=spaces="); if (spaceNumParam.length() > 0) spaceNum = atoi(spaceNumParam.c_str()); if (spaceNum < 2 || spaceNum > 20) isOptionError(arg, errorInfo); else formatter.setSpaceIndentation(spaceNum); } else if ( IS_OPTION(arg, "indent=spaces") ) { formatter.setSpaceIndentation(4); } else if ( isParamOption(arg, "m", "min-conditional-indent=") ) { int minIndent = 8; string minIndentParam = GET_PARAMS(arg, "m", "min-conditional-indent="); if (minIndentParam.length() > 0) minIndent = atoi(minIndentParam.c_str()); if (minIndent > 40) isOptionError(arg, errorInfo); else formatter.setMinConditionalIndentLength(minIndent); } else if ( isParamOption(arg, "M", "max-instatement-indent=") ) { int maxIndent = 40; string maxIndentParam = GET_PARAMS(arg, "M", "max-instatement-indent="); if (maxIndentParam.length() > 0) maxIndent = atoi(maxIndentParam.c_str()); if (maxIndent > 80) isOptionError(arg, errorInfo); else formatter.setMaxInStatementIndentLength(maxIndent); } else if ( IS_OPTIONS(arg, "B", "indent-brackets") ) { formatter.setBracketIndent(true); } else if ( IS_OPTIONS(arg, "G", "indent-blocks") ) { formatter.setBlockIndent(true); } else if ( IS_OPTIONS(arg, "N", "indent-namespaces") ) { formatter.setNamespaceIndent(true); } else if ( IS_OPTIONS(arg, "C", "indent-classes") ) { formatter.setClassIndent(true); } else if ( IS_OPTIONS(arg, "S", "indent-switches") ) { formatter.setSwitchIndent(true); } else if ( IS_OPTIONS(arg, "K", "indent-cases") ) { formatter.setCaseIndent(true); } else if ( IS_OPTIONS(arg, "L", "indent-labels") ) { formatter.setLabelIndent(true); } else if ( IS_OPTIONS(arg, "y", "brackets=break-closing") ) { formatter.setBreakClosingHeaderBracketsMode(true); } else if ( IS_OPTIONS(arg, "b", "brackets=break") ) { formatter.setBracketFormatMode(BREAK_MODE); } else if ( IS_OPTIONS(arg, "a", "brackets=attach") ) { formatter.setBracketFormatMode(ATTACH_MODE); } else if ( IS_OPTIONS(arg, "l", "brackets=linux") ) { formatter.setBracketFormatMode(BDAC_MODE); } else if ( IS_OPTIONS(arg, "O", "one-line=keep-blocks") ) { formatter.setBreakOneLineBlocksMode(false); } else if ( IS_OPTIONS(arg, "o", "one-line=keep-statements") ) { formatter.setSingleStatementsMode(false); } else if ( IS_OPTIONS(arg, "P", "pad=paren") ) { formatter.setParensOutsidePaddingMode(true); formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "d", "pad=paren-out") ) { formatter.setParensOutsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "D", "pad=paren-in") ) { formatter.setParensInsidePaddingMode(true); } else if ( IS_OPTIONS(arg, "U", "unpad=paren") ) { formatter.setParensUnPaddingMode(true); } else if ( IS_OPTIONS(arg, "p", "pad=oper") ) { formatter.setOperatorPaddingMode(true); } else if ( IS_OPTIONS(arg, "E", "fill-empty-lines") ) { formatter.setEmptyLineFill(true); } else if ( IS_OPTIONS(arg, "w", "indent-preprocessor") ) { formatter.setPreprocessorIndent(true); } else if ( IS_OPTIONS(arg, "V", "convert-tabs") ) { formatter.setTabSpaceConversionMode(true); } else if ( IS_OPTIONS(arg, "F", "break-blocks=all") ) { formatter.setBreakBlocksMode(true); formatter.setBreakClosingHeaderBlocksMode(true); } else if ( IS_OPTIONS(arg, "f", "break-blocks") ) { formatter.setBreakBlocksMode(true); } else if ( IS_OPTIONS(arg, "e", "break-elseifs") ) { formatter.setBreakElseIfsMode(true); } #ifdef ASTYLE_LIB // End of options used by GUI else isOptionError(arg, errorInfo); #else // Options used by only console else if ( IS_OPTIONS(arg, "n", "suffix=none") )
void manuallySetJavaStyle(ASFormatter &formatter) { formatter.setJavaStyle(); _modeManuallySet = true; }