Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: modify BracketReplacer to display bracket sizes using MathJax r…
Browse files Browse the repository at this point in the history
…endering.
tamuratak committed Jan 29, 2025
1 parent ced0596 commit 6785d43
Showing 4 changed files with 18 additions and 6 deletions.
4 changes: 2 additions & 2 deletions src/components/mathpreview.ts
Original file line number Diff line number Diff line change
@@ -58,8 +58,8 @@ export class MathPreview {
const typesetOpts = { scale, color: this.color }
try {
const xml = await this.mj.typeset(typesetArg, typesetOpts)
const md = utils.svgToDataUrl(xml)
return new vscode.Hover(new vscode.MarkdownString(this.mputils.addDummyCodeBlock(`![equation](${md})`)), tex.range )
const dataUrl = utils.svgToDataUrl(xml)
return new vscode.Hover(new vscode.MarkdownString(this.mputils.addDummyCodeBlock(`![equation](${dataUrl})`)), tex.range )
} catch(e) {
this.extension.logger.error(`Error while MathJax is rendering: ${typesetArg}`)
this.extension.logger.logError(e)
5 changes: 3 additions & 2 deletions src/providers/completion.ts
Original file line number Diff line number Diff line change
@@ -75,7 +75,7 @@ export class Completer implements vscode.CompletionItemProvider {
this.import = new Import(extension)
this.subImport = new SubImport(extension)
this.glossary = new Glossary(extension)
this.bracketReplacer = new BracketReplacer()
this.bracketReplacer = new BracketReplacer(extension)
this.commandAdder = new CommandAdder(this.command)
this.commandRemover = new CommandRemover()
this.commandReplacer = new CommandReplacer()
@@ -160,7 +160,8 @@ export class Completer implements vscode.CompletionItemProvider {
ast = await this.extension.latexAstManager.getDocAst(document)
}
for (const provider of providers) {
items = [...items, ...provider.provide(document, position, context, ast)]
const providedItems = await provider.provide(document, position, context, ast)
items = [...items, ...providedItems]
}
return items
}
13 changes: 12 additions & 1 deletion src/providers/completionlib/bracketreplacer.ts
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ import { IContexAwareProvider } from './interface.js'
import { reverseCaseOfFirstCharacterAndConvertToHex } from './utils/sortkey.js'
import { getPrevChar } from './utils/position.js'
import { ContextAwareKind } from './completionkind.js'
import type { MathPreview } from '../../components/mathpreview.js'


export class BracketReplacer implements IContexAwareProvider {
@@ -80,6 +81,10 @@ export class BracketReplacer implements IContexAwareProvider {
]
)

constructor(private readonly extension: {
readonly mathPreview: MathPreview
}) { }

test(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): boolean {
if (context.triggerKind === vscode.CompletionTriggerKind.TriggerCharacter) {
return false
@@ -95,7 +100,7 @@ export class BracketReplacer implements IContexAwareProvider {
return false
}

provide(document: vscode.TextDocument, position: vscode.Position, _context: vscode.CompletionContext, ast: latexParser.LatexAst | undefined) {
async provide(document: vscode.TextDocument, position: vscode.Position, _context: vscode.CompletionContext, ast: latexParser.LatexAst | undefined) {
if (!ast) {
return []
}
@@ -132,6 +137,11 @@ export class BracketReplacer implements IContexAwareProvider {
return []
}
const suggestions: vscode.CompletionItem[] = []
const svg = await this.extension.mathPreview.generateSVG({
texString: '\\begin{align*}\\bigl(\\sum x_i \\bigl)\\end{align*}',
envname: 'align*'
}, '')
const md = new vscode.MarkdownString(`![equation](${svg.svgDataUrl})`)
for (const [sortkey, pairs] of this.bracketPairs) {
for (const [left, right] of pairs) {
const sortText = sortkey + reverseCaseOfFirstCharacterAndConvertToHex(left)
@@ -142,6 +152,7 @@ export class BracketReplacer implements IContexAwareProvider {
item.sortText = sortText
item.filterText = document.getText(leftBracketRange)
item.additionalTextEdits = [ledit, redit]
item.documentation = md
suggestions.push(item)
}
}
2 changes: 1 addition & 1 deletion src/providers/completionlib/interface.ts
Original file line number Diff line number Diff line change
@@ -25,5 +25,5 @@ export interface ICommand {
export interface IContexAwareProvider {
readonly needsAst: boolean,
test(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext): boolean,
provide(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext, ast: latexParser.LatexAst | undefined): vscode.CompletionItem[]
provide(document: vscode.TextDocument, position: vscode.Position, context: vscode.CompletionContext, ast: latexParser.LatexAst | undefined): vscode.CompletionItem[] | Thenable<vscode.CompletionItem[]>
}

0 comments on commit 6785d43

Please sign in to comment.