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

📄 asbeautifier.cpp

📁 Artistic Style is a reindenter and reformatter of C, C++, C# and Java source code. When indentin
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    // if there exists any worker beautifier in the activeBeautifierStack,    // then use it instead of me to indent the current line.    if (!isInDefine && activeBeautifierStack != NULL && !activeBeautifierStack->empty())    {        return activeBeautifierStack->back()->beautify(line);    }    // calculate preliminary indentation based on data from past lines    if (!inStatementIndentStack->empty())        spaceTabCount = inStatementIndentStack->back();    for (i=0; i<headerStackSize; i++)    {        isInClass = false;        if (blockIndent || (!(i>0 && (*headerStack)[i-1] != &AS_OPEN_BRACKET                              && (*headerStack)[i] == &AS_OPEN_BRACKET)))            ++tabCount;        if (isCStyle && !namespaceIndent && i >= 1                && (*headerStack)[i-1] == &AS_NAMESPACE                && (*headerStack)[i] == &AS_OPEN_BRACKET)            --tabCount;        if (isCStyle && i >= 1                && (*headerStack)[i-1] == &AS_CLASS                && (*headerStack)[i] == &AS_OPEN_BRACKET )        {            if (classIndent)                ++tabCount;            isInClass = true;        }        // is the switchIndent option is on, indent switch statements an additional indent.        else if (switchIndent && i > 1 &&                 (*headerStack)[i-1] == &AS_SWITCH &&                 (*headerStack)[i] == &AS_OPEN_BRACKET                )        {            ++tabCount;            isInSwitch = true;        }    }    if (!lineStartsInComment            && isCStyle             && isInClass             && classIndent             && headerStackSize >= 2            &&(*headerStack)[headerStackSize-2] == &AS_CLASS            && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET             && line[0] == '}')        --tabCount;    else if (!lineStartsInComment            && isInSwitch             && switchIndent             && headerStackSize >= 2             && (*headerStack)[headerStackSize-2] == &AS_SWITCH             && (*headerStack)[headerStackSize-1] == &AS_OPEN_BRACKET             && line[0] == '}')        --tabCount;    if (isInClassHeader)    {        isInClassHeaderTab = true;        tabCount += 2;    }    if (isInConditional)    {        --tabCount;    }    // parse characters in the current line.    for (i=0; i<line.length(); i++)    {        tempCh = line[i];        prevCh = ch;        ch = tempCh;        outBuffer.append(1, ch);        if (isWhiteSpace(ch))            continue;        // handle special characters (i.e. backslash+character such as \n, \t, ...)        if (isSpecialChar)        {            isSpecialChar = false;            continue;        }        if (!(isInComment || isInLineComment) && line.COMPARE(i, 2, string("\\\\")) == 0)        {            outBuffer.append(1, '\\');            i++;            continue;        }        if (!(isInComment || isInLineComment) && ch=='\\')        {            isSpecialChar = true;            continue;        }        // handle quotes (such as 'x' and "Hello Dolly")        if (!(isInComment || isInLineComment) && (ch=='"' || ch=='\''))            if (!isInQuote)            {                quoteChar = ch;                isInQuote = true;            }            else if (quoteChar == ch)            {                isInQuote = false;                isInStatement = true;                continue;            }        if (isInQuote)            continue;        // handle comments        if ( !(isInComment || isInLineComment) && line.COMPARE(i, 2, AS_OPEN_LINE_COMMENT) == 0 )        {            isInLineComment = true;            outBuffer.append(1, '/');            i++;            continue;        }        else if ( !(isInComment || isInLineComment) && line.COMPARE(i, 2, AS_OPEN_COMMENT) == 0 )        {            isInComment = true;            outBuffer.append(1, '*');            i++;            continue;        }        else if ( (isInComment || isInLineComment) && line.COMPARE(i, 2, AS_CLOSE_COMMENT) == 0 )        {            isInComment = false;            outBuffer.append(1, '/');            i++;            continue;        }        if (isInComment||isInLineComment)            continue;        // if we have reached this far then we are NOT in a comment or string of special character...        if (probationHeader != NULL)        {            if ( ((probationHeader == &AS_STATIC || probationHeader == &AS_CONST) && ch == '{')                    || (probationHeader == &AS_SYNCHRONIZED && ch == '('))            {                // insert the probation header as a new header                isInHeader = true;                headerStack->push_back(probationHeader);                // handle the specific probation header                isInConditional = (probationHeader == &AS_SYNCHRONIZED);                if (probationHeader == &AS_CONST)                    isImmediatelyAfterConst = true;                //  isInConst = true;                /* TODO:                 * There is actually no more need for the global isInConst variable.                               * The only reason for checking const is to see if there is a const                 * immediately before an open-bracket.                 * Since CONST is now put into probation and is checked during itspost-char,                 * isImmediatelyAfterConst can be set by its own...                 */                isInStatement = false;                // if the probation comes from the previous line, then indent by 1 tab count.                if (previousLineProbation && ch == '{')                    tabCount++;                previousLineProbation = false;            }            // dismiss the probation header            probationHeader = NULL;        }        prevNonSpaceCh = currentNonSpaceCh;        currentNonSpaceCh = ch;        if (!isLegalNameChar(ch) && ch != ',' && ch != ';' )        {            prevNonLegalCh = currentNonLegalCh;            currentNonLegalCh = ch;        }        //if (isInConst)        //{        //    isInConst = false;        //    isImmediatelyAfterConst = true;        //}        if (isInHeader)        {            isInHeader = false;            currentHeader = headerStack->back();        }        else            currentHeader = NULL;        if (isCStyle && isInTemplate                && (ch == '<' || ch == '>')                &&  findHeader(line, i, nonAssignmentOperators) == NULL) //;        {            if (ch == '<')            {                ++templateDepth;            }            else if (ch == '>')            {                if (--templateDepth <= 0)                {                    if (isInTemplate)                        ch = ';';                    else                        ch = 't';                    isInTemplate = false;                    templateDepth = 0;                }            }        }        // handle parenthesies        if (ch == '(' || ch == '[' || ch == ')' || ch == ']')        {            if (ch == '(' || ch == '[')            {                if (parenDepth == 0)                {                    parenStatementStack->push_back(isInStatement);                    isInStatement = true;                }                parenDepth++;                inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size());                if (currentHeader != NULL)                    registerInStatementIndent(line, i, spaceTabCount, minConditionalIndent/*indentLength*2*/, true);                else                    registerInStatementIndent(line, i, spaceTabCount, 0, true);            }            else if (ch == ')' || ch == ']')            {                parenDepth--;                if (parenDepth == 0)                {                    isInStatement = parenStatementStack->back();                    parenStatementStack->pop_back();                    ch = ' ';                    isInConditional = false;                }                if (!inStatementIndentStackSizeStack->empty())                {                    int previousIndentStackSize = inStatementIndentStackSizeStack->back();                    inStatementIndentStackSizeStack->pop_back();                    while (previousIndentStackSize < inStatementIndentStack->size())                        inStatementIndentStack->pop_back();                    if (!parenIndentStack->empty())                    {                        int poppedIndent = parenIndentStack->back();                        parenIndentStack->pop_back();                        if (i == 0)                            spaceTabCount = poppedIndent;                    }                }            }            continue;        }        if (ch == '{')        {            bool isBlockOpener = false;            // first, check if '{' is a block-opener or an static-array opener            isBlockOpener = ( (prevNonSpaceCh == '{' && bracketBlockStateStack->back())                              || prevNonSpaceCh == '}'                              || prevNonSpaceCh == ')'                              || prevNonSpaceCh == ';'                              || isInClassHeader                              || isBlockOpener                              || isImmediatelyAfterConst                              || (isInDefine &&                                  (prevNonSpaceCh == '('                                   || prevNonSpaceCh == '_'                                   || isalnum(prevNonSpaceCh))) );            isInClassHeader = false;            if (!isBlockOpener && currentHeader != NULL)            {                for (int n=0; n < nonParenHeaders.size(); n++)                    if (currentHeader == nonParenHeaders[n])                    {                        isBlockOpener = true;                        break;                    }            }            bracketBlockStateStack->push_back(isBlockOpener);            if (!isBlockOpener)            {                inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size());                registerInStatementIndent(line, i, spaceTabCount, 0, true);                parenDepth++;                if (i == 0)                    shouldIndentBrackettedLine = false;                continue;            }            // this bracket is a block opener...            ++lineOpeningBlocksNum;            if (isInClassHeader)                isInClassHeader = false;            if (isInClassHeaderTab)            {                isInClassHeaderTab = false;                tabCount -= 2;            }            blockParenDepthStack->push_back(parenDepth);            blockStatementStack->push_back(isInStatement);            inStatementIndentStackSizeStack->push_back(inStatementIndentStack->size());            blockTabCount += isInStatement? 1 : 0;            parenDepth = 0;            isInStatement = false;            tempStacks->push_back(new vector<const string*>);            headerStack->push_back(&AS_OPEN_BRACKET);            lastLineHeader = &AS_OPEN_BRACKET; // <------            continue;        }        //check if a header has been reached        if (prevCh == ' ')        {            bool isIndentableHeader = true;            const string *newHeader = findHeader(line, i, headers);            if (newHeader != NULL)            {                // if we reached here, then this is a header...                isInHeader = true;                vector<const string*> *lastTempStack;                if (tempStacks->empty())                    lastTempStack = NULL;                else                    lastTempStack = tempStacks->back();                // if a new block is opened, push a new stack into tempStacks to hold the                // future list of headers in the new block.                // take care of the special case: 'else if (...)'                if (newHeader == &AS_IF && lastLineHeader == &AS_ELSE)                {                    //spaceTabCount += indentLength; // to counter the opposite addition that occurs when the 'if' is registered below...                    headerStack->pop_back();                }                // take care of 'else'                else if (newHeader == &AS_ELSE)                {                    if (lastTempStack != NULL)                    {                        int indexOfIf = indexOf(*lastTempStack, &AS_IF); // <---                        if (indexOfIf != -1)                        {

⌨️ 快捷键说明

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