or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mdcore-highlighting.mdindex.mdlanguage-management.mdmodes-patterns.mdplugin-system.mdutilities.md
tile.json

language-management.mddocs/

Language Management

Language registration, discovery, and management functionality for working with highlight.js's 191+ supported programming languages. These functions allow you to control which languages are available, register custom languages, and manage language aliases.

Capabilities

Register Language

Registers a new language definition or overwrites an existing one. Essential for using the core library with individual language modules.

/**
 * Registers a new language definition
 * @param languageName - Unique name for the language
 * @param language - Language definition function that returns Language object
 */
function registerLanguage(languageName: string, language: LanguageFn): void;

/**
 * Language definition function type
 * @param hljs - Optional reference to the hljs API for accessing modes and utilities
 * @returns Language definition object with syntax rules
 */
type LanguageFn = (hljs?: HLJSApi) => Language;

interface Language {
  /** Language display name */
  name?: string;
  /** Alternative names for the language */
  aliases?: string[];
  /** Whether to disable auto-detection for this language */
  disableAutodetect?: boolean;
  /** Array of syntax mode definitions */
  contains: Mode[];
  /** Whether the language is case-insensitive */
  case_insensitive?: boolean;
  /** Keywords and their classifications */
  keywords?: Record<string, any> | string;
  /** CSS class name aliases */
  classNameAliases?: Record<string, string>;
  /** Language this is a superset of */
  supersetOf?: string;
}

Usage Examples:

import hljs from "highlight.js/lib/core";
import javascript from "highlight.js/lib/languages/javascript";
import python from "highlight.js/lib/languages/python";
import xml from "highlight.js/lib/languages/xml";

// Register individual languages
hljs.registerLanguage('javascript', javascript);
hljs.registerLanguage('python', python);
hljs.registerLanguage('xml', xml);

// Register with custom name
hljs.registerLanguage('js', javascript);

// Register multiple languages programmatically
const languages = [
  ['javascript', javascript],
  ['python', python],
  ['html', xml], // XML handles HTML
];

languages.forEach(([name, lang]) => {
  hljs.registerLanguage(name, lang);
});

Unregister Language

Removes a language definition from the registry. Useful for reducing memory usage or replacing language definitions.

/**
 * Removes a language definition from the registry
 * @param languageName - Name of the language to remove
 */
function unregisterLanguage(languageName: string): void;

Usage Examples:

import hljs from "highlight.js";

// Remove a language to save memory
hljs.unregisterLanguage('fortran');
hljs.unregisterLanguage('cobol');

// Remove before re-registering with custom definition
hljs.unregisterLanguage('javascript');
hljs.registerLanguage('javascript', myCustomJavaScript);

// Conditional registration
if (!needsLegacySupport) {
  hljs.unregisterLanguage('pascal');
  hljs.unregisterLanguage('ada');
}

List Languages

Returns an array of all currently registered language names. Useful for discovering available languages or debugging registration issues.

/**
 * Returns list of all registered language names
 * @returns Array of language name strings
 */
function listLanguages(): string[];

Usage Examples:

import hljs from "highlight.js";

// Check what languages are available
const languages = hljs.listLanguages();
console.log(`${languages.length} languages available:`, languages);

// Build a language selector
const selector = document.getElementById('language-select');
hljs.listLanguages().forEach(lang => {
  const option = document.createElement('option');
  option.value = lang;
  option.textContent = lang;
  selector.appendChild(option);
});

// Verify specific language is registered
if (hljs.listLanguages().includes('typescript')) {
  console.log('TypeScript support is available');
}

Get Language

Retrieves a language definition by name. Returns

undefined
if the language is not registered.

/**
 * Gets a registered language definition
 * @param languageName - Name of the language to retrieve
 * @returns Language definition object or undefined if not found
 */
function getLanguage(languageName: string): Language | undefined;

Usage Examples:

import hljs from "highlight.js";

// Check if language exists before using
const jsLang = hljs.getLanguage('javascript');
if (jsLang) {
  console.log('JavaScript language:', jsLang.name);
  console.log('Aliases:', jsLang.aliases);
  console.log('Case insensitive:', jsLang.case_insensitive);
}

// Safely get language info
function getLanguageInfo(langName) {
  const lang = hljs.getLanguage(langName);
  return lang ? {
    name: lang.name || langName,
    aliases: lang.aliases || [],
    autodetect: !lang.disableAutodetect
  } : null;
}

// Language validation
function isLanguageSupported(langName) {
  return hljs.getLanguage(langName) !== undefined;
}

Require Language

Gets a language definition by name, throwing an error if not found. Use when you need to ensure a language is available.

Note: This function is deprecated as of v10.4.0 and will be removed in v11.0. Use

getLanguage()
instead.

/**
 * Gets a language definition, throws if not found
 * @deprecated Since v10.4.0, will be removed in v11.0. Use getLanguage() instead.
 * @param languageName - Name of the language to retrieve
 * @returns Language definition object
 * @throws Error if language is not registered
 */
function requireLanguage(languageName: string): Language | never;

Usage Examples:

import hljs from "highlight.js/lib/core";

// Ensure required languages are loaded
try {
  const js = hljs.requireLanguage('javascript');
  const py = hljs.requireLanguage('python');
  console.log('All required languages loaded');
} catch (error) {
  console.error('Missing language:', error.message);
  // Load missing languages dynamically
}

