monaco-latex
Version:
LaTeX language support for Monaco Editor
98 lines (86 loc) • 3.04 kB
text/typescript
/**
* 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));
}