create method
Creates a component for the given node, or returns null.
Implementation
@override
Component? create(Node node, NodesBuilder builder) {
if (node
case ElementNode(tag: 'Code' || 'CodeBlock', :final children, :final attributes) ||
ElementNode(tag: 'pre', children: [ElementNode(tag: 'code', :final children, :final attributes)])) {
var language = attributes['language'];
if (language == null && (attributes['class']?.startsWith('language-') ?? false)) {
language = attributes['class']!.substring('language-'.length);
}
if (!_initialized) {
Highlighter.initialize(['dart']);
for (final entry in grammars.entries) {
Highlighter.addLanguage(entry.key, entry.value);
}
_initialized = true;
}
return AsyncBuilder(
builder: (context) async {
final highlighter = Highlighter(
language: language ?? defaultLanguage,
theme: theme ?? (_defaultTheme ??= await HighlighterTheme.loadDarkTheme()),
);
return _CodeBlock(source: children?.map((c) => c.innerText).join(' ') ?? '', highlighter: highlighter);
},
);
}
return null;
}