當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript indentUtils.generateIndent函數代碼示例

本文整理匯總了TypeScript中vs/editor/contrib/indentation/indentUtils.generateIndent函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript generateIndent函數的具體用法?TypeScript generateIndent怎麽用?TypeScript generateIndent使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。


在下文中一共展示了generateIndent函數的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: getIndentEditsOfMovingBlock

    private getIndentEditsOfMovingBlock(model: ITokenizedModel, builder: IEditOperationBuilder, s: Selection, tabSize: number, insertSpaces: boolean, offset: number) {
        for (let i = s.startLineNumber; i <= s.endLineNumber; i++) {
            let lineContent = model.getLineContent(i);
            let originalIndent = strings.getLeadingWhitespace(lineContent);
            let originalSpacesCnt = IndentUtil.getSpaceCnt(originalIndent, tabSize);
            let newSpacesCnt = originalSpacesCnt + offset;
            let newIndent = IndentUtil.generateIndent(newSpacesCnt, tabSize, insertSpaces);

            if (newIndent !== originalIndent) {
                builder.addEditOperation(new Range(i, 1, i, originalIndent.length + 1), newIndent);

                if (i === s.endLineNumber && s.endColumn <= originalIndent.length + 1 && newIndent === '') {
                    // as users select part of the original indent white spaces
                    // when we adjust the indentation of endLine, we should adjust the cursor position as well.
                    this._moveEndLineSelectionShrink = true;
                }
            }

        }
    }
開發者ID:SeanKilleen,項目名稱:vscode,代碼行數:20,代碼來源:moveLinesCommand.ts

示例2: getEditOperations

    public getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {

        var modelLineCount = model.getLineCount();

        if (this._isMovingDown && this._selection.endLineNumber === modelLineCount) {
            return;
        }
        if (!this._isMovingDown && this._selection.startLineNumber === 1) {
            return;
        }

        this._moveEndPositionDown = false;
        var s = this._selection;

        if (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {
            this._moveEndPositionDown = true;
            s = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));
        }

        let tabSize = model.getOptions().tabSize;
        let insertSpaces = model.getOptions().insertSpaces;
        let indentConverter = this.buildIndentConverter(tabSize);
        let virtualModel = {
            getLineTokens: (lineNumber: number) => {
                return model.getLineTokens(lineNumber);
            },
            getLanguageIdentifier: () => {
                return model.getLanguageIdentifier();
            },
            getLanguageIdAtPosition: (lineNumber: number, column: number) => {
                return model.getLanguageIdAtPosition(lineNumber, column);
            },
            getLineContent: null
        };

        if (s.startLineNumber === s.endLineNumber && model.getLineMaxColumn(s.startLineNumber) === 1) {
            // Current line is empty
            var lineNumber = s.startLineNumber;
            var otherLineNumber = (this._isMovingDown ? lineNumber + 1 : lineNumber - 1);

            if (model.getLineMaxColumn(otherLineNumber) === 1) {
                // Other line number is empty too, so no editing is needed
                // Add a no-op to force running by the model
                builder.addEditOperation(new Range(1, 1, 1, 1), null);
            } else {
                // Type content from other line number on line number
                builder.addEditOperation(new Range(lineNumber, 1, lineNumber, 1), model.getLineContent(otherLineNumber));

                // Remove content from other line number
                builder.addEditOperation(new Range(otherLineNumber, 1, otherLineNumber, model.getLineMaxColumn(otherLineNumber)), null);
            }
            // Track selection at the other line number
            s = new Selection(otherLineNumber, 1, otherLineNumber, 1);

        } else {

            var movingLineNumber: number,
                movingLineText: string;

            if (this._isMovingDown) {
                movingLineNumber = s.endLineNumber + 1;
                movingLineText = model.getLineContent(movingLineNumber);
                // Delete line that needs to be moved
                builder.addEditOperation(new Range(movingLineNumber - 1, model.getLineMaxColumn(movingLineNumber - 1), movingLineNumber, model.getLineMaxColumn(movingLineNumber)), null);

                let insertingText = movingLineText;

                if (this.shouldAutoIndent(model, s)) {
                    let movingLineMatchResult = this.matchEnterRule(model, indentConverter, tabSize, movingLineNumber, s.startLineNumber - 1);
                    // if s.startLineNumber - 1 matches onEnter rule, we still honor that.
                    if (movingLineMatchResult !== null) {
                        let oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));
                        let newSpaceCnt = movingLineMatchResult + IndentUtil.getSpaceCnt(oldIndentation, tabSize);
                        let newIndentation = IndentUtil.generateIndent(newSpaceCnt, tabSize, insertSpaces);
                        insertingText = newIndentation + this.trimLeft(movingLineText);
                    } else {
                        // no enter rule matches, let's check indentatin rules then.
                        virtualModel.getLineContent = (lineNumber: number) => {
                            if (lineNumber === s.startLineNumber) {
                                return model.getLineContent(movingLineNumber);
                            } else {
                                return model.getLineContent(lineNumber);
                            }
                        };
                        let indentOfMovingLine = LanguageConfigurationRegistry.getGoodIndentForLine(virtualModel, model.getLanguageIdAtPosition(
                            movingLineNumber, 1), s.startLineNumber, indentConverter);
                        if (indentOfMovingLine !== null) {
                            let oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));
                            let newSpaceCnt = IndentUtil.getSpaceCnt(indentOfMovingLine, tabSize);
                            let oldSpaceCnt = IndentUtil.getSpaceCnt(oldIndentation, tabSize);
                            if (newSpaceCnt !== oldSpaceCnt) {
                                let newIndentation = IndentUtil.generateIndent(newSpaceCnt, tabSize, insertSpaces);
                                insertingText = newIndentation + this.trimLeft(movingLineText);
                            }
                        }
                    }

                    // add edit operations for moving line first to make sure it's executed after we make indentation change
                    // to s.startLineNumber
                    builder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), insertingText + '\n');
//.........這裏部分代碼省略.........
開發者ID:SeanKilleen,項目名稱:vscode,代碼行數:101,代碼來源:moveLinesCommand.ts


注:本文中的vs/editor/contrib/indentation/indentUtils.generateIndent函數示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。