KDevelop API Documentation

lib/astyle/astyle.h

Go to the documentation of this file.
00001 /* 00002 * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved. 00003 * 00004 * astyle.h 00005 * by Tal Davidson (davidsont@bigfoot.com) 00006 * This file is a part of "Artistic Style" - an indentater and reformatter 00007 * of C, C++, C# and Java source files. 00008 * 00009 * The "Artistic Style" project, including all files needed to compile it, 00010 * is free software; you can redistribute it and/or use it and/or modify it 00011 * under the terms of the GNU General Public License as published 00012 * by the Free Software Foundation; either version 2 of the License, 00013 * or (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00018 * 00019 * You should have received a copy of the GNU General Public 00020 * License along with this program. 00021 */ 00022 #ifndef ASTYLE_H 00023 #define ASTYLE_H 00024 00025 #include "compiler_defines.h" 00026 00027 #include <string> 00028 #include <vector> 00029 00030 00031 /* The enums below ave been moved up from inside the namespace astyle, since they 00032 for some strange reason are not recognized by 'vectors' in Microsoft Visual C++ 5 00033 when they are part of a namespace!!! There was no such problem with GNU's g++ compiler. 00034 */ 00035 enum BracketMode { NONE_MODE, ATTACH_MODE, BREAK_MODE, BDAC_MODE }; 00036 enum BracketType { NULL_TYPE = 0, 00037 DEFINITION_TYPE = 1, 00038 COMMAND_TYPE = 2, 00039 ARRAY_TYPE = 4, 00040 SINGLE_LINE_TYPE = 8}; 00041 00042 00043 #ifdef USES_NAMESPACE 00044 using namespace std; 00045 00046 namespace astyle 00047 { 00048 #endif 00049 00050 00051 class ASSourceIterator 00052 { 00053 public: 00054 virtual bool hasMoreLines() const = 0; 00055 virtual string nextLine() = 0; 00056 }; 00057 00058 00059 00060 class ASResource 00061 { 00062 public: 00063 static const string AS_IF, AS_ELSE; 00064 static const string AS_DO, AS_WHILE; 00065 static const string AS_FOR; 00066 static const string AS_SWITCH, AS_CASE, AS_DEFAULT; 00067 static const string AS_TRY, AS_CATCH, AS_THROWS, AS_FINALLY; 00068 static const string AS_PUBLIC, AS_PROTECTED, AS_PRIVATE; 00069 static const string AS_CLASS, AS_STRUCT, AS_UNION, AS_INTERFACE, AS_NAMESPACE, AS_EXTERN; 00070 static const string AS_STATIC; 00071 static const string AS_CONST; 00072 static const string AS_SYNCHRONIZED; 00073 static const string AS_OPERATOR, AS_TEMPLATE; 00074 static const string AS_OPEN_BRACKET, AS_CLOSE_BRACKET; 00075 static const string AS_OPEN_LINE_COMMENT, AS_OPEN_COMMENT, AS_CLOSE_COMMENT; 00076 static const string AS_BAR_DEFINE, AS_BAR_INCLUDE, AS_BAR_IF, AS_BAR_EL, AS_BAR_ENDIF; 00077 static const string AS_RETURN; 00078 static const string AS_ASSIGN, AS_PLUS_ASSIGN, AS_MINUS_ASSIGN, AS_MULT_ASSIGN; 00079 static const string AS_DIV_ASSIGN, AS_MOD_ASSIGN, AS_XOR_ASSIGN, AS_OR_ASSIGN, AS_AND_ASSIGN; 00080 static const string AS_GR_GR_ASSIGN, AS_LS_LS_ASSIGN, AS_GR_GR_GR_ASSIGN, AS_LS_LS_LS_ASSIGN; 00081 static const string AS_EQUAL, AS_PLUS_PLUS, AS_MINUS_MINUS, AS_NOT_EQUAL, AS_GR_EQUAL, AS_GR_GR_GR, AS_GR_GR; 00082 static const string AS_LS_EQUAL, AS_LS_LS_LS, AS_LS_LS, AS_ARROW, AS_AND, AS_OR; 00083 static const string AS_COLON_COLON, AS_PAREN_PAREN, AS_BLPAREN_BLPAREN; 00084 static const string AS_PLUS, AS_MINUS, AS_MULT, AS_DIV, AS_MOD, AS_GR, AS_LS; 00085 static const string AS_NOT, AS_BIT_XOR, AS_BIT_OR, AS_BIT_AND, AS_BIT_NOT; 00086 static const string AS_QUESTION, AS_COLON, AS_SEMICOLON, AS_COMMA; 00087 static const string AS_ASM; 00088 static const string AS_FOREACH, AS_LOCK, AS_UNSAFE, AS_FIXED; 00089 static const string AS_GET, AS_SET, AS_ADD, AS_REMOVE; 00090 }; 00091 00092 class ASBeautifier : protected ASResource 00093 { 00094 public: 00095 ASBeautifier(); 00096 virtual ~ASBeautifier(); 00097 virtual void init(ASSourceIterator* iter); // pointer to dynamically created iterator. 00098 virtual void init(); 00099 virtual bool hasMoreLines() const; 00100 virtual string nextLine(); 00101 virtual string beautify(const string &line); 00102 void setTabIndentation(int length = 4, bool forceTabs = false); 00103 void setSpaceIndentation(int length = 4); 00104 void setMaxInStatementIndentLength(int max); 00105 void setMinConditionalIndentLength(int min); 00106 void setClassIndent(bool state); 00107 void setSwitchIndent(bool state); 00108 void setCaseIndent(bool state); 00109 void setBracketIndent(bool state); 00110 void setBlockIndent(bool state); 00111 void setNamespaceIndent(bool state); 00112 void setLabelIndent(bool state); 00113 void setCStyle(); 00114 void setJavaStyle(); 00115 void setEmptyLineFill(bool state); 00116 void setPreprocessorIndent(bool state); 00117 00118 00119 protected: 00120 int getNextProgramCharDistance(const string &line, int i); 00121 bool isLegalNameChar(char ch) const; 00122 bool isWhiteSpace(char ch) const; 00123 const string *findHeader(const string &line, int i, 00124 const vector<const string*> &possibleHeaders, 00125 bool checkBoundry = true); 00126 string trim(const string &str); 00127 int indexOf(vector<const string*> &container, const string *element); 00128 00129 private: 00130 ASBeautifier(const ASBeautifier &copy); 00131 void operator=(ASBeautifier&); // not to be implemented 00132 00133 void initStatic(); 00134 void registerInStatementIndent(const string &line, int i, int spaceTabCount, 00135 int minIndent, bool updateParenStack); 00136 string preLineWS(int spaceTabCount, int tabCount); 00137 00138 static vector<const string*> headers; 00139 static vector<const string*> nonParenHeaders; 00140 static vector<const string*> preprocessorHeaders; 00141 static vector<const string*> preBlockStatements; 00142 static vector<const string*> assignmentOperators; 00143 static vector<const string*> nonAssignmentOperators; 00144 00145 static bool calledInitStatic; 00146 00147 ASSourceIterator *sourceIterator; 00148 vector<ASBeautifier*> *waitingBeautifierStack; 00149 vector<ASBeautifier*> *activeBeautifierStack; 00150 vector<int> *waitingBeautifierStackLengthStack; 00151 vector<int> *activeBeautifierStackLengthStack; 00152 vector<const string*> *headerStack; 00153 vector< vector<const string*>* > *tempStacks; 00154 vector<int> *blockParenDepthStack; 00155 vector<bool> *blockStatementStack; 00156 vector<bool> *parenStatementStack; 00157 vector<int> *inStatementIndentStack; 00158 vector<int> *inStatementIndentStackSizeStack; 00159 vector<int> *parenIndentStack; 00160 vector<bool> *bracketBlockStateStack; 00161 string indentString; 00162 const string *currentHeader; 00163 const string *previousLastLineHeader; 00164 const string *immediatelyPreviousAssignmentOp; 00165 const string *probationHeader; 00166 bool isInQuote; 00167 bool isInComment; 00168 bool isInCase; 00169 bool isInQuestion; 00170 bool isInStatement; 00171 bool isInHeader; 00172 bool isCStyle; 00173 bool isInOperator; 00174 bool isInTemplate; 00175 bool isInConst; 00176 bool isInDefine; 00177 bool isInDefineDefinition; 00178 bool classIndent; 00179 bool isInClassHeader; 00180 bool isInClassHeaderTab; 00181 bool switchIndent; 00182 bool caseIndent; 00183 bool namespaceIndent; 00184 bool bracketIndent; 00185 bool blockIndent; 00186 bool labelIndent; 00187 bool preprocessorIndent; 00188 bool isInConditional; 00189 bool isMinimalConditinalIndentSet; 00190 bool shouldForceTabIndentation; 00191 int minConditionalIndent; 00192 int parenDepth; 00193 int indentLength; 00194 int blockTabCount; 00195 int leadingWhiteSpaces; 00196 int maxInStatementIndent; 00197 int templateDepth; 00198 char quoteChar; 00199 char prevNonSpaceCh; 00200 char currentNonSpaceCh; 00201 char currentNonLegalCh; 00202 char prevNonLegalCh; 00203 int prevFinalLineSpaceTabCount; 00204 int prevFinalLineTabCount; 00205 bool emptyLineFill; 00206 bool backslashEndsPrevLine; 00207 int defineTabCount; 00208 }; 00209 00210 00211 class ASFormatter : public ASBeautifier 00212 { 00213 public: 00214 ASFormatter(); 00215 virtual ~ASFormatter(); 00216 virtual void init(ASSourceIterator* iter); 00217 virtual bool hasMoreLines() const; 00218 virtual string nextLine(); 00219 void setBracketFormatMode(BracketMode mode); 00220 void setBreakClosingHeaderBracketsMode(bool state); 00221 void setOperatorPaddingMode(bool mode); 00222 void setParenthesisPaddingMode(bool mode); 00223 void setBreakOneLineBlocksMode(bool state); 00224 void setSingleStatementsMode(bool state); 00225 void setTabSpaceConversionMode(bool state); 00226 void setBreakBlocksMode(bool state); 00227 void setBreakClosingHeaderBlocksMode(bool state); 00228 void setBreakElseIfsMode(bool state); 00229 00230 private: 00231 void ASformatter(ASFormatter &copy); // not to be imlpemented 00232 void operator=(ASFormatter&); // not to be implemented 00233 void staticInit(); 00234 bool isFormattingEnabled() const; 00235 void goForward(int i); 00236 bool getNextChar(); 00237 char peekNextChar() const; 00238 bool isBeforeComment() const; 00239 void trimNewLine(); 00240 BracketType getBracketType() const; 00241 bool isPointerOrReference() const; 00242 bool isUnaryMinus() const; 00243 bool isInExponent() const; 00244 bool isOneLineBlockReached() const; 00245 void appendChar(char ch, bool canBreakLine = true); 00246 void appendCurrentChar(bool canBreakLine = true); 00247 void appendSequence(const string &sequence, bool canBreakLine = true); 00248 void appendSpacePad(); 00249 void breakLine(); 00250 inline bool isSequenceReached(const string &sequence) const; 00251 const string *findHeader(const vector<const string*> &headers, bool checkBoundry = true); 00252 00253 static vector<const string*> headers; 00254 static vector<const string*> nonParenHeaders; 00255 static vector<const string*> preprocessorHeaders; 00256 static vector<const string*> preDefinitionHeaders; 00257 static vector<const string*> preCommandHeaders; 00258 static vector<const string*> operators; 00259 static vector<const string*> assignmentOperators; 00260 static bool calledInitStatic; 00261 00262 ASSourceIterator *sourceIterator; 00263 vector<const string*> *preBracketHeaderStack; 00264 vector<BracketType> *bracketTypeStack; 00265 vector<int> *parenStack; 00266 string readyFormattedLine; 00267 string currentLine; 00268 string formattedLine; 00269 const string *currentHeader; 00270 const string *previousOperator; 00271 char currentChar; 00272 char previousChar; 00273 char previousNonWSChar; 00274 char previousCommandChar; 00275 char quoteChar; 00276 int charNum; 00277 BracketMode bracketFormatMode; 00278 bool isVirgin; 00279 bool shouldPadOperators; 00280 bool shouldPadParenthesies; 00281 bool shouldConvertTabs; 00282 bool isInLineComment; 00283 bool isInComment; 00284 bool isInPreprocessor; 00285 bool isInTemplate; // true both in template definitions (e.g. template<class A>) and template usage (e.g. F<int>). 00286 bool doesLineStartComment; 00287 bool isInQuote; 00288 bool isSpecialChar; 00289 bool isNonParenHeader; 00290 bool foundQuestionMark; 00291 bool foundPreDefinitionHeader; 00292 bool foundPreCommandHeader; 00293 bool isInLineBreak; 00294 bool isInClosingBracketLineBreak; 00295 bool endOfCodeReached; 00296 bool isLineReady; 00297 bool isPreviousBracketBlockRelated; 00298 bool isInPotentialCalculation; 00299 //bool foundOneLineBlock; 00300 bool shouldBreakOneLineBlocks; 00301 bool shouldReparseCurrentChar; 00302 bool shouldBreakOneLineStatements; 00303 bool shouldBreakLineAfterComments; 00304 bool shouldBreakClosingHeaderBrackets; 00305 bool shouldBreakElseIfs; 00306 bool passedSemicolon; 00307 bool passedColon; 00308 bool isImmediatelyPostComment; 00309 bool isImmediatelyPostLineComment; 00310 bool isImmediatelyPostEmptyBlock; 00311 00312 bool shouldBreakBlocks; 00313 bool shouldBreakClosingHeaderBlocks; 00314 bool isPrependPostBlockEmptyLineRequested; 00315 bool isAppendPostBlockEmptyLineRequested; 00316 00317 bool prependEmptyLine; 00318 bool foundClosingHeader; 00319 int previousReadyFormattedLineLength; 00320 00321 bool isInHeader; 00322 bool isImmediatelyPostHeader; 00323 00324 }; 00325 00326 00327 #ifdef USES_NAMESPACE 00328 } 00329 #endif 00330 00331 #endif // closes ASTYLE_H 00332
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Oct 6 17:39:06 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003