Files
Verso/services/web/frontend/js/features/source-editor/extensions/class-highlighter.ts
T
claudeandClaude Sonnet 4.6 75bc3bcc73
Build and Deploy Verso / deploy (push) Successful in 9m34s
fix(typst): highlight idents after #keyword and wire tok-attributeName
- codeIdentTokenizer: extend guard to scan back through the keyword word
  and accept when '#' immediately precedes it, so 'text' in '#set text(...)'
  and 'heading' in '#show heading:' are highlighted as function names
- classHighlighter: add tags.attributeName → tok-attributeName mapping;
  all 26 themes already define .tok-attributeName colours but the tag was
  never mapped to the class, leaving named arg keys (columns:, caption:)
  completely unstyled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 09:18:31 +00:00

52 lines
2.1 KiB
TypeScript

/**
* This file is adapted from Lezer, licensed under the MIT license:
* https://github.com/lezer-parser/highlight/blob/main/src/highlight.ts
*/
import { tagHighlighter, tags } from '@lezer/highlight'
export const classHighlighter = tagHighlighter([
{ tag: tags.link, class: 'tok-link' },
{ tag: tags.heading, class: 'tok-heading' },
{ tag: tags.emphasis, class: 'tok-emphasis' },
{ tag: tags.strong, class: 'tok-strong' },
{ tag: tags.keyword, class: 'tok-keyword' },
{ tag: tags.atom, class: 'tok-atom' },
{ tag: tags.bool, class: 'tok-bool' },
{ tag: tags.url, class: 'tok-url' },
{ tag: tags.labelName, class: 'tok-labelName' },
{ tag: tags.inserted, class: 'tok-inserted' },
{ tag: tags.deleted, class: 'tok-deleted' },
{ tag: tags.literal, class: 'tok-literal' },
{ tag: tags.string, class: 'tok-string' },
{ tag: tags.number, class: 'tok-number' },
{
tag: [tags.regexp, tags.escape, tags.special(tags.string)],
class: 'tok-string2',
},
{ tag: tags.function(tags.variableName), class: 'tok-function' },
{ tag: tags.variableName, class: 'tok-variableName' },
{ tag: tags.local(tags.variableName), class: 'tok-variableName tok-local' },
{
tag: tags.definition(tags.variableName),
class: 'tok-variableName tok-definition',
},
{ tag: tags.special(tags.variableName), class: 'tok-variableName2' },
{
tag: tags.definition(tags.propertyName),
class: 'tok-propertyName tok-definition',
},
{ tag: tags.typeName, class: 'tok-typeName' },
{ tag: tags.namespace, class: 'tok-namespace' },
{ tag: tags.className, class: 'tok-className' },
{ tag: tags.macroName, class: 'tok-macroName' },
{ tag: tags.propertyName, class: 'tok-propertyName' },
{ tag: tags.operator, class: 'tok-operator' },
{ tag: tags.comment, class: 'tok-comment' },
{ tag: tags.meta, class: 'tok-meta' },
{ tag: tags.invalid, class: 'tok-invalid' },
{ tag: tags.punctuation, class: 'tok-punctuation' },
// additional
{ tag: tags.attributeName, class: 'tok-attributeName' },
{ tag: tags.attributeValue, class: 'tok-attributeValue' },
])