/// <inheritdoc /> public void WriteXml(XmlWriter writer) { writer.WriteAttributeString(nameof(LineBreaks), LineBreaks.ToString()); writer.WriteAttributeString(nameof(LineBreakTrimDirection), LineBreakTrimDirection.ToString()); }
/// <inheritdoc /> public string Apply(string value) { var breaksFound = 0; if (LineBreaks == 0 && LineBreakTrimDirection.HasFlagFast(LineBreakTrimDirection.Begin)) { for (int i = 0; i < value.Length; i++) { var c = value[i]; if (c == '\t') { continue; } if (c == ' ') { continue; } if (c == '\r' || c == '\n') { c = value[i + 1]; if (c == '\r' || c == '\n') { i++; } return(value.Substring(i + 1)); } return(value.Substring(i)); } return(value); } if (LineBreaks == 0 && LineBreakTrimDirection.HasFlagFast(LineBreakTrimDirection.End)) { for (int i = value.Length - 1; i > 0; i--) { var c = value[i]; if (c == '\t') { continue; } if (c == ' ') { continue; } if (c == '\r' || c == '\n') { c = value[i - 1]; i--; if (c == '\r' || c == '\n') { i--; } } return(value.Substring(0, i + 1)); } return(value); } if (LineBreaks == -1 && LineBreakTrimDirection.HasFlagFast(LineBreakTrimDirection.Begin)) { return(value.TrimStart(Tokenizer.GetWhitespaceDelimiters())); } if (LineBreaks == -1 && LineBreakTrimDirection.HasFlagFast(LineBreakTrimDirection.End)) { return(value.TrimEnd(Tokenizer.GetWhitespaceDelimiters())); } for (int i = 0; i < value.Length; i++) { var c = value[i]; if (Tokenizer.IsWhiteSpaceDelimiter(c)) { if (LineBreaks == ++breaksFound) { if (value.Length + 1 >= i) { return(value.Substring(i + 1)); } return(string.Empty); } } else { return(value.Substring(i)); } } return(string.Empty); }
/// <summary> /// /// </summary> /// <param name="value"></param> /// <param name="flag"></param> /// <returns></returns> public static bool HasFlagFast(this LineBreakTrimDirection value, LineBreakTrimDirection flag) { return((value & flag) != 0); }