//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><message></code> element and the entire set is wrapped in a
/// <code><buildresults></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(@"([^\r\n]+)");
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();
}
}
}
|