code: func Parts(str string) []Part {
  	var pos = 0
  	var parts []Part
  	for _, loc := range phRegex.FindAllStringIndex(str, -1) {
  		var start, end = loc[0], loc[1]
  		if start > pos {
  			parts = append(parts, RawTextPart{str[pos:start]})
  		}
  		parts = append(parts, PlaceholderPart{str[start+1 : end-1]})
  		pos = end
  	}
  	if pos < len(str) {
  		parts = append(parts, RawTextPart{str[pos:]})
  	}
  	return parts
  }
docs: // Parts returns the sequence of raw text and placeholders for the given
  // message placeholder string.