@matdata/yasqe 5.20.3 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +76 -59
- package/build/prefixes.json +2190 -2136
- package/build/ts/grammar/tokenizer.d.ts +9 -3
- package/build/ts/grammar/tokenizer.js +34 -6
- package/build/ts/grammar/tokenizer.js.map +1 -1
- package/build/ts/src/autocompleters/index.d.ts +4 -2
- package/build/ts/src/autocompleters/index.js +9 -33
- package/build/ts/src/autocompleters/index.js.map +1 -1
- package/build/ts/src/autocompleters/variables.js +17 -19
- package/build/ts/src/autocompleters/variables.js.map +1 -1
- package/build/ts/src/defaults.d.ts +17 -53
- package/build/ts/src/defaults.js +2 -5
- package/build/ts/src/defaults.js.map +1 -1
- package/build/ts/src/editor/autocompletion.d.ts +32 -0
- package/build/ts/src/editor/autocompletion.js +94 -0
- package/build/ts/src/editor/autocompletion.js.map +1 -0
- package/build/ts/src/editor/doc.d.ts +32 -0
- package/build/ts/src/editor/doc.js +121 -0
- package/build/ts/src/editor/doc.js.map +1 -0
- package/build/ts/src/editor/facade.d.ts +94 -0
- package/build/ts/src/editor/facade.js +392 -0
- package/build/ts/src/editor/facade.js.map +1 -0
- package/build/ts/src/editor/folding.d.ts +16 -0
- package/build/ts/src/editor/folding.js +190 -0
- package/build/ts/src/editor/folding.js.map +1 -0
- package/build/ts/src/editor/gutters.d.ts +8 -0
- package/build/ts/src/editor/gutters.js +113 -0
- package/build/ts/src/editor/gutters.js.map +1 -0
- package/build/ts/src/editor/keymap.d.ts +11 -0
- package/build/ts/src/editor/keymap.js +88 -0
- package/build/ts/src/editor/keymap.js.map +1 -0
- package/build/ts/src/editor/language.d.ts +11 -0
- package/build/ts/src/editor/language.js +19 -0
- package/build/ts/src/editor/language.js.map +1 -0
- package/build/ts/src/editor/tokenizerRunner.d.ts +37 -0
- package/build/ts/src/editor/tokenizerRunner.js +115 -0
- package/build/ts/src/editor/tokenizerRunner.js.map +1 -0
- package/build/ts/src/index.d.ts +49 -100
- package/build/ts/src/index.js +179 -100
- package/build/ts/src/index.js.map +1 -1
- package/build/ts/src/prefixes.json +2191 -2137
- package/build/ts/src/tooltip.js +9 -6
- package/build/ts/src/tooltip.js.map +1 -1
- package/build/yasqe.min.css +1 -1
- package/build/yasqe.min.css.map +3 -3
- package/build/yasqe.min.js +76 -91
- package/build/yasqe.min.js.map +4 -4
- package/grammar/tokenizer.ts +62 -8
- package/package.json +11 -6
- package/src/autocompleters/index.ts +24 -53
- package/src/autocompleters/show-hint.scss +17 -9
- package/src/autocompleters/variables.ts +20 -24
- package/src/defaults.ts +2 -6
- package/src/editor/autocompletion.ts +147 -0
- package/src/editor/doc.ts +151 -0
- package/src/editor/facade.ts +558 -0
- package/src/editor/folding.ts +225 -0
- package/src/editor/gutters.ts +152 -0
- package/src/editor/keymap.ts +133 -0
- package/src/editor/language.ts +47 -0
- package/src/editor/tokenizerRunner.ts +198 -0
- package/src/index.ts +193 -127
- package/src/prefixes.json +2190 -2136
- package/src/scss/buttons.scss +4 -2
- package/src/scss/codemirrorMods.scss +107 -11
- package/src/scss/yasqe.scss +4 -2
- package/src/tooltip.ts +16 -13
- package/build/ts/src/CodeMirror.d.ts +0 -30
- package/build/ts/src/CodeMirror.js +0 -20
- package/build/ts/src/CodeMirror.js.map +0 -1
- package/build/ts/src/prefixFold.d.ts +0 -8
- package/build/ts/src/prefixFold.js +0 -87
- package/build/ts/src/prefixFold.js.map +0 -1
- package/src/CodeMirror.ts +0 -54
- package/src/prefixFold.ts +0 -94
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { EditorView } from "@codemirror/view";
|
|
11
|
+
import { autocompletion, completionStatus, completionKeymap, startCompletion, closeCompletion, } from "@codemirror/autocomplete";
|
|
12
|
+
import { keymap } from "@codemirror/view";
|
|
13
|
+
import { Prec } from "@codemirror/state";
|
|
14
|
+
import { posToOffset, offsetToPos } from "./doc";
|
|
15
|
+
export { posToOffset, offsetToPos };
|
|
16
|
+
function hintToCompletion(hint) {
|
|
17
|
+
return {
|
|
18
|
+
label: hint.displayText || hint.text,
|
|
19
|
+
type: hint.className,
|
|
20
|
+
apply: (view, _completion, from, to) => {
|
|
21
|
+
const doc = view.state.doc;
|
|
22
|
+
const replaceFrom = hint.from ? posToOffset(doc, hint.from) : from;
|
|
23
|
+
const replaceTo = hint.to ? posToOffset(doc, hint.to) : to;
|
|
24
|
+
const start = Math.min(replaceFrom, replaceTo);
|
|
25
|
+
const end = Math.max(replaceFrom, replaceTo);
|
|
26
|
+
view.dispatch({
|
|
27
|
+
changes: { from: start, to: end, insert: hint.text },
|
|
28
|
+
selection: { anchor: start + hint.text.length },
|
|
29
|
+
userEvent: "input.complete",
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function hintListToCompletionResult(hintList, doc) {
|
|
35
|
+
if (!hintList || !hintList.list || hintList.list.length === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const from = posToOffset(doc, hintList.from);
|
|
38
|
+
const to = posToOffset(doc, hintList.to);
|
|
39
|
+
return {
|
|
40
|
+
from: Math.min(from, to),
|
|
41
|
+
to: Math.max(from, to),
|
|
42
|
+
options: hintList.list.map(hintToCompletion),
|
|
43
|
+
filter: false,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function createCompletionSource(host) {
|
|
47
|
+
return (context) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const hintFn = host.getHintFn();
|
|
49
|
+
if (!hintFn)
|
|
50
|
+
return null;
|
|
51
|
+
const result = yield hintFn();
|
|
52
|
+
if (!result || context.aborted)
|
|
53
|
+
return null;
|
|
54
|
+
return hintListToCompletionResult(result, context.state.doc);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export function sparqlAutocompletion(host) {
|
|
58
|
+
const statusListener = EditorView.updateListener.of((update) => {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
const before = completionStatus(update.startState);
|
|
61
|
+
const after = completionStatus(update.state);
|
|
62
|
+
if (before === null && after !== null) {
|
|
63
|
+
(_a = host.onShown) === null || _a === void 0 ? void 0 : _a.call(host, update.view.dom.querySelector(".cm-tooltip-autocomplete"));
|
|
64
|
+
}
|
|
65
|
+
else if (before !== null && after === null) {
|
|
66
|
+
(_b = host.onClose) === null || _b === void 0 ? void 0 : _b.call(host);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return [
|
|
70
|
+
autocompletion({
|
|
71
|
+
override: [createCompletionSource(host)],
|
|
72
|
+
activateOnTyping: false,
|
|
73
|
+
closeOnBlur: true,
|
|
74
|
+
defaultKeymap: false,
|
|
75
|
+
icons: false,
|
|
76
|
+
maxRenderedOptions: 100000,
|
|
77
|
+
interactionDelay: 0,
|
|
78
|
+
tooltipClass: () => "CodeMirror-hints",
|
|
79
|
+
optionClass: (completion) => (completion.type ? completion.type : ""),
|
|
80
|
+
}),
|
|
81
|
+
Prec.highest(keymap.of(completionKeymap.filter((binding) => binding.key !== "Ctrl-Space"))),
|
|
82
|
+
statusListener,
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
export function isCompletionActive(state) {
|
|
86
|
+
return completionStatus(state) !== null;
|
|
87
|
+
}
|
|
88
|
+
export function openCompletion(view) {
|
|
89
|
+
return startCompletion(view);
|
|
90
|
+
}
|
|
91
|
+
export function hideCompletion(view) {
|
|
92
|
+
return closeCompletion(view);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=autocompletion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocompletion.js","sourceRoot":"","sources":["../../../../../../packages/yasqe/src/editor/autocompletion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Text } from "@codemirror/state";
|
|
2
|
+
import { EditorView } from "@codemirror/view";
|
|
3
|
+
import { Position } from "./tokenizerRunner";
|
|
4
|
+
export declare function posToOffset(doc: Text, pos: Position): number;
|
|
5
|
+
export declare function offsetToPos(doc: Text, offset: number): Position;
|
|
6
|
+
export interface Selection {
|
|
7
|
+
anchor: Position;
|
|
8
|
+
head: Position;
|
|
9
|
+
}
|
|
10
|
+
export declare class DocFacade {
|
|
11
|
+
private view;
|
|
12
|
+
constructor(view: EditorView);
|
|
13
|
+
private get doc();
|
|
14
|
+
getValue(separator?: string): string;
|
|
15
|
+
setValue(value: string): void;
|
|
16
|
+
getLine(n: number): string;
|
|
17
|
+
lineCount(): number;
|
|
18
|
+
firstLine(): number;
|
|
19
|
+
lastLine(): number;
|
|
20
|
+
indexFromPos(pos: Position): number;
|
|
21
|
+
posFromIndex(index: number): Position;
|
|
22
|
+
getCursor(start?: "from" | "to" | "head" | "anchor" | "start" | "end"): Position;
|
|
23
|
+
setCursor(pos: Position | number, ch?: number): void;
|
|
24
|
+
setSelection(anchor: Position, head?: Position): void;
|
|
25
|
+
listSelections(): Selection[];
|
|
26
|
+
somethingSelected(): boolean;
|
|
27
|
+
getSelection(lineSep?: string): string;
|
|
28
|
+
replaceSelection(text: string, collapse?: "around" | "start" | "end"): void;
|
|
29
|
+
getRange(from: Position, to: Position): string;
|
|
30
|
+
replaceRange(text: string, from: Position, to?: Position): void;
|
|
31
|
+
selectAll(): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { EditorSelection } from "@codemirror/state";
|
|
2
|
+
export function posToOffset(doc, pos) {
|
|
3
|
+
if (pos.line < 0)
|
|
4
|
+
return 0;
|
|
5
|
+
if (pos.line >= doc.lines)
|
|
6
|
+
return doc.length;
|
|
7
|
+
const line = doc.line(pos.line + 1);
|
|
8
|
+
return line.from + Math.max(0, Math.min(pos.ch, line.length));
|
|
9
|
+
}
|
|
10
|
+
export function offsetToPos(doc, offset) {
|
|
11
|
+
const clamped = Math.max(0, Math.min(offset, doc.length));
|
|
12
|
+
const line = doc.lineAt(clamped);
|
|
13
|
+
return { line: line.number - 1, ch: clamped - line.from };
|
|
14
|
+
}
|
|
15
|
+
export class DocFacade {
|
|
16
|
+
constructor(view) {
|
|
17
|
+
this.view = view;
|
|
18
|
+
}
|
|
19
|
+
get doc() {
|
|
20
|
+
return this.view.state.doc;
|
|
21
|
+
}
|
|
22
|
+
getValue(separator = "\n") {
|
|
23
|
+
return separator === "\n" ? this.doc.toString() : this.doc.toJSON().join(separator);
|
|
24
|
+
}
|
|
25
|
+
setValue(value) {
|
|
26
|
+
this.view.dispatch({
|
|
27
|
+
changes: { from: 0, to: this.doc.length, insert: value },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
getLine(n) {
|
|
31
|
+
if (n < 0 || n >= this.doc.lines)
|
|
32
|
+
return "";
|
|
33
|
+
return this.doc.line(n + 1).text;
|
|
34
|
+
}
|
|
35
|
+
lineCount() {
|
|
36
|
+
return this.doc.lines;
|
|
37
|
+
}
|
|
38
|
+
firstLine() {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
lastLine() {
|
|
42
|
+
return this.doc.lines - 1;
|
|
43
|
+
}
|
|
44
|
+
indexFromPos(pos) {
|
|
45
|
+
return posToOffset(this.doc, pos);
|
|
46
|
+
}
|
|
47
|
+
posFromIndex(index) {
|
|
48
|
+
return offsetToPos(this.doc, index);
|
|
49
|
+
}
|
|
50
|
+
getCursor(start) {
|
|
51
|
+
const range = this.view.state.selection.main;
|
|
52
|
+
let offset;
|
|
53
|
+
switch (start) {
|
|
54
|
+
case "from":
|
|
55
|
+
case "start":
|
|
56
|
+
offset = range.from;
|
|
57
|
+
break;
|
|
58
|
+
case "to":
|
|
59
|
+
case "end":
|
|
60
|
+
offset = range.to;
|
|
61
|
+
break;
|
|
62
|
+
case "anchor":
|
|
63
|
+
offset = range.anchor;
|
|
64
|
+
break;
|
|
65
|
+
case "head":
|
|
66
|
+
default:
|
|
67
|
+
offset = range.head;
|
|
68
|
+
}
|
|
69
|
+
return offsetToPos(this.doc, offset);
|
|
70
|
+
}
|
|
71
|
+
setCursor(pos, ch) {
|
|
72
|
+
const position = typeof pos === "number" ? { line: pos, ch: ch !== null && ch !== void 0 ? ch : 0 } : pos;
|
|
73
|
+
const offset = posToOffset(this.doc, position);
|
|
74
|
+
this.view.dispatch({ selection: { anchor: offset }, scrollIntoView: true });
|
|
75
|
+
}
|
|
76
|
+
setSelection(anchor, head) {
|
|
77
|
+
const a = posToOffset(this.doc, anchor);
|
|
78
|
+
const h = head ? posToOffset(this.doc, head) : a;
|
|
79
|
+
this.view.dispatch({ selection: { anchor: a, head: h }, scrollIntoView: true });
|
|
80
|
+
}
|
|
81
|
+
listSelections() {
|
|
82
|
+
return this.view.state.selection.ranges.map((r) => ({
|
|
83
|
+
anchor: offsetToPos(this.doc, r.anchor),
|
|
84
|
+
head: offsetToPos(this.doc, r.head),
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
somethingSelected() {
|
|
88
|
+
return this.view.state.selection.ranges.some((r) => !r.empty);
|
|
89
|
+
}
|
|
90
|
+
getSelection(lineSep = "\n") {
|
|
91
|
+
return this.view.state.selection.ranges
|
|
92
|
+
.filter((r) => !r.empty)
|
|
93
|
+
.map((r) => this.doc.sliceString(r.from, r.to))
|
|
94
|
+
.join(lineSep);
|
|
95
|
+
}
|
|
96
|
+
replaceSelection(text, collapse = "end") {
|
|
97
|
+
this.view.dispatch(this.view.state.changeByRange((range) => {
|
|
98
|
+
const end = range.from + text.length;
|
|
99
|
+
let sel;
|
|
100
|
+
if (collapse === "around")
|
|
101
|
+
sel = EditorSelection.range(range.from, end);
|
|
102
|
+
else if (collapse === "start")
|
|
103
|
+
sel = EditorSelection.cursor(range.from);
|
|
104
|
+
else
|
|
105
|
+
sel = EditorSelection.cursor(end);
|
|
106
|
+
return { changes: { from: range.from, to: range.to, insert: text }, range: sel };
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
getRange(from, to) {
|
|
110
|
+
return this.doc.sliceString(posToOffset(this.doc, from), posToOffset(this.doc, to));
|
|
111
|
+
}
|
|
112
|
+
replaceRange(text, from, to) {
|
|
113
|
+
const f = posToOffset(this.doc, from);
|
|
114
|
+
const t = to ? posToOffset(this.doc, to) : f;
|
|
115
|
+
this.view.dispatch({ changes: { from: Math.min(f, t), to: Math.max(f, t), insert: text } });
|
|
116
|
+
}
|
|
117
|
+
selectAll() {
|
|
118
|
+
this.view.dispatch({ selection: { anchor: 0, head: this.doc.length } });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc.js","sourceRoot":"","sources":["../../../../../../packages/yasqe/src/editor/doc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Extension } from "@codemirror/state";
|
|
2
|
+
import { EditorView } from "@codemirror/view";
|
|
3
|
+
import { GutterName } from "./gutters";
|
|
4
|
+
import { TokenizerRunner, Token, Position } from "./tokenizerRunner";
|
|
5
|
+
import { ExtraKeys } from "./keymap";
|
|
6
|
+
import { HintFn } from "./autocompletion";
|
|
7
|
+
import { DocFacade } from "./doc";
|
|
8
|
+
export interface EditorOptions {
|
|
9
|
+
mode?: string;
|
|
10
|
+
value?: string;
|
|
11
|
+
lineNumbers?: boolean;
|
|
12
|
+
lineWrapping?: boolean;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
tabSize?: number;
|
|
15
|
+
indentUnit?: number;
|
|
16
|
+
indentWithTabs?: boolean;
|
|
17
|
+
theme?: string;
|
|
18
|
+
extraKeys?: ExtraKeys<any>;
|
|
19
|
+
tabMode?: string;
|
|
20
|
+
foldGutter?: boolean | object;
|
|
21
|
+
gutters?: string[];
|
|
22
|
+
matchBrackets?: boolean;
|
|
23
|
+
highlightSelectionMatches?: boolean | object;
|
|
24
|
+
autoCloseBrackets?: boolean;
|
|
25
|
+
fixedGutter?: boolean;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
autofocus?: boolean;
|
|
28
|
+
viewportMargin?: number;
|
|
29
|
+
}
|
|
30
|
+
export type EventHandler = (...args: any[]) => void;
|
|
31
|
+
export interface CursorCoords {
|
|
32
|
+
left: number;
|
|
33
|
+
top: number;
|
|
34
|
+
bottom: number;
|
|
35
|
+
}
|
|
36
|
+
export declare abstract class EditorFacade {
|
|
37
|
+
readonly view: EditorView;
|
|
38
|
+
readonly runner: TokenizerRunner;
|
|
39
|
+
protected readonly editorOptions: EditorOptions;
|
|
40
|
+
private readonly doc;
|
|
41
|
+
private readonly eventHandlers;
|
|
42
|
+
private readonly customOptions;
|
|
43
|
+
private readonly compartments;
|
|
44
|
+
constructor(parent: HTMLElement, options: EditorOptions);
|
|
45
|
+
protected abstract getHintFn(): HintFn | undefined;
|
|
46
|
+
private handleUpdate;
|
|
47
|
+
on(eventName: string, handler: EventHandler): void;
|
|
48
|
+
off(eventName: string, handler: EventHandler): void;
|
|
49
|
+
emit(eventName: string, ...data: any[]): void;
|
|
50
|
+
getDoc(): DocFacade;
|
|
51
|
+
getValue(): string;
|
|
52
|
+
setValue(value: string): void;
|
|
53
|
+
getLine(line: number): string;
|
|
54
|
+
lineCount(): number;
|
|
55
|
+
lastLine(): number;
|
|
56
|
+
getCursor(start?: "from" | "to" | "head" | "anchor" | "start" | "end"): Position;
|
|
57
|
+
setCursor(pos: Position | number, ch?: number): void;
|
|
58
|
+
setSelection(anchor: Position, head?: Position): void;
|
|
59
|
+
somethingSelected(): boolean;
|
|
60
|
+
getSelection(): string;
|
|
61
|
+
replaceSelection(text: string, collapse?: "around" | "start" | "end"): void;
|
|
62
|
+
getRange(from: Position, to: Position): string;
|
|
63
|
+
replaceRange(text: string, from: Position, to?: Position): void;
|
|
64
|
+
indexFromPos(pos: Position): number;
|
|
65
|
+
posFromIndex(index: number): Position;
|
|
66
|
+
operation<T>(fn: () => T): T;
|
|
67
|
+
getTokenAt(pos: Position, precise?: boolean): Token;
|
|
68
|
+
getTokenTypeAt(pos: Position): string | null;
|
|
69
|
+
getOption(name: string): any;
|
|
70
|
+
setOption(name: string, value: any): void;
|
|
71
|
+
private setTheme;
|
|
72
|
+
setGutterMarker(line: number, gutterName: GutterName, element: HTMLElement | null): void;
|
|
73
|
+
clearGutter(gutterName: GutterName): void;
|
|
74
|
+
setSyntaxErrorHighlight(from: Position, to: Position): void;
|
|
75
|
+
clearSyntaxErrorHighlight(): void;
|
|
76
|
+
execCommand(command: string): void;
|
|
77
|
+
indentLine(lineNumber: number): void;
|
|
78
|
+
foldCode(line: number | Position): void;
|
|
79
|
+
toggleFold(line: number | Position): void;
|
|
80
|
+
getWrapperElement(): HTMLElement;
|
|
81
|
+
getInputField(): HTMLElement;
|
|
82
|
+
getScrollerElement(): HTMLElement;
|
|
83
|
+
focus(): void;
|
|
84
|
+
hasFocus(): boolean;
|
|
85
|
+
refresh(): void;
|
|
86
|
+
setSize(width: number | string | null, height: number | string | null): void;
|
|
87
|
+
cursorCoords(where?: Position | boolean): CursorCoords;
|
|
88
|
+
coordsChar(coords: {
|
|
89
|
+
left: number;
|
|
90
|
+
top: number;
|
|
91
|
+
}): Position;
|
|
92
|
+
addExtension(extension: Extension): void;
|
|
93
|
+
destroyEditor(): void;
|
|
94
|
+
}
|