// Fail fast if critical language missing
function highlightCode(code, language) {
  try {
    hljs.requireLanguage(language); // Throws if not available
    return hljs.highlight(code, {language});
  } catch (error) {
    throw new Error(`Language '${language}' not available: ${error.message}`);
  }
}

// Validation in configuration
const requiredLanguages = ['javascript', 'python', 'java'];
requiredLanguages.forEach(lang => {
  try {
    hljs.requireLanguage(lang);
  } catch (error) {
    throw new Error(`Configuration error: ${error.message}`);
  }
});

Register Aliases

Registers alternative names for an existing language. Allows users to specify languages using different names.

/**
 * Registers aliases for an existing language
 * @param aliasList - Single alias string or array of alias strings
 * @param options - Object containing the target language name
 */
function registerAliases(
  aliasList: string | string[], 
  {languageName}: {languageName: string}
): void;

Usage Examples:

import hljs from "highlight.js";

// Register single alias
hljs.registerAliases('js', {languageName: 'javascript'});
hljs.registerAliases('py', {languageName: 'python'});

// Register multiple aliases
hljs.registerAliases(['js', 'ecmascript', 'es6'], {languageName: 'javascript'});
hljs.registerAliases(['py', 'py3'], {languageName: 'python'});

// Common aliases for web languages
hljs.registerAliases(['htm'], {languageName: 'xml'}); // xml handles html
hljs.registerAliases(['scss', 'sass'], {languageName: 'css'});

// Custom alias registration
const aliasMap = {
  'javascript': ['js', 'jsx', 'ecmascript'],
  'typescript': ['ts', 'tsx'],
  'python': ['py', 'python3'],
  'shell': ['bash', 'sh', 'zsh']
};

Object.entries(aliasMap).forEach(([lang, aliases]) => {
  hljs.registerAliases(aliases, {languageName: lang});
});

Auto Detection

Checks whether automatic language detection is enabled for a specific language. Some languages may disable auto-detection to avoid false positives.

/**
 * Checks if auto-detection is enabled for a language
 * @param languageName - Name of the language to check
 * @returns True if auto-detection is enabled, false otherwise
 */
function autoDetection(languageName: string): boolean;

Usage Examples:

import hljs from "highlight.js";

// Check which languages support auto-detection
const allLanguages = hljs.listLanguages();
const autoDetectLanguages = allLanguages.filter(lang => 
  hljs.autoDetection(lang)
);
console.log('Auto-detection enabled for:', autoDetectLanguages);

// Build subset for auto-detection
function getAutoDetectSubset(preferredLanguages) {
  return preferredLanguages.filter(lang => {
    return hljs.getLanguage(lang) && hljs.autoDetection(lang);
  });
}

// Conditional auto-detection
function smartHighlight(code, preferredLanguages = []) {
  const autoLanguages = preferredLanguages.filter(lang => 
    hljs.autoDetection(lang)
  );
  
  if (autoLanguages.length > 0) {
    return hljs.highlightAuto(code, autoLanguages);
  } else {
    return hljs.highlightAuto(code);
  }
}

Supported Languages

Highlight.js includes 191 language definitions covering major programming languages, markup languages, configuration formats, and domain-specific languages:

Popular Programming Languages

  • JavaScript/TypeScript: javascript, typescript, jsx, tsx
  • Python: python, python-repl
  • Java: java
  • C/C++: c, cpp, c-like
  • C#: csharp, cs
  • Go: go, golang
  • Rust: rust, rs
  • PHP: php
  • Ruby: ruby, rb
  • Swift: swift
  • Kotlin: kotlin, kt

Web Technologies

  • HTML/XML: xml, html, xhtml
  • CSS: css, scss, sass, less, stylus
  • JSON: json, json5
  • Markdown: markdown, md

Shell and Configuration

  • Shell Scripts: bash, shell, sh, zsh
  • Configuration: yaml, yml, toml, ini, properties
  • Docker: dockerfile
  • Nginx: nginx
  • Apache: apache, apacheconf

Databases

  • SQL: sql, mysql, postgresql, sqlite
  • NoSQL: mongodb

Popular Frameworks/Libraries

  • React: jsx, tsx (via javascript/typescript)
  • Vue: vue (via javascript + template syntax)
  • Angular: typescript + html templates

Full Language List

See SUPPORTED_LANGUAGES.md for the complete list of 191+ supported languages.

Dynamic Language Loading

// Load languages on demand
async function loadLanguage(languageName) {
  if (!hljs.getLanguage(languageName)) {
    try {
      const langModule = await import(`highlight.js/lib/languages/${languageName}`);
      hljs.registerLanguage(languageName, langModule.default);
      return true;
    } catch (error) {
      console.error(`Failed to load language ${languageName}:`, error);
      return false;
    }
  }
  return true;
}

// Usage
if (await loadLanguage('rust')) {
  const result = hljs.highlight(rustCode, {language: 'rust'});
}

Custom Language Definitions

// Define a simple custom language
function myLanguage(hljs) {
  return {
    name: 'MyLanguage',
    aliases: ['mylang', 'ml'],
    keywords: {
      keyword: 'if else while for function',
      built_in: 'print console log',
      literal: 'true false null'
    },
    contains: [
      hljs.QUOTE_STRING_MODE,
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_NUMBER_MODE
    ]
  };
}

// Register custom language
hljs.registerLanguage('mylanguage', myLanguage);