DuskMoon Highlight

DuskMoon-maintained Dart syntax highlighting for Flutter. The parser, 194 language grammars, aliases and light/dark token themes are maintained in this repository. No JavaScript engine or platform plugin is needed at runtime.

import 'package:duskmoon_highlight/duskmoon_highlight.dart';
import 'package:duskmoon_highlight/languages/all.dart';

final highlight = Highlight()..registerLanguages(builtinAllLanguages);
final result = highlight.highlight(code: 'final answer = 42;', language: 'dart');
final html = result.toHtml();

getLanguage accepts case-insensitive aliases. Guard an unknown identifier before calling highlight to provide a plain-text fallback. After parsing, also fall back when result.errorRaised != null or result.illegal: safe mode can retain partial token output on a parser error. Use result.render with HighlightRenderer to consume raw token text and scopes without HTML escaping. TextSpanRenderer accepts a Flutter base TextStyle and token style map. Individual grammars and themes remain available under languages/ and styles/.

Source and licenses

See SOURCE.md for the exact verified import and changes. LICENSE contains the upstream MIT notice; THIRD_PARTY_LICENSES contains the retained highlight.js and community grammar notices. THIRD_PARTY_NOTICES retains grammar and theme attribution, including theme-specific MIT and CC BY-SA 4.0 notices. The CC license text is in CC-BY-SA-4.0.txt. The checked-in grammar/style sources retain their original attribution comments; inherited themes keep those licenses.

Regeneration

Run from the workspace root with the development environment available. Node 18+ and npm are required only for maintenance. npm ci uses the checked-in lockfile; the HighlightJS helper runtime is pinned to 11.9.0. Grammar definitions and CSS styles are read from this package's vendor/highlight.js/src, with Vue/GN source under their adjacent vendor directories. Edit those inputs rather than generated Dart grammars or themes.

npm ci --prefix packages/duskmoon_highlight/tool --ignore-scripts --no-audit --no-fund
DART="$PWD/.devenv/profile/bin/dart" npm run generate --prefix packages/duskmoon_highlight/tool

The generator works independently of the current shell directory, renames imports to this package and formats generated output. Running it twice with the same input and Dart formatter must produce identical lib/ bytes. Keep the Node lockfile, source grammars/styles and generated Dart changes together when updating inputs. The upstream HighlightJS source version is recorded in vendor/highlight.js/package.json.

Validation

After workspace dependency resolution, run from the root:

devenv shell -- bash -c 'cd packages/duskmoon_highlight && flutter analyze --no-pub --fatal-infos'
devenv shell -- bash -c 'cd packages/duskmoon_highlight && flutter test --no-pub'

API/parser tests and the full original markup fixture suite are retained. Focused maintenance tests cover the owned registry and text-preservation contract.

Libraries

