Colored text diff
diff --git a/diffmatchpatch/dmp.go b/diffmatchpatch/dmp.go
index 4607452..0350978 100644
--- a/diffmatchpatch/dmp.go
+++ b/diffmatchpatch/dmp.go
@@ -1412,6 +1412,29 @@
 	return buff.String()
 }
 
+// DiffPrettyText converts a []Diff into a colored text report.
+func (dmp *DiffMatchPatch) DiffPrettyText(diffs []Diff) string {
+	var buff bytes.Buffer
+	for _, diff := range diffs {
+		text := diff.Text
+
+		switch diff.Type {
+		case DiffInsert:
+			_, _ = buff.WriteString("\x1b[32m")
+			_, _ = buff.WriteString(text)
+			_, _ = buff.WriteString("\x1b[0m")
+		case DiffDelete:
+			_, _ = buff.WriteString("\x1b[31m")
+			_, _ = buff.WriteString(text)
+			_, _ = buff.WriteString("\x1b[0m")
+		case DiffEqual:
+			_, _ = buff.WriteString(text)
+		}
+	}
+
+	return buff.String()
+}
+
 // DiffText1 computes and returns the source text (all equalities and deletions).
 func (dmp *DiffMatchPatch) DiffText1(diffs []Diff) string {
 	//StringBuilder text = new StringBuilder()
diff --git a/diffmatchpatch/dmp_test.go b/diffmatchpatch/dmp_test.go
index c727e8a..ee4766b 100644
--- a/diffmatchpatch/dmp_test.go
+++ b/diffmatchpatch/dmp_test.go
@@ -746,6 +746,17 @@
 		dmp.DiffPrettyHtml(diffs))
 }
 
+func Test_diffPrettyText(t *testing.T) {
+	dmp := New()
+	// Pretty print.
+	diffs := []Diff{
+		Diff{DiffEqual, "a\n"},
+		Diff{DiffDelete, "<B>b</B>"},
+		Diff{DiffInsert, "c&d"}}
+	assert.Equal(t, "a\n\x1b[31m<B>b</B>\x1b[0m\x1b[32mc&d\x1b[0m",
+		dmp.DiffPrettyText(diffs))
+}
+
 func Test_diffText(t *testing.T) {
 	dmp := New()
 	// Compute the source and destination texts.