⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asbeautifier.cpp

📁 Artistic Style is a reindenter and reformatter of C, C++, C# and Java source code. When indentin
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/* * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved. * * ASBeautifier.cpp * by Tal Davidson (davidsont@bigfoot.com) * This file is a part of "Artistic Style" - an indentater and reformatter * of C, C, C# and Java source files. * * The "Artistic Style" project, including all files needed to compile it, * is free software; you can redistribute it and/or use it and/or modify it * under the terms of the GNU General Public License as published  * by the Free Software Foundation; either version 2 of the License,  * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * You should have received a copy of the GNU General Public * License along with this program. * * Patches: * 18 March 1999 - Brian Rampel - *       Fixed inverse insertion of spaces vs. tabs when in -t mode.*/#include "compiler_defines.h"#include "astyle.h"#include <vector>#include <string>#include <cctype>#include <algorithm>#include <iostream>#define INIT_CONTAINER(container, value)     {if ( (container) != NULL ) delete (container); (container) = (value); }#define DELETE_CONTAINER(container)          {if ( (container) != NULL ) delete (container) ; }#ifdef USES_NAMESPACEusing namespace std;#endif#ifdef USES_NAMESPACEnamespace astyle{#endifbool ASBeautifier::calledInitStatic = false;vector<const string*> ASBeautifier::headers;vector<const string*> ASBeautifier::nonParenHeaders;vector<const string*> ASBeautifier::preBlockStatements;vector<const string*> ASBeautifier::assignmentOperators;vector<const string*> ASBeautifier::nonAssignmentOperators;/* * initialize the static vars */void ASBeautifier::initStatic(){    if (calledInitStatic)        return;    calledInitStatic = true;    headers.push_back(&AS_IF);    headers.push_back(&AS_ELSE);    headers.push_back(&AS_FOR);    headers.push_back(&AS_WHILE);    headers.push_back(&AS_DO);    headers.push_back(&AS_TRY);    headers.push_back(&AS_CATCH);    headers.push_back(&AS_FINALLY);    headers.push_back(&AS_SYNCHRONIZED);    headers.push_back(&AS_SWITCH);    headers.push_back(&AS_CASE);    headers.push_back(&AS_DEFAULT);    headers.push_back(&AS_FOREACH);    headers.push_back(&AS_LOCK);    headers.push_back(&AS_UNSAFE);    headers.push_back(&AS_FIXED);    headers.push_back(&AS_GET);    headers.push_back(&AS_SET);    headers.push_back(&AS_ADD);    headers.push_back(&AS_REMOVE);    //headers.push_back(&AS_PUBLIC);    //headers.push_back(&AS_PRIVATE);    //headers.push_back(&AS_PROTECTED);    //headers.push_back(&AS_OPERATOR);    headers.push_back(&AS_TEMPLATE);    headers.push_back(&AS_CONST);    /**/    headers.push_back(&AS_STATIC);    headers.push_back(&AS_EXTERN);    nonParenHeaders.push_back(&AS_ELSE);    nonParenHeaders.push_back(&AS_DO);    nonParenHeaders.push_back(&AS_TRY);    nonParenHeaders.push_back(&AS_FINALLY);    nonParenHeaders.push_back(&AS_STATIC);    nonParenHeaders.push_back(&AS_CONST);    nonParenHeaders.push_back(&AS_EXTERN);    nonParenHeaders.push_back(&AS_CASE);    nonParenHeaders.push_back(&AS_DEFAULT);    nonParenHeaders.push_back(&AS_UNSAFE);    nonParenHeaders.push_back(&AS_GET);    nonParenHeaders.push_back(&AS_SET);    nonParenHeaders.push_back(&AS_ADD);    nonParenHeaders.push_back(&AS_REMOVE);    nonParenHeaders.push_back(&AS_PUBLIC);    nonParenHeaders.push_back(&AS_PRIVATE);    nonParenHeaders.push_back(&AS_PROTECTED);    nonParenHeaders.push_back(&AS_TEMPLATE);    nonParenHeaders.push_back(&AS_CONST);///    nonParenHeaders.push_back(&AS_ASM);
    preBlockStatements.push_back(&AS_CLASS);    preBlockStatements.push_back(&AS_STRUCT);    preBlockStatements.push_back(&AS_UNION);    preBlockStatements.push_back(&AS_INTERFACE);    preBlockStatements.push_back(&AS_NAMESPACE);    preBlockStatements.push_back(&AS_THROWS);    preBlockStatements.push_back(&AS_EXTERN);    assignmentOperators.push_back(&AS_ASSIGN);    assignmentOperators.push_back(&AS_PLUS_ASSIGN);    assignmentOperators.push_back(&AS_MINUS_ASSIGN);    assignmentOperators.push_back(&AS_MULT_ASSIGN);    assignmentOperators.push_back(&AS_DIV_ASSIGN);    assignmentOperators.push_back(&AS_MOD_ASSIGN);    assignmentOperators.push_back(&AS_OR_ASSIGN);    assignmentOperators.push_back(&AS_AND_ASSIGN);    assignmentOperators.push_back(&AS_XOR_ASSIGN);    assignmentOperators.push_back(&AS_GR_GR_GR_ASSIGN);    assignmentOperators.push_back(&AS_GR_GR_ASSIGN);    assignmentOperators.push_back(&AS_LS_LS_LS_ASSIGN);    assignmentOperators.push_back(&AS_LS_LS_ASSIGN);    assignmentOperators.push_back(&AS_RETURN);    nonAssignmentOperators.push_back(&AS_EQUAL);    nonAssignmentOperators.push_back(&AS_PLUS_PLUS);    nonAssignmentOperators.push_back(&AS_MINUS_MINUS);    nonAssignmentOperators.push_back(&AS_NOT_EQUAL);    nonAssignmentOperators.push_back(&AS_GR_EQUAL);    nonAssignmentOperators.push_back(&AS_GR_GR_GR);    nonAssignmentOperators.push_back(&AS_GR_GR);    nonAssignmentOperators.push_back(&AS_LS_EQUAL);    nonAssignmentOperators.push_back(&AS_LS_LS_LS);    nonAssignmentOperators.push_back(&AS_LS_LS);    nonAssignmentOperators.push_back(&AS_ARROW);    nonAssignmentOperators.push_back(&AS_AND);    nonAssignmentOperators.push_back(&AS_OR);}/** * ASBeautifier's constructor */ASBeautifier::ASBeautifier(){    initStatic();    waitingBeautifierStack = NULL;    activeBeautifierStack = NULL;    waitingBeautifierStackLengthStack = NULL;    activeBeautifierStackLengthStack = NULL;    headerStack  = NULL;    tempStacks = NULL;    blockParenDepthStack = NULL;    blockStatementStack = NULL;    parenStatementStack = NULL;    bracketBlockStateStack = NULL;    inStatementIndentStack = NULL;    inStatementIndentStackSizeStack = NULL;    parenIndentStack = NULL;    sourceIterator = NULL;    isMinimalConditinalIndentSet = false;
	shouldForceTabIndentation = false;    setSpaceIndentation(4);    setMaxInStatementIndentLength(40);    setClassIndent(false);    setSwitchIndent(false);    setCaseIndent(false);    setBlockIndent(false);    setBracketIndent(false);    setNamespaceIndent(false);    setLabelIndent(false);    setEmptyLineFill(false);    setCStyle();    setPreprocessorIndent(false);
}ASBeautifier::ASBeautifier(const ASBeautifier &other){    waitingBeautifierStack = NULL;    activeBeautifierStack = NULL;    waitingBeautifierStackLengthStack = NULL;    activeBeautifierStackLengthStack = NULL;    headerStack  = new vector<const string*>;    *headerStack = *other.headerStack;    tempStacks = new vector< vector<const string*>* >;    vector< vector<const string*>* >::iterator iter;    for (iter = other.tempStacks->begin();            iter != other.tempStacks->end();            ++iter)    {        vector<const string*> *newVec = new vector<const string*>;        *newVec = **iter;        tempStacks->push_back(newVec);    }    blockParenDepthStack = new vector<int>;    *blockParenDepthStack = *other.blockParenDepthStack;    blockStatementStack = new vector<bool>;    *blockStatementStack = *other.blockStatementStack;    parenStatementStack =  new vector<bool>;    *parenStatementStack = *other.parenStatementStack;    bracketBlockStateStack = new vector<bool>;    *bracketBlockStateStack = *other.bracketBlockStateStack;    inStatementIndentStack = new vector<int>;    *inStatementIndentStack = *other.inStatementIndentStack;    inStatementIndentStackSizeStack = new vector<int>;    *inStatementIndentStackSizeStack = *other.inStatementIndentStackSizeStack;    parenIndentStack = new vector<int>;    *parenIndentStack = *other.parenIndentStack;    sourceIterator = other.sourceIterator;    indentString = other.indentString;    currentHeader = other.currentHeader;    previousLastLineHeader = other.previousLastLineHeader;    immediatelyPreviousAssignmentOp = other.immediatelyPreviousAssignmentOp;    isInQuote = other.isInQuote;    isInComment = other.isInComment;    isInCase = other.isInCase;    isInQuestion = other.isInQuestion;    isInStatement =other. isInStatement;    isInHeader = other.isInHeader;    isCStyle = other.isCStyle;    isInOperator = other.isInOperator;    isInTemplate = other.isInTemplate;    isInConst = other.isInConst;    classIndent = other.classIndent;    isInClassHeader = other.isInClassHeader;    isInClassHeaderTab = other.isInClassHeaderTab;    switchIndent = other.switchIndent;    caseIndent = other.caseIndent;    namespaceIndent = other.namespaceIndent;    bracketIndent = other.bracketIndent;    blockIndent = other.blockIndent;    labelIndent = other.labelIndent;    preprocessorIndent = other.preprocessorIndent;    parenDepth = other.parenDepth;    indentLength = other.indentLength;    blockTabCount = other.blockTabCount;    leadingWhiteSpaces = other.leadingWhiteSpaces;    maxInStatementIndent = other.maxInStatementIndent;    templateDepth = other.templateDepth;    quoteChar = other.quoteChar;    prevNonSpaceCh = other.prevNonSpaceCh;    currentNonSpaceCh = other.currentNonSpaceCh;    currentNonLegalCh = other.currentNonLegalCh;    prevNonLegalCh = other.prevNonLegalCh;    isInConditional = other.isInConditional;    minConditionalIndent = other.minConditionalIndent;    prevFinalLineSpaceTabCount = other.prevFinalLineSpaceTabCount;    prevFinalLineTabCount = other.prevFinalLineTabCount;    emptyLineFill = other.emptyLineFill;    probationHeader = other.probationHeader;    isInDefine = other.isInDefine;    isInDefineDefinition = other.isInDefineDefinition;
	backslashEndsPrevLine = other.backslashEndsPrevLine;    defineTabCount = other.defineTabCount;
}/** * ASBeautifier's destructor */ASBeautifier::~ASBeautifier(){    DELETE_CONTAINER( headerStack );    DELETE_CONTAINER( tempStacks );    DELETE_CONTAINER( blockParenDepthStack );    DELETE_CONTAINER( blockStatementStack );    DELETE_CONTAINER( parenStatementStack );    DELETE_CONTAINER( bracketBlockStateStack );    DELETE_CONTAINER( inStatementIndentStack );    DELETE_CONTAINER( inStatementIndentStackSizeStack );    DELETE_CONTAINER( parenIndentStack );    //DELETE_CONTAINER( sourceIterator );}/** * initialize the ASBeautifier. * * init() should be called every time a ABeautifier object is to start * beautifying a NEW source file. * init() recieves a pointer to a DYNAMICALLY CREATED ASSourceIterator object * that will be used to iterate through the source code. This object will be * deleted during the ASBeautifier's destruction, and thus should not be * deleted elsewhere. * * @param iter     a pointer to the DYNAMICALLY CREATED ASSourceIterator object. */void ASBeautifier::init(ASSourceIterator *iter){    sourceIterator = iter;    init();}/** * initialize the ASBeautifier. */void ASBeautifier::init(){    INIT_CONTAINER( waitingBeautifierStack,  new vector<ASBeautifier*> );    INIT_CONTAINER( activeBeautifierStack,  new vector<ASBeautifier*> );    INIT_CONTAINER( waitingBeautifierStackLengthStack, new vector<int> );    INIT_CONTAINER( activeBeautifierStackLengthStack, new vector<int> );    INIT_CONTAINER( headerStack,  new vector<const string*> );    INIT_CONTAINER( tempStacks, new vector< vector<const string*>* > );    tempStacks->push_back(new vector<const string*>);    INIT_CONTAINER( blockParenDepthStack, new vector<int> );    INIT_CONTAINER( blockStatementStack, new vector<bool> );    INIT_CONTAINER( parenStatementStack, new vector<bool> );    INIT_CONTAINER( bracketBlockStateStack, new vector<bool> );    bracketBlockStateStack->push_back(true);    INIT_CONTAINER( inStatementIndentStack, new vector<int> );    INIT_CONTAINER( inStatementIndentStackSizeStack, new vector<int> );    inStatementIndentStackSizeStack->push_back(0);    INIT_CONTAINER( parenIndentStack, new vector<int> );    immediatelyPreviousAssignmentOp = NULL;    previousLastLineHeader = NULL;    isInQuote = false;    isInComment = false;    isInStatement = false;    isInCase = false;    isInQuestion = false;    isInClassHeader = false;    isInClassHeaderTab = false;    isInHeader = false;    isInOperator = false;    isInTemplate = false;    isInConst = false;    isInConditional = false;    templateDepth = 0;    parenDepth=0;    blockTabCount = 0;    leadingWhiteSpaces = 0;    prevNonSpaceCh = '{';    currentNonSpaceCh = '{';    prevNonLegalCh = '{';    currentNonLegalCh = '{';    prevFinalLineSpaceTabCount = 0;    prevFinalLineTabCount = 0;    probationHeader = NULL;    backslashEndsPrevLine = false;    isInDefine = false;    isInDefineDefinition = false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -