亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? asformatter.cpp

?? 一個(gè)強(qiáng)大的源代碼格式化程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*
 * Copyright (c) 1998,1999,2000,2001,2002 Tal Davidson. All rights reserved.
 *
 * ASFormatter.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:
 * 26 November 1998 - Richard Bullington -
 *        A correction of line-breaking in headers following '}',
 *        was created using a variation of a  patch by Richard Bullington.
 */

#include "compiler_defines.h"
#include "astyle.h"

#include <string>
#include <cctype>
#include <vector>
#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) ; }
#define IS_A(a,b)                            ( ((a) & (b)) == (b))
#ifdef USES_NAMESPACE
using namespace std;

namespace astyle
{
#endif


bool ASFormatter::calledInitStatic = false;
vector<const string*> ASFormatter::headers;
vector<const string*> ASFormatter::nonParenHeaders;
vector<const string*> ASFormatter::preprocessorHeaders;
vector<const string*> ASFormatter::preDefinitionHeaders;
vector<const string*> ASFormatter::preCommandHeaders;
vector<const string*> ASFormatter::operators;
vector<const string*> ASFormatter::assignmentOperators;

/**
 * Constructor of ASFormatter
 */
ASFormatter::ASFormatter()
{
    staticInit();

    preBracketHeaderStack = NULL;
    bracketTypeStack = NULL;
    parenStack = NULL;

    sourceIterator = NULL;
    bracketFormatMode = NONE_MODE;
    shouldPadOperators = false;
    shouldPadParenthesies = false;
    shouldBreakOneLineBlocks = true;
    shouldBreakOneLineStatements = true;
    shouldConvertTabs = false;
    shouldBreakBlocks = false;
    shouldBreakClosingHeaderBlocks = false;
    shouldBreakClosingHeaderBrackets = false;
	shouldBreakElseIfs = false;
}

/**
 * Destructor of ASFormatter
 */
ASFormatter::~ASFormatter()
{
    DELETE_CONTAINER( preBracketHeaderStack );
}

/**
 * initialization of static data of ASFormatter.
 */
void ASFormatter::staticInit()
{
    if (calledInitStatic)
        return;

    calledInitStatic = true;

    headers.push_back(&AS_IF);
    headers.push_back(&AS_ELSE);
    headers.push_back(&AS_DO);
    headers.push_back(&AS_WHILE);
    headers.push_back(&AS_FOR);
    headers.push_back(&AS_SYNCHRONIZED);
    headers.push_back(&AS_TRY);
    headers.push_back(&AS_CATCH);
    headers.push_back(&AS_FINALLY);
    headers.push_back(&AS_SWITCH);
    headers.push_back(&AS_TEMPLATE);
    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);
    nonParenHeaders.push_back(&AS_ELSE);
    nonParenHeaders.push_back(&AS_DO);
    nonParenHeaders.push_back(&AS_TRY);
    nonParenHeaders.push_back(&AS_FINALLY);
    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_TEMPLATE);

    preDefinitionHeaders.push_back(&AS_CLASS);
    preDefinitionHeaders.push_back(&AS_INTERFACE);
    preDefinitionHeaders.push_back(&AS_NAMESPACE);
    preDefinitionHeaders.push_back(&AS_STRUCT);

    preCommandHeaders.push_back(&AS_EXTERN);
    preCommandHeaders.push_back(&AS_THROWS);
    preCommandHeaders.push_back(&AS_CONST);

    preprocessorHeaders.push_back(&AS_BAR_DEFINE);
			//// DEVEL: removed the folowing lines
		    ////preprocessorHeaders.push_back(&AS_BAR_INCLUDE);
			////preprocessorHeaders.push_back(&AS_BAR_IF); // #if or #ifdef
			////preprocessorHeaders.push_back(&AS_BAR_EL); // #else or #elif
			////preprocessorHeaders.push_back(&AS_BAR_ENDIF);

    operators.push_back(&AS_PLUS_ASSIGN);
    operators.push_back(&AS_MINUS_ASSIGN);
    operators.push_back(&AS_MULT_ASSIGN);
    operators.push_back(&AS_DIV_ASSIGN);
    operators.push_back(&AS_MOD_ASSIGN);
    operators.push_back(&AS_OR_ASSIGN);
    operators.push_back(&AS_AND_ASSIGN);
    operators.push_back(&AS_XOR_ASSIGN);
    operators.push_back(&AS_EQUAL);
    operators.push_back(&AS_PLUS_PLUS);
    operators.push_back(&AS_MINUS_MINUS);
    operators.push_back(&AS_NOT_EQUAL);
    operators.push_back(&AS_GR_EQUAL);
    operators.push_back(&AS_GR_GR_GR_ASSIGN);
    operators.push_back(&AS_GR_GR_ASSIGN);
    operators.push_back(&AS_GR_GR_GR);
    operators.push_back(&AS_GR_GR);
    operators.push_back(&AS_LS_EQUAL);
    operators.push_back(&AS_LS_LS_LS_ASSIGN);
    operators.push_back(&AS_LS_LS_ASSIGN);
    operators.push_back(&AS_LS_LS_LS);
    operators.push_back(&AS_LS_LS);
    operators.push_back(&AS_ARROW);
    operators.push_back(&AS_AND);
    operators.push_back(&AS_OR);
    operators.push_back(&AS_COLON_COLON);

			//// BUGFIX: removed the folowing lines
			////    operators.push_back(&AS_PAREN_PAREN);
			////    operators.push_back(&AS_BLPAREN_BLPAREN);

    operators.push_back(&AS_PLUS);
    operators.push_back(&AS_MINUS);
    operators.push_back(&AS_MULT);
    operators.push_back(&AS_DIV);
    operators.push_back(&AS_MOD);
    operators.push_back(&AS_QUESTION);
    operators.push_back(&AS_COLON);
    operators.push_back(&AS_ASSIGN);
    operators.push_back(&AS_LS);
    operators.push_back(&AS_GR);
    operators.push_back(&AS_NOT);
    operators.push_back(&AS_BIT_OR);
    operators.push_back(&AS_BIT_AND);
    operators.push_back(&AS_BIT_NOT);
    operators.push_back(&AS_BIT_XOR);
    operators.push_back(&AS_OPERATOR);
    operators.push_back(&AS_COMMA);
    //    operators.push_back(&AS_SEMICOLON);
    operators.push_back(&AS_RETURN);

    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_XOR_ASSIGN);
    assignmentOperators.push_back(&AS_OR_ASSIGN);
    assignmentOperators.push_back(&AS_AND_ASSIGN);
    assignmentOperators.push_back(&AS_GR_GR_GR_ASSIGN);
    assignmentOperators.push_back(&AS_LS_LS_LS_ASSIGN);
    assignmentOperators.push_back(&AS_ASSIGN);
}

