package main
import (
"bufio"
"fmt"
"os"
"regexp"
"slices"
"strings"
)
func main() {
err := extractMermaidDiagrams (os .Args [1 ], os .Args [2 ])
if err != nil {
fmt .Println ("Error:" , err )
}
}
func extractMermaidDiagrams(inputFile string , reqIndexes string ) error {
file , err := os .Open (inputFile )
if err != nil {
return fmt .Errorf ("failed to open file: %v" , err )
}
defer file .Close ()
ri := strings .Split (reqIndexes , " " )
startRegex := regexp .MustCompile ("^```mermaid$" )
endRegex := regexp .MustCompile ("^```$" )
scanner := bufio .NewScanner (file )
isInMermaidBlock := false
diagramNumber := 1
var diagramContent strings .Builder
for scanner .Scan () {
line := scanner .Text ()
if startRegex .MatchString (line ) {
isInMermaidBlock = true
diagramContent .Reset ()
continue
}
if isInMermaidBlock && endRegex .MatchString (line ) {
if !slices .Contains (ri , fmt .Sprintf ("%d" , diagramNumber )) {
continue
}
isInMermaidBlock = false
outputFile := fmt .Sprintf ("diagram_%d.mmd" , diagramNumber )
err := os .WriteFile (outputFile , []byte (diagramContent .String ()), 0644 )
if err != nil {
return fmt .Errorf ("failed to write diagram file: %v" , err )
}
fmt .Printf ("Extracted diagram %d into %s\n" , diagramNumber , outputFile )
diagramNumber ++
continue
}
if isInMermaidBlock {
diagramContent .WriteString (line + "\n" )
}
}
if err := scanner .Err (); err != nil {
return fmt .Errorf ("error reading file: %v" , err )
}
return nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .