package dedent

import (
	
	
)

var (
	whitespaceOnly    = regexp.MustCompile("(?m)^[ \t]+$")
	leadingWhitespace = regexp.MustCompile("(?m)(^[ \t]*)(?:[^ \t\n])")
)

// Dedent removes any common leading whitespace from every line in text.
//
// This can be used to make multiline strings to line up with the left edge of
// the display, while still presenting them in the source code in indented
// form.
func ( string) string {
	var  string

	 = whitespaceOnly.ReplaceAllString(, "")
	 := leadingWhitespace.FindAllStringSubmatch(, -1)

	// Look for the longest leading string of spaces and tabs common to all
	// lines.
	for ,  := range  {
		if  == 0 {
			 = [1]
		} else if strings.HasPrefix([1], ) {
			// Current line more deeply indented than previous winner:
			// no change (previous winner is still on top).
			continue
		} else if strings.HasPrefix(, [1]) {
			// Current line consistent with and no deeper than previous winner:
			// it's the new winner.
			 = [1]
		} else {
			// Current line and previous winner have no common whitespace:
			// there is no margin.
			 = ""
			break
		}
	}

	if  != "" {
		 = regexp.MustCompile("(?m)^"+).ReplaceAllString(, "")
	}
	return 
}