/**
 * initialize the ASFormatter.
 *
 * init() should be called every time a ASFormatter object is to start
 * formatting 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 ASFormatter's destruction, and thus should not be
 * deleted elsewhere.
 *
 * @param iter     a pointer to the DYNAMICALLY CREATED ASSourceIterator object.
 */
void ASFormatter::init(ASSourceIterator *si)
{
    ASBeautifier::init(si);
    sourceIterator = si;

    INIT_CONTAINER( preBracketHeaderStack, new vector<const string*> );
    INIT_CONTAINER( bracketTypeStack, new vector<BracketType> );
    bracketTypeStack->push_back(DEFINITION_TYPE);
    INIT_CONTAINER( parenStack, new vector<int> );
    parenStack->push_back(0);

    currentHeader = NULL;
    currentLine = string("");
    formattedLine = "";
    currentChar = ' ';
    previousCommandChar = ' ';
    previousNonWSChar = ' ';
    quoteChar = '"';
    charNum = 0;
    previousOperator = NULL;

    isVirgin = true;
    isInLineComment = false;
    isInComment = false;
    isInPreprocessor = false;
    doesLineStartComment = false;
    isInQuote = false;
    isSpecialChar = false;
    isNonParenHeader = true;
    foundPreDefinitionHeader = false;
    foundPreCommandHeader = false;
    foundQuestionMark = false;
    isInLineBreak = false;
    endOfCodeReached = false;
    isLineReady = false;
    isPreviousBracketBlockRelated = true;
    isInPotentialCalculation = false;
    //foundOneLineBlock = false;
    shouldReparseCurrentChar = false;
    passedSemicolon = false;
    passedColon = false;
    isInTemplate = false;
    shouldBreakLineAfterComments = false;
    isImmediatelyPostComment = false;
    isImmediatelyPostLineComment = false;
	isImmediatelyPostEmptyBlock = false;

    isPrependPostBlockEmptyLineRequested = false;
    isAppendPostBlockEmptyLineRequested = false;
    prependEmptyLine = false;

    foundClosingHeader = false;
    previousReadyFormattedLineLength = 0;

	isImmediatelyPostHeader = false;
	isInHeader = false;
}

/**
 * get the next formatted line.
 *
 * @return    formatted line.
 */

