Update
This commit is contained in:
parent
2b887a6369
commit
319d1df24e
|
@ -74,9 +74,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "14.14.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.2.tgz",
|
||||
"integrity": "sha512-jeYJU2kl7hL9U5xuI/BhKPZ4vqGM/OmK6whiFAXVhlstzZhVamWhDSmHyGLIp+RVyuF9/d0dqr2P85aFj4BvJg==",
|
||||
"version": "14.14.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.3.tgz",
|
||||
"integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/vscode": {
|
||||
|
|
10
package.json
10
package.json
|
@ -15,7 +15,7 @@
|
|||
},
|
||||
"icon": "assets/texinfo.png",
|
||||
"devDependencies": {
|
||||
"@types/node": "^14.14.2",
|
||||
"@types/node": "^14.14.3",
|
||||
"@types/vscode": "^1.50.0",
|
||||
"@typescript-eslint/eslint-plugin": "^3.8.0",
|
||||
"@typescript-eslint/parser": "^3.8.0",
|
||||
|
@ -75,7 +75,7 @@
|
|||
"contributes": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "texinfo.showPreview",
|
||||
"command": "texinfo.preview.show",
|
||||
"title": "Show preview",
|
||||
"icon": "$(open-preview)"
|
||||
}
|
||||
|
@ -83,14 +83,14 @@
|
|||
"menus": {
|
||||
"commandPalette": [
|
||||
{
|
||||
"command": "texinfo.showPreview",
|
||||
"command": "texinfo.preview.show",
|
||||
"when": "editorLangId == texinfo",
|
||||
"group": "navigation"
|
||||
}
|
||||
],
|
||||
"editor/title": [
|
||||
{
|
||||
"command": "texinfo.showPreview",
|
||||
"command": "texinfo.preview.show",
|
||||
"when": "editorLangId == texinfo",
|
||||
"group": "navigation"
|
||||
}
|
||||
|
@ -98,7 +98,7 @@
|
|||
},
|
||||
"keybindings": [
|
||||
{
|
||||
"command": "texinfo.showPreview",
|
||||
"command": "texinfo.preview.show",
|
||||
"key": "ctrl+k v",
|
||||
"mac": "cmd+k v",
|
||||
"when": "editorLangId == texinfo"
|
||||
|
|
|
@ -19,14 +19,11 @@ export default class DocumentSymbolContext {
|
|||
|
||||
private documentSymbols?: vscode.DocumentSymbol[];
|
||||
|
||||
private foldingRanges?: readonly FoldingRange[];
|
||||
|
||||
get values() {
|
||||
return this.documentSymbols ??= this.calculcateDocumentSymbols();
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.foldingRanges = undefined;
|
||||
this.documentSymbols = undefined;
|
||||
}
|
||||
|
||||
|
@ -37,9 +34,8 @@ export default class DocumentSymbolContext {
|
|||
*/
|
||||
private calculcateDocumentSymbols() {
|
||||
const ranges = Array<RangeNode>(this.document.lineCount);
|
||||
(this.foldingRanges ??= this.documentContext.foldingRange.values)
|
||||
.forEach(range => range.kind ?? (ranges[range.start] = range));
|
||||
return this.documentSymbols = foldingRangeToSymbols(ranges, 0, ranges.length);
|
||||
this.documentContext.foldingRange.values.forEach(range => range.kind ?? (ranges[range.start] = range));
|
||||
return foldingRangeToSymbols(ranges, 0, ranges.length);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { FoldingRange, Range } from '../utils/types';
|
||||
import { FoldingRange, Range, NamedLine } from '../utils/types';
|
||||
|
||||
/**
|
||||
* Stores information about folding ranges for a document.
|
||||
|
@ -23,7 +23,7 @@ export default class FoldingRangeContext {
|
|||
* Get VSCode folding ranges from the context.
|
||||
*/
|
||||
get values() {
|
||||
return this.foldingRanges ??= this.calculateFoldingRanges();
|
||||
return this.foldingRanges ?? this.calculateFoldingRanges();
|
||||
}
|
||||
|
||||
private foldingRanges?: FoldingRange[];
|
||||
|
@ -65,7 +65,7 @@ export default class FoldingRangeContext {
|
|||
private calculateFoldingRanges() {
|
||||
this.foldingRanges = [];
|
||||
this.clearTemporaries();
|
||||
let closingBlocks = <ClosingBlock[]>[];
|
||||
let closingBlocks = <NamedLine[]>[];
|
||||
let lastLine = this.document.lineCount - 1;
|
||||
let verbatim = false;
|
||||
for (let idx = lastLine; idx >= 0; --idx) {
|
||||
|
@ -172,7 +172,7 @@ export default class FoldingRangeContext {
|
|||
kind?: vscode.FoldingRangeKind
|
||||
}) {
|
||||
(this.foldingRanges ??= [])
|
||||
.push(new FoldingRange(extraArgs.name ?? '', extraArgs.detail ?? '', start, end, extraArgs.kind));
|
||||
.push({ name: extraArgs.name ?? '', detail: extraArgs.detail ?? '', start, end, kind: extraArgs.kind });
|
||||
}
|
||||
|
||||
private clearTemporaries() {
|
||||
|
@ -181,5 +181,3 @@ export default class FoldingRangeContext {
|
|||
this.closingSubsection = this.closingSection = this.closingChapter = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
type ClosingBlock = { name: string, line: number };
|
||||
|
|
|
@ -22,7 +22,7 @@ export function activate(context: vscode.ExtensionContext) {
|
|||
vscode.workspace.onDidSaveTextDocument(ContextMapping.onDocumentSave),
|
||||
vscode.workspace.onDidCloseTextDocument(ContextMapping.onDocumentClose),
|
||||
vscode.workspace.onDidChangeConfiguration(Options.clear),
|
||||
vscode.commands.registerTextEditorCommand('texinfo.showPreview', PreviewContext.showPreview),
|
||||
vscode.commands.registerTextEditorCommand('texinfo.preview.show', PreviewContext.showPreview),
|
||||
vscode.languages.registerCompletionItemProvider('texinfo', new CompletionItemProvider(), '@'),
|
||||
vscode.languages.registerDocumentSymbolProvider('texinfo', new DocumentSymbolProvider()),
|
||||
vscode.languages.registerFoldingRangeProvider('texinfo', new FoldingRangeProvider()),
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
import * as htmlparser from 'node-html-parser';
|
||||
import { Operator } from './types';
|
||||
|
||||
/**
|
||||
* DOM manipulation utilities.
|
||||
|
@ -33,7 +34,7 @@ export default class DOM {
|
|||
*
|
||||
* @param transformer
|
||||
*/
|
||||
transformImageUri(transformer: (src: string) => string) {
|
||||
transformImageUri(transformer: Operator<string>) {
|
||||
const elements = this.value.querySelectorAll('img');
|
||||
if (elements.length === 0) return;
|
||||
elements.forEach(element => {
|
||||
|
|
|
@ -13,24 +13,12 @@ export type Operator<T> = (arg: T) => T;
|
|||
|
||||
export type Range = { start: number, end: number };
|
||||
|
||||
export type NamedLine = { name: string, line: number };
|
||||
|
||||
export type ExecResult = { data?: string, error: string };
|
||||
|
||||
export type FoldingRange = vscode.FoldingRange & { name: string, detail: string };
|
||||
|
||||
export function isDefined<T>(value: Optional<T>): value is T {
|
||||
return value !== undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* VSCode folding range with name and description.
|
||||
*/
|
||||
export class FoldingRange extends vscode.FoldingRange {
|
||||
|
||||
constructor(
|
||||
readonly name: string,
|
||||
readonly detail: string,
|
||||
start: number,
|
||||
end: number,
|
||||
kind?: vscode.FoldingRangeKind,
|
||||
) {
|
||||
super(start, end, kind);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue