mirror of
https://github.com/James-Yu/LaTeX-Workshop.git
synced 2024-10-04 15:17:59 +03:00
refactorin
This commit is contained in:
parent
dae843e086
commit
6bb3e3f3c0
@ -16,7 +16,7 @@ export class HoverProvider implements vscode.HoverProvider {
|
|||||||
const configuration = vscode.workspace.getConfiguration('latex-workshop')
|
const configuration = vscode.workspace.getConfiguration('latex-workshop')
|
||||||
const hov = configuration.get('hoverPreview.enabled') as boolean
|
const hov = configuration.get('hoverPreview.enabled') as boolean
|
||||||
if (hov && this.extension.panel) {
|
if (hov && this.extension.panel) {
|
||||||
const tr = this.getHoverTex(document, position)
|
const tr = this.findHoverOnTex(document, position)
|
||||||
if (tr) {
|
if (tr) {
|
||||||
const scale = configuration.get('hoverPreview.scale') as number
|
const scale = configuration.get('hoverPreview.scale') as number
|
||||||
const [tex, range] = tr
|
const [tex, range] = tr
|
||||||
@ -89,29 +89,29 @@ export class HoverProvider implements vscode.HoverProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private mathjaxify(tex: string, envname: string) : string {
|
private mathjaxify(tex: string, envname: string) : string {
|
||||||
let ret = tex.replace(/^\s*%.*\r?\n/mg, '')
|
let s = tex.replace(/^\s*%.*\r?\n/mg, '')
|
||||||
ret = ret.replace(/^((?:\\.|[^%])*).*$/mg, '$1')
|
s = s.replace(/^((?:\\.|[^%])*).*$/mg, '$1')
|
||||||
ret = ret.replace(/\\label\{.*?\}/g, '')
|
s = s.replace(/\\label\{.*?\}/g, '')
|
||||||
if (envname.match(/^(aligned|alignedat|array|Bmatrix|bmatrix|cases|CD|gathered|matrix|pmatrix|smallmatrix|split|subarray|Vmatrix|vmatrix)$/)) {
|
if (envname.match(/^(aligned|alignedat|array|Bmatrix|bmatrix|cases|CD|gathered|matrix|pmatrix|smallmatrix|split|subarray|Vmatrix|vmatrix)$/)) {
|
||||||
ret = '\\begin{equation}' + ret + '\\end{equation}'
|
s = '\\begin{equation}' + s + '\\end{equation}'
|
||||||
}
|
}
|
||||||
return ret
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
private getHoverTex(document: vscode.TextDocument, position: vscode.Position) : [string, vscode.Range] | undefined {
|
private findHoverOnTex(document: vscode.TextDocument, position: vscode.Position) : [string, vscode.Range] | undefined {
|
||||||
const envBeginPat = /\\begin\{(align|align\*|alignat|alignat\*|aligned|alignedat|array|Bmatrix|bmatrix|cases|CD|eqnarray|eqnarray\*|equation|equation\*|gather|gather\*|gathered|matrix|multline|multline\*|pmatrix|smallmatrix|split|subarray|Vmatrix|vmatrix)\}/
|
const envBeginPat = /\\begin\{(align|align\*|alignat|alignat\*|aligned|alignedat|array|Bmatrix|bmatrix|cases|CD|eqnarray|eqnarray\*|equation|equation\*|gather|gather\*|gathered|matrix|multline|multline\*|pmatrix|smallmatrix|split|subarray|Vmatrix|vmatrix)\}/
|
||||||
let r = document.getWordRangeAtPosition(position, envBeginPat)
|
let r = document.getWordRangeAtPosition(position, envBeginPat)
|
||||||
if (r) {
|
if (r) {
|
||||||
const envname = this.getFirstRmemberedSubstring(document.getText(r), envBeginPat)
|
const envname = this.getFirstRmemberedSubstring(document.getText(r), envBeginPat)
|
||||||
return this.getHoverEnv(document, envname, r.start)
|
return this.findHoverOnEnv(document, envname, r.start)
|
||||||
}
|
}
|
||||||
const parenBeginPat = /(\\\[|\\\()/
|
const parenBeginPat = /(\\\[|\\\()/
|
||||||
r = document.getWordRangeAtPosition(position, parenBeginPat)
|
r = document.getWordRangeAtPosition(position, parenBeginPat)
|
||||||
if (r) {
|
if (r) {
|
||||||
const paren = this.getFirstRmemberedSubstring(document.getText(r), parenBeginPat)
|
const paren = this.getFirstRmemberedSubstring(document.getText(r), parenBeginPat)
|
||||||
return this.getHoverParen(document, paren, r.start)
|
return this.findHoverOnParen(document, paren, r.start)
|
||||||
}
|
}
|
||||||
return this.getHoverInline(document, position)
|
return this.findHoverOnInline(document, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
private getFirstRmemberedSubstring(s: string, pat: RegExp) : string {
|
private getFirstRmemberedSubstring(s: string, pat: RegExp) : string {
|
||||||
@ -147,7 +147,7 @@ export class HoverProvider implements vscode.HoverProvider {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
private getHoverEnv(document: vscode.TextDocument, envname: string, startPos: vscode.Position) : [string, vscode.Range] | undefined {
|
private findHoverOnEnv(document: vscode.TextDocument, envname: string, startPos: vscode.Position) : [string, vscode.Range] | undefined {
|
||||||
const pattern = new RegExp('\\\\end\\{' + envpair.escapeRegExp(envname) + '\\}')
|
const pattern = new RegExp('\\\\end\\{' + envpair.escapeRegExp(envname) + '\\}')
|
||||||
const startPos1 = new vscode.Position(startPos.line, startPos.character + envname.length + '\\begin{}'.length)
|
const startPos1 = new vscode.Position(startPos.line, startPos.character + envname.length + '\\begin{}'.length)
|
||||||
const endPos = this.findEndPair(document, pattern, startPos1)
|
const endPos = this.findEndPair(document, pattern, startPos1)
|
||||||
@ -159,7 +159,7 @@ export class HoverProvider implements vscode.HoverProvider {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
private getHoverParen(document: vscode.TextDocument, envname: string, startPos: vscode.Position) : [string, vscode.Range] | undefined {
|
private findHoverOnParen(document: vscode.TextDocument, envname: string, startPos: vscode.Position) : [string, vscode.Range] | undefined {
|
||||||
const pattern = envname == '\\[' ? /\\\]/ : /\\\)/
|
const pattern = envname == '\\[' ? /\\\]/ : /\\\)/
|
||||||
const startPos1 = new vscode.Position(startPos.line, startPos.character + envname.length)
|
const startPos1 = new vscode.Position(startPos.line, startPos.character + envname.length)
|
||||||
const endPos = this.findEndPair(document, pattern, startPos1)
|
const endPos = this.findEndPair(document, pattern, startPos1)
|
||||||
@ -171,15 +171,15 @@ export class HoverProvider implements vscode.HoverProvider {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
private getHoverInline(document: vscode.TextDocument, position: vscode.Position) : [string, vscode.Range] | undefined {
|
private findHoverOnInline(document: vscode.TextDocument, position: vscode.Position) : [string, vscode.Range] | undefined {
|
||||||
let b : RegExpMatchArray | null
|
let m : RegExpMatchArray | null
|
||||||
const current_line = document.lineAt(position.line).text
|
const current_line = document.lineAt(position.line).text
|
||||||
let s = current_line
|
let s = current_line
|
||||||
let base = 0
|
let base = 0
|
||||||
while (b = s.match(/\$(?:\\.|[^\\])+?\$|\\\(.+?\\\)/)) {
|
while (m = s.match(/\$(?:\\.|[^\\])+?\$|\\\(.+?\\\)/)) {
|
||||||
if (b && b.index != null) {
|
if (m && m.index != null) {
|
||||||
const matchStart = base + b.index
|
const matchStart = base + m.index
|
||||||
const matchEnd = base + b.index + b[0].length
|
const matchEnd = base + m.index + m[0].length
|
||||||
if ( matchStart <= position.character && position.character <= matchEnd ) {
|
if ( matchStart <= position.character && position.character <= matchEnd ) {
|
||||||
const range = new vscode.Range(position.line, matchStart, position.line, matchEnd)
|
const range = new vscode.Range(position.line, matchStart, position.line, matchEnd)
|
||||||
const ret = this.mathjaxify( this.renderCursor(document, range), '$' )
|
const ret = this.mathjaxify( this.renderCursor(document, range), '$' )
|
||||||
|
Loading…
Reference in New Issue
Block a user