Skip to content

Commit

Permalink
💄 (Reordering Symbols, Fixing spaces)
Browse files Browse the repository at this point in the history
  • Loading branch information
hediet committed Nov 9, 2021
1 parent c833f69 commit 3f56153
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 130 deletions.
1 change: 0 additions & 1 deletion src/vs/editor/common/viewModel/modelLineProjectionData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/


import { WrappingIndent } from 'vs/editor/common/config/editorOptions';
import { FontInfo } from 'vs/editor/common/config/fontInfo';
import { Position } from 'vs/editor/common/core/position';
Expand Down
91 changes: 45 additions & 46 deletions src/vs/editor/common/viewModel/monospaceLineBreaksComputer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,53 +12,7 @@ import { LineInjectedText } from 'vs/editor/common/model/textModelEvents';
import { InjectedTextOptions } from 'vs/editor/common/model';
import { ILineBreaksComputerFactory, ILineBreaksComputer, ModelLineProjectionData } from 'vs/editor/common/viewModel/modelLineProjectionData';

const enum CharacterClass {
NONE = 0,
BREAK_BEFORE = 1,
BREAK_AFTER = 2,
BREAK_IDEOGRAPHIC = 3 // for Han and Kana.
}

class WrappingCharacterClassifier extends CharacterClassifier<CharacterClass> {

constructor(BREAK_BEFORE: string, BREAK_AFTER: string) {
super(CharacterClass.NONE);

for (let i = 0; i < BREAK_BEFORE.length; i++) {
this.set(BREAK_BEFORE.charCodeAt(i), CharacterClass.BREAK_BEFORE);
}

for (let i = 0; i < BREAK_AFTER.length; i++) {
this.set(BREAK_AFTER.charCodeAt(i), CharacterClass.BREAK_AFTER);
}
}

public override get(charCode: number): CharacterClass {
if (charCode >= 0 && charCode < 256) {
return <CharacterClass>this._asciiMap[charCode];
} else {
// Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:
// 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)
// 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)
// 3. Hiragana and Katakana (0x3040 -- 0x30FF)
if (
(charCode >= 0x3040 && charCode <= 0x30FF)
|| (charCode >= 0x3400 && charCode <= 0x4DBF)
|| (charCode >= 0x4E00 && charCode <= 0x9FFF)
) {
return CharacterClass.BREAK_IDEOGRAPHIC;
}

return <CharacterClass>(this._map.get(charCode) || this._defaultValue);
}
}
}

let arrPool1: number[] = [];
let arrPool2: number[] = [];

