import { OrNull, TokenNode } from '@unisnips/core'; import { TextPosition } from '../util/position'; import { Token, TabStopToken } from '../parse/tokenizer'; export declare type MarkerClass = new (opts: MarkerInitOpts) => Marker; declare type MarkerInitOpts = { parent: Marker; token?: T; start?: TextPosition; end?: TextPosition; tieBreaker?: TextPosition; initialText?: string; }; /** * Represents any object in the text that has a span in any ways. */ export declare class Marker { start: TextPosition; end: TextPosition; initialText: string; tabStops: { [key: number]: TabStop; }; parent: OrNull; token: OrNull; /** * useful in nested tabstops, * e.g. '${11:good}', innerContentOffset should be '${12:'.length */ innerContentOffset: number; protected children: Marker[]; protected tieBreaker: TextPosition; constructor(opts: MarkerInitOpts); addChild(child: Marker): void; /** * will be serialized to TokenNode */ get markerType(): string; getTokenNodeData(): {}; toTokenNode(): TokenNode; /** @abstract */ protected init(opts: MarkerInitOpts): void; } /** * This base class represents any object in the text that can be changed by * the user. */ declare class EditableMarker extends Marker { get editableChildren(): Marker[]; } declare class NoneditableMarker extends Marker { } export declare class Transform extends Marker { protected regex: RegExp; protected replace: any; protected search: string; protected options: string; get markerType(): string; getTokenNodeData(): Pick; initTransformation(opts: { search: string; options: string; replace: string; }): void; protected transformText(text: string): string; } export declare class TransformableMarker extends EditableMarker { transform?: Transform; search: string; replace: string; options: any; getTokenNodeData(): any; protected parseTransform(text: string): void; } export declare class TabStop extends TransformableMarker { number: number; get markerType(): string; init(opts: MarkerInitOpts): void; } export declare class SnippetInstance extends EditableMarker { visualContent: string; get markerType(): string; init(opts: MarkerInitOpts): void; } export declare class Mirror extends Marker { protected tabStop: TabStop; get markerType(): string; init(opts: MarkerInitOpts): void; } export declare class UniSnipsVariable extends NoneditableMarker { get name(): string; } /** * A ${VISUAL} placeholder that will use the text that was last visually * selected and insert it here. * * If there was no text visually selected, this will be the empty string. */ export declare class Visual extends TransformableMarker { text: string; /** QUESTION: may be related to vim's mode? */ mode: string; init(opts: MarkerInitOpts): void; get markerType(): string; } export declare class ScriptCode extends NoneditableMarker { get code(): string; get scriptType(): string; get markerType(): string; } export {};