UNPKG

monaco-latex

Version:

LaTeX language support for Monaco Editor

108 lines (107 loc) 3.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHoverProvider = exports.LaTeXHoverProvider = void 0; const data_1 = require("./commands/data"); class LaTeXHoverProvider { constructor(monaco) { this.monaco = monaco; } provideHover(model, position, token) { const word = model.getWordAtPosition(position); if (!word) return null; const lineContent = model.getLineContent(position.lineNumber); const beforeWord = lineContent.substring(0, word.startColumn - 1); // Check if this is a LaTeX command (preceded by backslash) if (beforeWord.endsWith('\\')) { const command = data_1.COMMAND_MAP.get(word.word); if (command) { return this.createCommandHover(command, { startLineNumber: position.lineNumber, startColumn: word.startColumn - 1, endLineNumber: position.lineNumber, endColumn: word.endColumn, }); } } // Check if it's an environment name inside \begin{} or \end{} const envMatch = lineContent.match(/\\(begin|end)\{(\w+\*?)\}/); if (envMatch && word.word === envMatch[2]) { const env = data_1.ENVIRONMENT_MAP.get(envMatch[2]); if (env) { return this.createEnvironmentHover(env, { startLineNumber: position.lineNumber, startColumn: word.startColumn, endLineNumber: position.lineNumber, endColumn: word.endColumn, }); } } return null; } createCommandHover(cmd, range) { const contents = []; // Command signature if (cmd.signature) { contents.push({ value: `\`\\${cmd.name}${cmd.signature}\``, }); } else { contents.push({ value: `\`\\${cmd.name}\``, }); } // Description contents.push({ value: cmd.description, }); // Category contents.push({ value: `*Category:* ${cmd.category}`, }); // Package requirement if (cmd.package) { contents.push({ value: `*Requires:* \`\\usepackage{${cmd.package}}\``, }); } // Example if (cmd.example) { contents.push({ value: `**Example:**\n\`\`\`latex\n${cmd.example}\n\`\`\``, }); } return { contents, range }; } createEnvironmentHover(env, range) { const contents = []; // Environment name contents.push({ value: `\`\\begin{${env.name}}...\\end{${env.name}}\``, }); // Description contents.push({ value: env.description, }); // Category contents.push({ value: `*Category:* ${env.category}`, }); // Package requirement if (env.package) { contents.push({ value: `*Requires:* \`\\usepackage{${env.package}}\``, }); } return { contents, range }; } } exports.LaTeXHoverProvider = LaTeXHoverProvider; /** * Creates a hover provider for LaTeX. */ function createHoverProvider(monaco) { return new LaTeXHoverProvider(monaco); } exports.createHoverProvider = createHoverProvider;