This commit is contained in:
CismonX 2020-10-27 01:28:11 +08:00
parent 2b887a6369
commit 319d1df24e
Signed by: cismonx
GPG Key ID: 3094873E29A482FB
7 changed files with 21 additions and 38 deletions

6
package-lock.json generated
View File

@ -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": {

View File

@ -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"

View File

@ -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);
}
}

View File

@ -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 };

View File

@ -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()),

View File

@ -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 => {

View File

@ -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);
}
}