//CruiseControl is open source software and is developed and maintained by a group of dedicated volunteers. //CruiseControl is distributed under a BSD-style license. //http://cruisecontrol.sourceforge.net/ using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace ThoughtWorks.CruiseControl.Core.Util { /// <summary> /// Class with handy stirng routines /// </summary> public class StringUtil { /// <summary> /// Convert a stream of text lines separated with newline sequences into an XML build result. /// </summary> /// <param name="input">the text stream</param> /// <param name="msgLevel">the message level, if any. Values are "Error" and "Warning".</param> /// <returns>the build result string</returns> /// <remarks>If there are any non-blank lines in the input, they are each wrapped in a /// <code>&lt;message&gt;</code> element and the entire set is wrapped in a /// <code>&lt;buildresults&gt;</code> element and returned. Each line of the input is encoded /// as XML CDATA rules require. If the input is empty or contains only whitspace, an /// empty string is returned. /// Note: If we can't manage to understand the input, we just return it unchanged. /// </remarks> public static string MakeBuildResult(string input, string msgLevel) { StringBuilder sb = new StringBuilder(); // Pattern for capturing a line of text, exclusive of the line-ending sequence. // A "line" is an non-empty unbounded sequence of characters followed by some // kind of line-ending sequence (CR, LF, or any combination thereof) or // end-of-string. Regex linePattern = new Regex(@"([^ ]+)"); MatchCollection lines = linePattern.Matches(input); if (lines.Count > 0) { sb.Append(Environment.NewLine); sb.Append("<buildresults>"); sb.Append(Environment.NewLine); foreach (Match line in lines) { sb.Append(" <message"); if (msgLevel != string.Empty) sb.AppendFormat(" level="{0}"", msgLevel); sb.Append(">"); sb.Append(line.ToString()); sb.Append("</message>"); sb.Append(Environment.NewLine); } sb.Append("</buildresults>"); sb.Append(Environment.NewLine); } else sb.Append(input); // All of that stuff failed, just return our input return sb.ToString(); } } }