export class MonospaceLineBreaksComputerFactory implements ILineBreaksComputerFactory {

public static create(options: IComputedEditorOptions): MonospaceLineBreaksComputerFactory {
return new MonospaceLineBreaksComputerFactory(
options.get(EditorOption.wordWrapBreakBeforeCharacters),
Expand Down Expand Up @@ -105,6 +59,51 @@ export class MonospaceLineBreaksComputerFactory implements ILineBreaksComputerFa
}
}

const enum CharacterClass {
NONE = 0,
BREAK_BEFORE = 1,
BREAK_AFTER = 2,
BREAK_IDEOGRAPHIC = 3 // for Han and Kana.
}

class WrappingCharacterClassifier extends CharacterClassifier<CharacterClass> {

constructor(BREAK_BEFORE: string, BREAK_AFTER: string) {
super(CharacterClass.NONE);

for (let i = 0; i < BREAK_BEFORE.length; i++) {
this.set(BREAK_BEFORE.charCodeAt(i), CharacterClass.BREAK_BEFORE);
}

for (let i = 0; i < BREAK_AFTER.length; i++) {
this.set(BREAK_AFTER.charCodeAt(i), CharacterClass.BREAK_AFTER);
}
}

public override get(charCode: number): CharacterClass {
if (charCode >= 0 && charCode < 256) {
return <CharacterClass>this._asciiMap[charCode];
} else {
// Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:
// 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)
// 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)
// 3. Hiragana and Katakana (0x3040 -- 0x30FF)
if (
(charCode >= 0x3040 && charCode <= 0x30FF)
|| (charCode >= 0x3400 && charCode <= 0x4DBF)
|| (charCode >= 0x4E00 && charCode <= 0x9FFF)
) {
return CharacterClass.BREAK_IDEOGRAPHIC;
}

return <CharacterClass>(this._map.get(charCode) || this._defaultValue);
}
}
}

let arrPool1: number[] = [];
let arrPool2: number[] = [];

function createLineBreaksFromPreviousLineBreaks(classifier: WrappingCharacterClassifier, previousBreakingData: ModelLineProjectionData, lineText: string, tabSize: number, firstLineBreakColumn: number, columnsForFullWidthChar: number, wrappingIndent: WrappingIndent): ModelLineProjectionData | null {
if (firstLineBreakColumn === -1) {
return null;
Expand Down
146 changes: 73 additions & 73 deletions src/vs/editor/common/viewModel/viewModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,79 +19,6 @@ import { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewL
import { ILineBreaksComputer, InjectedText } from 'vs/editor/common/viewModel/modelLineProjectionData';
import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';

export interface IViewWhitespaceViewportData {
readonly id: string;
readonly afterLineNumber: number;
readonly verticalOffset: number;
readonly height: number;
}

export class Viewport {
readonly _viewportBrand: void = undefined;

readonly top: number;
readonly left: number;
readonly width: number;
readonly height: number;

constructor(top: number, left: number, width: number, height: number) {
this.top = top | 0;
this.left = left | 0;
this.width = width | 0;
this.height = height | 0;
}
}

export interface IViewLayout {

getScrollable(): Scrollable;

getScrollWidth(): number;
getScrollHeight(): number;

getCurrentScrollLeft(): number;
getCurrentScrollTop(): number;
getCurrentViewport(): Viewport;

getFutureViewport(): Viewport;

validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition;

getLinesViewportData(): IPartialViewLinesViewportData;
getLinesViewportDataAtScrollTop(scrollTop: number): IPartialViewLinesViewportData;
getWhitespaces(): IEditorWhitespace[];

isAfterLines(verticalOffset: number): boolean;
isInTopPadding(verticalOffset: number): boolean;
isInBottomPadding(verticalOffset: number): boolean;
getLineNumberAtVerticalOffset(verticalOffset: number): number;
getVerticalOffsetForLineNumber(lineNumber: number): number;
getWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData | null;

/**
* Get the layout information for whitespaces currently in the viewport
*/
getWhitespaceViewportData(): IViewWhitespaceViewportData[];
}

export interface ICoordinatesConverter {
// View -> Model conversion and related methods
convertViewPositionToModelPosition(viewPosition: Position): Position;
convertViewRangeToModelRange(viewRange: Range): Range;
validateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position;
validateViewRange(viewRange: Range, expectedModelRange: Range): Range;

// Model -> View conversion and related methods
convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity): Position;
/**
* @param affinity Only has an effect if the range is empty.
*/
convertModelRangeToViewRange(modelRange: Range, affinity?: PositionAffinity): Range;
modelPositionIsVisible(modelPosition: Position): boolean;
getModelLineViewLineCount(modelLineNumber: number): number;
getViewLineNumberOfModelPosition(modelLineNumber: number, modelColumn: number): number;
}

export interface IViewModel extends ICursorSimpleModel {

readonly model: ITextModel;
Expand Down Expand Up @@ -184,6 +111,79 @@ export interface IViewModel extends ICursorSimpleModel {
//#endregion
}

export interface IViewLayout {

getScrollable(): Scrollable;

getScrollWidth(): number;
getScrollHeight(): number;

getCurrentScrollLeft(): number;
getCurrentScrollTop(): number;
getCurrentViewport(): Viewport;

getFutureViewport(): Viewport;

validateScrollPosition(scrollPosition: INewScrollPosition): IScrollPosition;

getLinesViewportData(): IPartialViewLinesViewportData;
getLinesViewportDataAtScrollTop(scrollTop: number): IPartialViewLinesViewportData;
getWhitespaces(): IEditorWhitespace[];

isAfterLines(verticalOffset: number): boolean;
isInTopPadding(verticalOffset: number): boolean;
isInBottomPadding(verticalOffset: number): boolean;
getLineNumberAtVerticalOffset(verticalOffset: number): number;
getVerticalOffsetForLineNumber(lineNumber: number): number;
getWhitespaceAtVerticalOffset(verticalOffset: number): IViewWhitespaceViewportData | null;

/**
* Get the layout information for whitespaces currently in the viewport
*/
getWhitespaceViewportData(): IViewWhitespaceViewportData[];
}

export interface IViewWhitespaceViewportData {
readonly id: string;
readonly afterLineNumber: number;
readonly verticalOffset: number;
readonly height: number;
}

export class Viewport {
readonly _viewportBrand: void = undefined;

readonly top: number;
readonly left: number;
readonly width: number;
readonly height: number;

constructor(top: number, left: number, width: number, height: number) {
this.top = top | 0;
this.left = left | 0;
this.width = width | 0;
this.height = height | 0;
}
}

export interface ICoordinatesConverter {
// View -> Model conversion and related methods
convertViewPositionToModelPosition(viewPosition: Position): Position;
convertViewRangeToModelRange(viewRange: Range): Range;
validateViewPosition(viewPosition: Position, expectedModelPosition: Position): Position;
validateViewRange(viewRange: Range, expectedModelRange: Range): Range;

// Model -> View conversion and related methods
convertModelPositionToViewPosition(modelPosition: Position, affinity?: PositionAffinity): Position;
/**
* @param affinity Only has an effect if the range is empty.
*/
convertModelRangeToViewRange(modelRange: Range, affinity?: PositionAffinity): Range;
modelPositionIsVisible(modelPosition: Position): boolean;
getModelLineViewLineCount(modelLineNumber: number): number;
getViewLineNumberOfModelPosition(modelLineNumber: number, modelColumn: number): number;
}

export class MinimapLinesRenderingData {
public readonly tabSize: number;
public readonly data: Array<ViewLineData | null>;
Expand Down
20 changes: 10 additions & 10 deletions src/vs/editor/common/viewModel/viewModelEventDispatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,16 @@ export class ViewModelEventsCollector {
}
}

export type OutgoingViewModelEvent = (
ContentSizeChangedEvent
| FocusChangedEvent
| ScrollChangedEvent
| ViewZonesChangedEvent
| HiddenAreasChangedEvent
| ReadOnlyEditAttemptEvent
| CursorStateChangedEvent
);

export const enum OutgoingViewModelEventKind {
ContentSizeChanged,
FocusChanged,
Expand Down Expand Up @@ -399,13 +409,3 @@ export class ReadOnlyEditAttemptEvent {
return this;
}
}

export type OutgoingViewModelEvent = (
ContentSizeChangedEvent
| FocusChangedEvent
| ScrollChangedEvent
| ViewZonesChangedEvent
| HiddenAreasChangedEvent
| ReadOnlyEditAttemptEvent
| CursorStateChangedEvent
);

0 comments on commit 3f56153

Please sign in to comment.