string ASFormatter::nextLine()
{
    const string *newHeader;
    bool isCharImmediatelyPostComment = false;
    bool isPreviousCharPostComment = false;
    bool isCharImmediatelyPostLineComment = false;
    bool isInVirginLine = isVirgin;
    bool isCharImmediatelyPostOpenBlock = false;
    bool isCharImmediatelyPostCloseBlock = false;
	bool isCharImmediatelyPostTemplate = false;
    bool isCharImmediatelyPostHeader = false;

    if (!isFormattingEnabled())
        return ASBeautifier::nextLine();

    while (!isLineReady)
    {
        if (shouldReparseCurrentChar)
            shouldReparseCurrentChar = false;
        else if (!getNextChar())
        {
            breakLine();
            return beautify(readyFormattedLine);
        }
        else // stuff to do when reading a new character...
        {
            // make sure that a virgin '{' at the begining ofthe file will be treated as a block...
            if (isInVirginLine && currentChar == '{')
                previousCommandChar = '{';
            isPreviousCharPostComment = isCharImmediatelyPostComment;
            isCharImmediatelyPostComment = false;
			isCharImmediatelyPostTemplate = false;
            isCharImmediatelyPostHeader = false;
        }

        if (isInLineComment)
        {
            appendCurrentChar();

            // explicitely break a line when a line comment's end is found.
            if (/*bracketFormatMode == ATTACH_MODE &&*/ charNum+1 == currentLine.length())
            {
                isInLineBreak = true;
                isInLineComment = false;
                isImmediatelyPostLineComment = true;
                currentChar = 0;  //make sure it is a neutral char.
            }
            continue;
        }
        else if (isInComment)
        {
            if (isSequenceReached(AS_CLOSE_COMMENT))
            {
                isInComment = false;
                isImmediatelyPostComment = true;
                appendSequence(AS_CLOSE_COMMENT);
                goForward(1);
            }
            else
                appendCurrentChar();

            continue;
        }

        // not in line comment or comment

        else if (isInQuote)
        {
            if (isSpecialChar)
            {
                isSpecialChar = false;
                appendCurrentChar();
            }
            else if (currentChar == '\\')
            {
                isSpecialChar = true;
                appendCurrentChar();
            }
            else if (quoteChar == currentChar)
            {
                isInQuote = false;
                appendCurrentChar();
            }
            else
            {
                appendCurrentChar();
            }

            continue;
        }



        // handle white space - needed to simplify the rest.
        if (isWhiteSpace(currentChar) || isInPreprocessor)
        {
            ////// DEVEL: if (isLegalNameChar(previousChar) && isLegalNameChar(peekNextChar()))
            appendCurrentChar();
            continue;
        }

        /* not in MIDDLE of quote or comment or white-space of any type ... */

        if (isSequenceReached(AS_OPEN_LINE_COMMENT))
        {
            isInLineComment = true;
            if (shouldPadOperators)
                appendSpacePad();
            appendSequence(AS_OPEN_LINE_COMMENT);
            goForward(1);
            continue;
        }
        else if (isSequenceReached(AS_OPEN_COMMENT))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美自拍偷拍色图| 7777精品伊人久久久大香线蕉完整版 | 国产亚洲精品超碰| 日本一区免费视频| 一本一道久久a久久精品| 日本一区二区三级电影在线观看| 日韩一区二区三| 日韩亚洲欧美高清| 久久婷婷国产综合精品青草| 国产日产欧美一区二区三区 | 精品视频1区2区| 国产精品一区在线观看你懂的| 亚洲成人自拍偷拍| 亚洲欧洲精品一区二区三区不卡| 一级做a爱片久久| 国产精品污www在线观看| 精品久久国产字幕高潮| 91小视频免费观看| 国产a级毛片一区| 久国产精品韩国三级视频| 一区二区三区产品免费精品久久75| 精品国产污网站| 欧美一区二区三区四区视频| 欧美午夜精品一区二区三区| 成人h动漫精品一区二区| 国产成人免费9x9x人网站视频| 亚洲午夜羞羞片| 视频一区二区欧美| 美女脱光内衣内裤视频久久网站 | 日韩精品电影在线| 婷婷开心激情综合| 亚洲一区二区三区自拍| 亚洲色图在线播放| 亚洲欧美在线高清| 中文字幕av一区二区三区高 | 最新国产の精品合集bt伙计| 久久人人爽人人爽| 国产亚洲精品bt天堂精选| 久久久国际精品| 亚洲欧美一区二区三区久本道91 | 一区二区三区四区蜜桃| 亚洲欧美一区二区在线观看| 一区二区在线免费观看| 亚洲欧美激情在线| 午夜精品久久久久久久99水蜜桃| 五月激情综合婷婷| 国产suv一区二区三区88区| 99久久久国产精品| 色哟哟精品一区| 日韩一级黄色片| 亚洲国产精品麻豆| 色综合天天天天做夜夜夜夜做| 日韩一级视频免费观看在线| 天天操天天综合网| 在线一区二区三区做爰视频网站| 久久午夜老司机| 蜜桃久久av一区| 日韩欧美在线网站| 久久99国产精品久久99果冻传媒| 色噜噜狠狠色综合欧洲selulu| 91精品国产综合久久精品麻豆 | 成人爱爱电影网址| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一区二区女人| 日日摸夜夜添夜夜添国产精品| 91精彩视频在线| 亚洲国产精品久久人人爱蜜臀| av成人老司机| 亚洲日韩欧美一区二区在线| 成人avav在线| 一区二区三区在线看| 91电影在线观看| 日韩成人午夜精品| 日韩欧美国产不卡| 黑人精品欧美一区二区蜜桃| 亚洲精品一区在线观看| 国产剧情在线观看一区二区| 日韩一区二区免费在线电影| 久久国产视频网| 欧美极品aⅴ影院| 99久久免费视频.com| 一二三区精品视频| 欧美一区二区三区视频在线观看| 狠狠色2019综合网| 亚洲欧美二区三区| 欧美成人video| 成人99免费视频| 天堂蜜桃91精品| 国产精品久久久一区麻豆最新章节| 91丝袜国产在线播放| 人禽交欧美网站| 国产精品传媒入口麻豆| 日韩欧美激情四射| 97se亚洲国产综合自在线不卡| 亚洲图片欧美一区| 欧美国产丝袜视频| 91精品国产综合久久久久| 99久久婷婷国产| 久久99精品久久久久婷婷| 亚洲你懂的在线视频| 国产亚洲一区二区三区| 3atv一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 久久爱www久久做| 日韩av中文字幕一区二区三区| 国产精品你懂的在线| 久久精品亚洲一区二区三区浴池 | 在线看日本不卡| 91丨国产丨九色丨pron| 高清国产一区二区| 国产不卡在线视频| 国产成人啪午夜精品网站男同| 日韩国产欧美在线视频| 亚洲成va人在线观看| 丁香亚洲综合激情啪啪综合| 国产福利91精品一区二区三区| 另类中文字幕网| 国产成人在线免费观看| 国产一区二区三区精品视频| 国产一区亚洲一区| 成人午夜免费av| 色伊人久久综合中文字幕| 欧洲中文字幕精品| 日韩欧美色综合网站| 欧美一级黄色片| 亚洲欧洲精品一区二区精品久久久| 国产精品福利一区二区| 一区二区三区四区国产精品| 日韩综合小视频| 成人免费av资源| 欧美日韩高清一区| 欧美激情在线免费观看| 性久久久久久久久久久久| 免费高清视频精品| 91日韩在线专区| 2欧美一区二区三区在线观看视频| 中文字幕乱码日本亚洲一区二区| 亚洲综合一区在线| 国产91丝袜在线观看| 欧美视频在线观看一区二区| 久久色在线观看| 午夜精品在线看| 风流少妇一区二区| 精品久久久网站| 天天综合天天综合色| 91在线播放网址| 国产日韩欧美亚洲| 美女性感视频久久| 91精品国产一区二区| 午夜亚洲国产au精品一区二区| av午夜精品一区二区三区| 日韩视频免费直播| 热久久免费视频| 欧美v日韩v国产v| 久久国产免费看| 欧美本精品男人aⅴ天堂| 国内成+人亚洲+欧美+综合在线| 欧美日韩精品一区二区三区四区 | 欧美亚洲国产一区二区三区va | 成人午夜视频网站| 国产精品欧美综合在线| 大胆亚洲人体视频| 国产精品欧美极品| 91在线一区二区| 亚洲一区二区欧美激情| 欧美日韩激情在线| 天天操天天干天天综合网| 欧美日韩精品免费| 青青草原综合久久大伊人精品| 性久久久久久久| 久久久99久久| 欧美精品 日韩| 国产成人av影院| 国产精品人人做人人爽人人添| 天堂久久久久va久久久久| 久久影院午夜论| 91欧美一区二区| 免费av成人在线| 国产亚洲精品bt天堂精选| 日本丰满少妇一区二区三区| 日韩精品电影一区亚洲| 久久婷婷成人综合色| eeuss影院一区二区三区| 亚洲一区在线观看免费观看电影高清| 欧美日韩精品二区第二页| 91在线视频18| 精品影院一区二区久久久| 国产精品久久久久精k8| 久久亚洲精品国产精品紫薇| 色综合久久久网| 91成人在线精品| 成人毛片在线观看| 狠狠色综合色综合网络| 日本一不卡视频| 亚洲资源中文字幕| 亚洲欧美二区三区| 国产精品国产三级国产aⅴ无密码| 欧美福利电影网| 555www色欧美视频| 91精品国产综合久久精品app|