duskmoon_highlight
languages/lib/common
languages/lib/javascript
languages/lib/mathematica
languages/lib/php
languages/lib/typescript
styles/a11y-dark
styles/a11y-light
styles/agate
styles/all
styles/an-old-hope
styles/androidstudio
styles/arduino-light
styles/arta
styles/ascetic
styles/atom-one-dark
styles/atom-one-dark-reasonable
styles/atom-one-light
styles/base16/apathy
styles/base16/apprentice
styles/base16/ashes
styles/base16/atelier-cave
styles/base16/atelier-cave-light
styles/base16/atelier-dune
styles/base16/atelier-dune-light
styles/base16/atelier-estuary
styles/base16/atelier-estuary-light
styles/base16/atelier-forest
styles/base16/atelier-forest-light
styles/base16/atelier-heath
styles/base16/atelier-heath-light
styles/base16/atelier-lakeside
styles/base16/atelier-lakeside-light
styles/base16/atelier-plateau
styles/base16/atelier-plateau-light
styles/base16/atelier-savanna
styles/base16/atelier-savanna-light
styles/base16/atelier-seaside
styles/base16/atelier-seaside-light
styles/base16/atelier-sulphurpool
styles/base16/atelier-sulphurpool-light
styles/base16/atlas
styles/base16/bespin
styles/base16/black-metal
styles/base16/black-metal-bathory
styles/base16/black-metal-burzum
styles/base16/black-metal-dark-funeral
styles/base16/black-metal-gorgoroth
styles/base16/black-metal-immortal
styles/base16/black-metal-khold
styles/base16/black-metal-marduk
styles/base16/black-metal-mayhem
styles/base16/black-metal-nile
styles/base16/black-metal-venom
styles/base16/brewer
styles/base16/bright
styles/base16/brogrammer
styles/base16/brush-trees
styles/base16/brush-trees-dark
styles/base16/chalk
styles/base16/circus
styles/base16/classic-dark
styles/base16/classic-light
styles/base16/codeschool
styles/base16/colors
styles/base16/cupcake
styles/base16/cupertino
styles/base16/danqing
styles/base16/darcula
styles/base16/dark-violet
styles/base16/darkmoss
styles/base16/darktooth
styles/base16/decaf
styles/base16/default-dark
styles/base16/default-light
styles/base16/dirtysea
styles/base16/dracula
styles/base16/edge-dark
styles/base16/edge-light
styles/base16/eighties
styles/base16/embers
styles/base16/equilibrium-dark
styles/base16/equilibrium-gray-dark
styles/base16/equilibrium-gray-light
styles/base16/equilibrium-light
styles/base16/espresso
styles/base16/eva
styles/base16/eva-dim
styles/base16/flat
styles/base16/framer
styles/base16/fruit-soda
styles/base16/gigavolt
styles/base16/github
styles/base16/google-dark
styles/base16/google-light
styles/base16/grayscale-dark
styles/base16/grayscale-light
styles/base16/green-screen
styles/base16/gruvbox-dark-hard
styles/base16/gruvbox-dark-medium
styles/base16/gruvbox-dark-pale
styles/base16/gruvbox-dark-soft
styles/base16/gruvbox-light-hard
styles/base16/gruvbox-light-medium
styles/base16/gruvbox-light-soft
styles/base16/hardcore
styles/base16/harmonic16-dark
styles/base16/harmonic16-light
styles/base16/heetch-dark
styles/base16/heetch-light
styles/base16/helios
styles/base16/hopscotch
styles/base16/horizon-dark
styles/base16/horizon-light
styles/base16/humanoid-dark
styles/base16/humanoid-light
styles/base16/ia-dark
styles/base16/ia-light
styles/base16/icy-dark
styles/base16/ir-black
styles/base16/isotope
styles/base16/kimber
styles/base16/london-tube
styles/base16/macintosh
styles/base16/marrakesh
styles/base16/materia
styles/base16/material
styles/base16/material-darker
styles/base16/material-lighter
styles/base16/material-palenight
styles/base16/material-vivid
styles/base16/mellow-purple
styles/base16/mexico-light
styles/base16/mocha
styles/base16/monokai
styles/base16/nebula
styles/base16/nord
styles/base16/nova
styles/base16/ocean
styles/base16/oceanicnext
styles/base16/one-light
styles/base16/onedark
styles/base16/outrun-dark
styles/base16/papercolor-dark
styles/base16/papercolor-light
styles/base16/paraiso
styles/base16/pasque
styles/base16/phd
styles/base16/pico
styles/base16/pop
styles/base16/porple
styles/base16/qualia
styles/base16/railscasts
styles/base16/rebecca
styles/base16/ros-pine
styles/base16/ros-pine-dawn
styles/base16/ros-pine-moon
styles/base16/sagelight
styles/base16/sandcastle
styles/base16/seti-ui
styles/base16/shapeshifter
styles/base16/silk-dark
styles/base16/silk-light
styles/base16/snazzy
styles/base16/solar-flare
styles/base16/solar-flare-light
styles/base16/solarized-dark
styles/base16/solarized-light
styles/base16/spacemacs
styles/base16/summercamp
styles/base16/summerfruit-dark
styles/base16/summerfruit-light
styles/base16/synth-midnight-terminal-dark
styles/base16/synth-midnight-terminal-light
styles/base16/tango
styles/base16/tender
styles/base16/tomorrow
styles/base16/tomorrow-night
styles/base16/twilight
styles/base16/unikitty-dark
styles/base16/unikitty-light
styles/base16/vulcan
styles/base16/windows-10
styles/base16/windows-10-light
styles/base16/windows-95
styles/base16/windows-95-light
styles/base16/windows-high-contrast
styles/base16/windows-high-contrast-light
styles/base16/windows-nt
styles/base16/windows-nt-light
styles/base16/woodland
styles/base16/xcode-dusk
styles/base16/zenburn
styles/brown-paper
styles/codepen-embed
styles/color-brewer
styles/dark
styles/default
styles/devibeans
styles/docco
styles/far
styles/felipec
styles/foundation
styles/github
styles/github-dark
styles/github-dark-dimmed
styles/gml
styles/googlecode
styles/gradient-dark
styles/gradient-light
styles/grayscale
styles/hybrid
styles/idea
styles/intellij-light
styles/ir-black
styles/isbl-editor-dark
styles/isbl-editor-light
styles/kimbie-dark
styles/kimbie-light
styles/lightfair
styles/lioshi
styles/magula
styles/mono-blue
styles/monokai
styles/monokai-sublime
styles/night-owl
styles/nnfx-dark
styles/nnfx-light
styles/nord
styles/obsidian
styles/panda-syntax-dark
styles/panda-syntax-light
styles/paraiso-dark
styles/paraiso-light
styles/pojoaque
styles/purebasic
styles/qtcreator-dark
styles/qtcreator-light
styles/rainbow
styles/routeros
styles/school-book
styles/shades-of-purple
styles/srcery
styles/stackoverflow-dark
styles/stackoverflow-light
styles/sunburst
styles/tokyo-night-dark
styles/tokyo-night-light
styles/tomorrow-night-blue
styles/tomorrow-night-bright
styles/vs
styles/vs2015
styles/xcode
styles/xt256