The general purpose scopes are intended to be used for any language, but the other scopes may also be used when semantically correct. For example if you had a general purpose language that allowed inline URLs:
var GOOGLE = https://www.google.com/
It would be reasonable to use the link class for this, even if your language is not a markup language. However, many themes might not be designed with this in mind so a better choice (for best theme support) might possibly be string.
|keyword in a regular Algol-style language
|built-in or library object (constant, class, function)
|data type (in a language with syntactically significant types) (string, int, array, etc.)
|special identifier for a built-in value (true, false, null, etc.)
|number, including units and modifiers, if any.
|operators: +, -, >>, |, ==
|aux. punctuation that should be subtly highlighted (parentheses, brackets, etc.)
|object property obj.prop1.prop2.value
|literal regular expression
|literal string, character
|an escape character such as \n
|parsed section inside a literal string
|symbolic constant, interned string, goto label
|deprecated You probably want title.class
|deprecated You probably want title.function
|variable with special meaning in a language, e.g.: this, window, super, self, etc.
|variable that is a constant value, ie MAX_FILES
|name of a class or a function
|name of a class (interface, trait, module, etc)
|name of class being inherited from, extended, etc.
|name of a function
|name of a function (when being invoked)
|block of function arguments (parameters) at the place of declaration
|documentation markup within comments, e.g. @params
|flags, modifiers, annotations, processing instructions, preprocessor directives, etc
|REPL or shell prompts or similar
|a keyword inside a meta block (note this is nested, not subscoped)
|a string inside a meta block (note this is nested, not subscoped)
Tags, attributes, configs
|heading of a section in a config file, heading in text markup
|name of an XML tag, the first word in an s-expression
|name of an attribute with no language defined semantics (keys in JSON, setting names in .ini), also sub-attribute within another highlighted object, like XML tag
|name of an attribute followed by a structured value part, like CSS properties
|list item bullet
|quotation or blockquote
|tag of a template language
|variable in a template language
|added or changed line
A note on scopes with sub-scopes
Some scope names above have a . in them. We use this notation to specify sub-scopes. In the generated HTML this will output multiple computed class names. The depth of nesting determines the number of underscores appended to sub-scope names. For example, Lets say the scope is title.class.other.
The CSS class names generated would be:
The top-level scope is always the one that has the configured prefix applied.
The generated HTML would be:
<span class="hljs-title class_ other__">Render</span>
A theme could then simply target that using the following CSS:
A note on newer scopes
Some scopes have been added more recently and do not enjoy universal theme support. For themes without support, these items will simply not be highlighted. This doesn’t mean not to use them, only that they will be highlighted better as support improves over time.
A list of these scopes:
The below scopes (ReasonML) are left here for documentation purposes but may not be used in other grammars because they are very poorly supported by all themes.
If you’d like to help out with the larger issue here:
|pattern matching matchers
|type signatures on function parameters
|scope access into a module
|module reference within scope access
Language names and aliases
The language names and aliases table has moved to SUPPORTED_LANGUAGES.md.