run method
Implementation
@override
FutureOr<TaskController> run(controller) async {
final slide = controller.slide;
final matches = _mermaidBlockRegex.allMatches(slide.data);
if (matches.isEmpty) return controller;
final replacements = <({int start, int end, String markdown})>[];
for (final Match match in matches) {
final mermaidSyntax = match.group(1);
if (mermaidSyntax == null) continue;
final mermaidFile = SlideAsset.mermaid(mermaidSyntax);
if (!await mermaidFile.exists()) {
// Process the mermaid syntax to generate an image file
final imageData = await mermaidService.generateImage(mermaidSyntax);
if (imageData != null) {
await mermaidFile.writeAsBytes(imageData);
}
}
// If file existeed or was create it then replace it
if (await mermaidFile.exists()) {
controller.markNeeded(mermaidFile);
replacements.add((
start: match.start,
end: match.end,
markdown: '',
));
}
}
var replacedData = slide.data;
// Apply replacements in reverse order
for (var replacement in replacements.reversed) {
final (
:start,
:end,
:markdown,
) = replacement;
replacedData = replacedData.replaceRange(start, end, markdown);
}
return controller.copyWith(
slide: slide.copyWith(data: replacedData),
);
}