// Command prosediff prints the prose diff between two markdown files. // // It exists so the differ can be judged the way a reviewer would judge it — // by reading its output on real documents — without a web layer. // // prosediff old.md new.md // prosediff -stats -width 100 old.md new.md package main import ( "flag" "fmt" "os" "sourcecraft.dev/bigbes/sr-ht-spec/prosediff" ) func main() { var ( width = flag.Int("width", 92, "wrap prose at this column; 0 disables wrapping") context = flag.Int("context", 0, "unchanged blocks to show around each change") showEqual = flag.Bool("all", false, "print unchanged blocks too") statsOnly = flag.Bool("stats", false, "print only the summary line") ) flag.Parse() if flag.NArg() != 2 { fmt.Fprintln(os.Stderr, "usage: prosediff [flags] ") flag.PrintDefaults() os.Exit(2) } oldSrc, err := os.ReadFile(flag.Arg(0)) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } newSrc, err := os.ReadFile(flag.Arg(1)) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } d := prosediff.Compare(oldSrc, newSrc) if !*statsOnly { fmt.Print(prosediff.RenderText(d, prosediff.RenderOptions{ Width: *width, Context: *context, ShowEqual: *showEqual, })) } s := d.Stats fmt.Printf("\n%d blocks: %d equal, %d modified, %d added, %d removed, %d moved (+%d/-%d words)\n", len(d.Changes), s.BlocksEqual, s.BlocksModified, s.BlocksInserted, s.BlocksDeleted, s.BlocksMoved, s.WordsInserted, s.WordsDeleted) }