fromJson static method
Converts a TextMate grammar JSON string into a re_highlight Mode.
TextMate grammars use scope names (e.g. keyword.control.dart,
string.quoted.double) which must be mapped to highlight.js class names
(keyword, string, comment, number, etc.) that re_highlight themes
understand.
Implementation
static Mode fromJson(String json) {
final decoded = jsonDecode(json) as Map<String, dynamic>;
final repository = <String, dynamic>{};
if (decoded.containsKey('repository')) {
final repo = decoded['repository'] as Map<String, dynamic>;
repo.forEach((key, value) {
repository[key] = value;
});
}
final keywordSets = <String, Set<String>>{};
_collectKeywords(repository, keywordSets);
final root = Mode(
name: decoded['name'] as String?,
aliases: decoded.containsKey('aliases')
? (decoded['aliases'] as List).cast<String>()
: null,
);
if (keywordSets.isNotEmpty) {
final keywordsMap = <String, dynamic>{};
keywordsMap['\$pattern'] = r'[A-Za-z_]\w*|__\w+__';
keywordSets.forEach((category, words) {
keywordsMap[category] = words.toList();
});
root.keywords = keywordsMap;
}
final contains = <Mode>[];
_buildStandardContains(repository, contains);
root.contains = contains.isNotEmpty ? contains : null;
return root;
}