You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
375 lines
12 KiB
375 lines
12 KiB
import * as _codemirror_state from '@codemirror/state'; |
|
import { Text, Extension, StateCommand, EditorState, SelectionRange, StateEffect } from '@codemirror/state'; |
|
import { Command, KeyBinding, EditorView, Panel } from '@codemirror/view'; |
|
|
|
/** |
|
A search cursor provides an iterator over text matches in a |
|
document. |
|
*/ |
|
declare class SearchCursor implements Iterator<{ |
|
from: number; |
|
to: number; |
|
}> { |
|
private test?; |
|
private iter; |
|
/** |
|
The current match (only holds a meaningful value after |
|
[`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when |
|
`done` is false). |
|
*/ |
|
value: { |
|
from: number; |
|
to: number; |
|
}; |
|
/** |
|
Whether the end of the iterated region has been reached. |
|
*/ |
|
done: boolean; |
|
private matches; |
|
private buffer; |
|
private bufferPos; |
|
private bufferStart; |
|
private normalize; |
|
private query; |
|
/** |
|
Create a text cursor. The query is the search string, `from` to |
|
`to` provides the region to search. |
|
|
|
When `normalize` is given, it will be called, on both the query |
|
string and the content it is matched against, before comparing. |
|
You can, for example, create a case-insensitive search by |
|
passing `s => s.toLowerCase()`. |
|
|
|
Text is always normalized with |
|
[`.normalize("NFKD")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize) |
|
(when supported). |
|
*/ |
|
constructor(text: Text, query: string, from?: number, to?: number, normalize?: (string: string) => string, test?: ((from: number, to: number, buffer: string, bufferPos: number) => boolean) | undefined); |
|
private peek; |
|
/** |
|
Look for the next match. Updates the iterator's |
|
[`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and |
|
[`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called |
|
at least once before using the cursor. |
|
*/ |
|
next(): this; |
|
/** |
|
The `next` method will ignore matches that partially overlap a |
|
previous match. This method behaves like `next`, but includes |
|
such matches. |
|
*/ |
|
nextOverlapping(): this; |
|
private match; |
|
[Symbol.iterator]: () => Iterator<{ |
|
from: number; |
|
to: number; |
|
}>; |
|
} |
|
|
|
interface RegExpCursorOptions { |
|
ignoreCase?: boolean; |
|
test?: (from: number, to: number, match: RegExpExecArray) => boolean; |
|
} |
|
/** |
|
This class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor) |
|
but searches for a regular expression pattern instead of a plain |
|
string. |
|
*/ |
|
declare class RegExpCursor implements Iterator<{ |
|
from: number; |
|
to: number; |
|
match: RegExpExecArray; |
|
}> { |
|
private text; |
|
private to; |
|
private iter; |
|
private re; |
|
private test?; |
|
private curLine; |
|
private curLineStart; |
|
private matchPos; |
|
/** |
|
Set to `true` when the cursor has reached the end of the search |
|
range. |
|
*/ |
|
done: boolean; |
|
/** |
|
Will contain an object with the extent of the match and the |
|
match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next) |
|
sucessfully finds a match. |
|
*/ |
|
value: { |
|
from: number; |
|
to: number; |
|
match: RegExpExecArray; |
|
}; |
|
/** |
|
Create a cursor that will search the given range in the given |
|
document. `query` should be the raw pattern (as you'd pass it to |
|
`new RegExp`). |
|
*/ |
|
constructor(text: Text, query: string, options?: RegExpCursorOptions, from?: number, to?: number); |
|
private getLine; |
|
private nextLine; |
|
/** |
|
Move to the next match, if there is one. |
|
*/ |
|
next(): this; |
|
[Symbol.iterator]: () => Iterator<{ |
|
from: number; |
|
to: number; |
|
match: RegExpExecArray; |
|
}>; |
|
} |
|
|
|
/** |
|
Command that shows a dialog asking the user for a line number, and |
|
when a valid position is provided, moves the cursor to that line. |
|
|
|
Supports line numbers, relative line offsets prefixed with `+` or |
|
`-`, document percentages suffixed with `%`, and an optional |
|
column position by adding `:` and a second number after the line |
|
number. |
|
*/ |
|
declare const gotoLine: Command; |
|
|
|
type HighlightOptions = { |
|
/** |
|
Determines whether, when nothing is selected, the word around |
|
the cursor is matched instead. Defaults to false. |
|
*/ |
|
highlightWordAroundCursor?: boolean; |
|
/** |
|
The minimum length of the selection before it is highlighted. |
|
Defaults to 1 (always highlight non-cursor selections). |
|
*/ |
|
minSelectionLength?: number; |
|
/** |
|
The amount of matches (in the viewport) at which to disable |
|
highlighting. Defaults to 100. |
|
*/ |
|
maxMatches?: number; |
|
/** |
|
Whether to only highlight whole words. |
|
*/ |
|
wholeWords?: boolean; |
|
}; |
|
/** |
|
This extension highlights text that matches the selection. It uses |
|
the `"cm-selectionMatch"` class for the highlighting. When |
|
`highlightWordAroundCursor` is enabled, the word at the cursor |
|
itself will be highlighted with `"cm-selectionMatch-main"`. |
|
*/ |
|
declare function highlightSelectionMatches(options?: HighlightOptions): Extension; |
|
/** |
|
Select next occurrence of the current selection. Expand selection |
|
to the surrounding word when the selection is empty. |
|
*/ |
|
declare const selectNextOccurrence: StateCommand; |
|
|
|
interface SearchConfig { |
|
/** |
|
Whether to position the search panel at the top of the editor |
|
(the default is at the bottom). |
|
*/ |
|
top?: boolean; |
|
/** |
|
Whether to enable case sensitivity by default when the search |
|
panel is activated (defaults to false). |
|
*/ |
|
caseSensitive?: boolean; |
|
/** |
|
Whether to treat string searches literally by default (defaults to false). |
|
*/ |
|
literal?: boolean; |
|
/** |
|
Controls whether the default query has by-word matching enabled. |
|
Defaults to false. |
|
*/ |
|
wholeWord?: boolean; |
|
/** |
|
Used to turn on regular expression search in the default query. |
|
Defaults to false. |
|
*/ |
|
regexp?: boolean; |
|
/** |
|
Can be used to override the way the search panel is implemented. |
|
Should create a [Panel](https://codemirror.net/6/docs/ref/#view.Panel) that contains a form |
|
which lets the user: |
|
|
|
- See the [current](https://codemirror.net/6/docs/ref/#search.getSearchQuery) search query. |
|
- Manipulate the [query](https://codemirror.net/6/docs/ref/#search.SearchQuery) and |
|
[update](https://codemirror.net/6/docs/ref/#search.setSearchQuery) the search state with a new |
|
query. |
|
- Notice external changes to the query by reacting to the |
|
appropriate [state effect](https://codemirror.net/6/docs/ref/#search.setSearchQuery). |
|
- Run some of the search commands. |
|
|
|
The field that should be focused when opening the panel must be |
|
tagged with a `main-field=true` DOM attribute. |
|
*/ |
|
createPanel?: (view: EditorView) => Panel; |
|
/** |
|
By default, matches are scrolled into view using the default |
|
behavior of |
|
[`EditorView.scrollIntoView`](https://codemirror.net/6/docs/ref/#view.EditorView^scrollIntoView). |
|
This option allows you to pass a custom function to produce the |
|
scroll effect. |
|
*/ |
|
scrollToMatch?: (range: SelectionRange, view: EditorView) => StateEffect<unknown>; |
|
} |
|
/** |
|
Add search state to the editor configuration, and optionally |
|
configure the search extension. |
|
([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically |
|
enable this if it isn't already on). |
|
*/ |
|
declare function search(config?: SearchConfig): Extension; |
|
/** |
|
A search query. Part of the editor's search state. |
|
*/ |
|
declare class SearchQuery { |
|
/** |
|
The search string (or regular expression). |
|
*/ |
|
readonly search: string; |
|
/** |
|
Indicates whether the search is case-sensitive. |
|
*/ |
|
readonly caseSensitive: boolean; |
|
/** |
|
By default, string search will replace `\n`, `\r`, and `\t` in |
|
the query with newline, return, and tab characters. When this |
|
is set to true, that behavior is disabled. |
|
*/ |
|
readonly literal: boolean; |
|
/** |
|
When true, the search string is interpreted as a regular |
|
expression. |
|
*/ |
|
readonly regexp: boolean; |
|
/** |
|
The replace text, or the empty string if no replace text has |
|
been given. |
|
*/ |
|
readonly replace: string; |
|
/** |
|
Whether this query is non-empty and, in case of a regular |
|
expression search, syntactically valid. |
|
*/ |
|
readonly valid: boolean; |
|
/** |
|
When true, matches that contain words are ignored when there are |
|
further word characters around them. |
|
*/ |
|
readonly wholeWord: boolean; |
|
/** |
|
Create a query object. |
|
*/ |
|
constructor(config: { |
|
/** |
|
The search string. |
|
*/ |
|
search: string; |
|
/** |
|
Controls whether the search should be case-sensitive. |
|
*/ |
|
caseSensitive?: boolean; |
|
/** |
|
By default, string search will replace `\n`, `\r`, and `\t` in |
|
the query with newline, return, and tab characters. When this |
|
is set to true, that behavior is disabled. |
|
*/ |
|
literal?: boolean; |
|
/** |
|
When true, interpret the search string as a regular expression. |
|
*/ |
|
regexp?: boolean; |
|
/** |
|
The replace text. |
|
*/ |
|
replace?: string; |
|
/** |
|
Enable whole-word matching. |
|
*/ |
|
wholeWord?: boolean; |
|
}); |
|
/** |
|
Compare this query to another query. |
|
*/ |
|
eq(other: SearchQuery): boolean; |
|
/** |
|
Get a search cursor for this query, searching through the given |
|
range in the given state. |
|
*/ |
|
getCursor(state: EditorState | Text, from?: number, to?: number): Iterator<{ |
|
from: number; |
|
to: number; |
|
}>; |
|
} |
|
/** |
|
A state effect that updates the current search query. Note that |
|
this only has an effect if the search state has been initialized |
|
(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or |
|
by running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least |
|
once). |
|
*/ |
|
declare const setSearchQuery: _codemirror_state.StateEffectType<SearchQuery>; |
|
/** |
|
Get the current search query from an editor state. |
|
*/ |
|
declare function getSearchQuery(state: EditorState): SearchQuery; |
|
/** |
|
Query whether the search panel is open in the given editor state. |
|
*/ |
|
declare function searchPanelOpen(state: EditorState): boolean; |
|
/** |
|
Open the search panel if it isn't already open, and move the |
|
selection to the first match after the current main selection. |
|
Will wrap around to the start of the document when it reaches the |
|
end. |
|
*/ |
|
declare const findNext: Command; |
|
/** |
|
Move the selection to the previous instance of the search query, |
|
before the current main selection. Will wrap past the start |
|
of the document to start searching at the end again. |
|
*/ |
|
declare const findPrevious: Command; |
|
/** |
|
Select all instances of the search query. |
|
*/ |
|
declare const selectMatches: Command; |
|
/** |
|
Select all instances of the currently selected text. |
|
*/ |
|
declare const selectSelectionMatches: StateCommand; |
|
/** |
|
Replace the current match of the search query. |
|
*/ |
|
declare const replaceNext: Command; |
|
/** |
|
Replace all instances of the search query with the given |
|
replacement. |
|
*/ |
|
declare const replaceAll: Command; |
|
/** |
|
Make sure the search panel is open and focused. |
|
*/ |
|
declare const openSearchPanel: Command; |
|
/** |
|
Close the search panel. |
|
*/ |
|
declare const closeSearchPanel: Command; |
|
/** |
|
Default search-related key bindings. |
|
|
|
- Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) |
|
- F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext) |
|
- Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious) |
|
- Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine) |
|
- Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence) |
|
*/ |
|
declare const searchKeymap: readonly KeyBinding[]; |
|
|
|
export { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };
|
|
|