/** * Monaco-LaTeX: LaTeX language support for Monaco Editor. * * This package provides: * - Syntax highlighting (Monarch tokenizer) * - Autocompletion for commands, environments, and packages * - Hover documentation * - Code folding for environments and sections */ import type * as Monaco from 'monaco-editor'; import type { languages } from 'monaco-editor'; // Import for internal use import { createCompletionProvider } from './src/completion'; import { createFoldingProvider } from './src/folding'; import { createHoverProvider } from './src/hover'; import { monarchTokenizer } from './src/tokenizer'; // Re-export the tokenizer export { default, monarchTokenizer } from './src/tokenizer'; // Re-export providers export { createCompletionProvider, LaTeXCompletionProvider } from './src/completion'; export { createFoldingProvider, LaTeXFoldingRangeProvider } from './src/folding'; export { createHoverProvider, LaTeXHoverProvider } from './src/hover'; // Re-export command data for advanced usage export { COMMAND_MAP, CommandCategory, ENVIRONMENT_MAP, LATEX_COMMANDS, LATEX_ENVIRONMENTS, LATEX_PACKAGES, PACKAGE_MAP, type LaTeXCommand, type LaTeXEnvironment, type LaTeXPackage } from './src/commands/data'; /** * Language configuration for LaTeX. */ export const languageConfiguration: languages.LanguageConfiguration = { comments: { lineComment: '%', }, brackets: [ ['{', '}'], ['[', ']'], ['(', ')'], ], autoClosingPairs: [ { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' }, { open: '$', close: '$' }, ], surroundingPairs: [ { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' }, { open: '$', close: '$' }, ], folding: { markers: { start: /\\begin\{/, end: /\\end\{/, }, }, }; /** * Registers all LaTeX language features with Monaco. * This is a convenience function that sets up everything at once. * * @param monaco - The Monaco editor instance */ export function registerLaTeXLanguage(monaco: typeof Monaco): void { // Register the language monaco.languages.register({ id: 'latex', extensions: ['.tex', '.sty', '.cls'], aliases: ['LaTeX', 'latex', 'tex'], mimetypes: ['text/latex', 'text/tex'], }); // Set language configuration monaco.languages.setLanguageConfiguration('latex', languageConfiguration); // Set tokenizer for syntax highlighting monaco.languages.setMonarchTokensProvider('latex', monarchTokenizer); // Register completion provider monaco.languages.registerCompletionItemProvider('latex', createCompletionProvider(monaco)); // Register hover provider monaco.languages.registerHoverProvider('latex', createHoverProvider(monaco)); // Register folding provider monaco.languages.registerFoldingRangeProvider('latex', createFoldingProvider(monaco)); }