mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Fix copy/paste of empty lines (#19798)
* Fix copy/paste of empty newlines again Fixes: https://github.com/go-gitea/gitea/issues/19331 Regressed by: https://github.com/go-gitea/gitea/pull/18270 Needed to do another newline addition to the Chroma output HTML to get copy/paste work again. The previous replacement conditions are probably obsolete, but as I'm not 100% sure, I opted to keep them. Specifically, the Chroma HTML change mentioned in https://github.com/go-gitea/gitea/pull/18270#issuecomment-1013350246 broke our previous newline replacement for such empty lines. Also included are a few changes to make the test more pleasant to work with. * run go mod tidy * add util.Dedent * copy in the code Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
		| @@ -9,6 +9,7 @@ import ( | ||||
| 	"crypto/rand" | ||||
| 	"errors" | ||||
| 	"math/big" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | ||||
| @@ -191,3 +192,35 @@ var titleCaser = cases.Title(language.English) | ||||
| func ToTitleCase(s string) string { | ||||
| 	return titleCaser.String(s) | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	whitespaceOnly    = regexp.MustCompile("(?m)^[ \t]+$") | ||||
| 	leadingWhitespace = regexp.MustCompile("(?m)(^[ \t]*)(?:[^ \t\n])") | ||||
| ) | ||||
|  | ||||
| // Dedent removes common indentation of a multi-line string along with whitespace around it | ||||
| // Based on https://github.com/lithammer/dedent | ||||
| func Dedent(s string) string { | ||||
| 	var margin string | ||||
|  | ||||
| 	s = whitespaceOnly.ReplaceAllString(s, "") | ||||
| 	indents := leadingWhitespace.FindAllStringSubmatch(s, -1) | ||||
|  | ||||
| 	for i, indent := range indents { | ||||
| 		if i == 0 { | ||||
| 			margin = indent[1] | ||||
| 		} else if strings.HasPrefix(indent[1], margin) { | ||||
| 			continue | ||||
| 		} else if strings.HasPrefix(margin, indent[1]) { | ||||
| 			margin = indent[1] | ||||
| 		} else { | ||||
| 			margin = "" | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if margin != "" { | ||||
| 		s = regexp.MustCompile("(?m)^"+margin).ReplaceAllString(s, "") | ||||
| 	} | ||||
| 	return strings.TrimSpace(s) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user