Try your search with a different keyword or use * as a wildcard.
using System.Net;
using System.Text.RegularExpressions;
namespace Nop.Services.Html.CodeFormatter;
///
/// Represents a code format helper
///
public partial class CodeFormatHelper
{
#region Fields
protected static readonly Regex _regexHtml = new("<[^>]*>", RegexOptions.Compiled);
protected static readonly Regex _regexCode = new(@"\[code\](?(.*?))\[/code\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
#endregion
#region Utilities
///
/// Code evaluator method
///
/// Match
/// Formatted text
protected static string CodeEvaluatorSimple(Match match)
{
if (!match.Success)
return match.Value;
var options = new HighlightOptions
{
Language = "c#",
Code = match.Groups["inner"].Value,
DisplayLineNumbers = false,
Title = string.Empty,
AlternateLineNumbers = false
};
var result = match.Value;
result = Highlight(options, result);
return result;
}
///
/// Strips HTML
///
/// HTML
/// Formatted text
protected static string StripHtml(string html)
{
if (string.IsNullOrEmpty(html))
return string.Empty;
return _regexHtml.Replace(html, string.Empty);
}
///
/// Returns the formatted text.
///
/// Whatever options were set in the regex groups.
/// Send the e.body so it can get formatted.
/// The formatted string of the match.
protected static string Highlight(HighlightOptions options, string text)
{
switch (options.Language)
{
case "c#":
var csf = new CSharpFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
return WebUtility.HtmlDecode(csf.FormatCode(text));
case "vb":
var vbf = new VisualBasicFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
return vbf.FormatCode(text);
case "js":
var jsf = new JavaScriptFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
return WebUtility.HtmlDecode(jsf.FormatCode(text));
case "html":
var htmlf = new HtmlFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
text = StripHtml(text).Trim();
var code = htmlf.FormatCode(WebUtility.HtmlDecode(text)).Trim();
return code.Replace("\r\n", "
").Replace("\n", "
");
case "xml":
var xmlf = new HtmlFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
text = text.Replace("
", "\r\n");
text = StripHtml(text).Trim();
var xml = xmlf.FormatCode(WebUtility.HtmlDecode(text)).Trim();
return xml.Replace("\r\n", "
").Replace("\n", "
");
case "tsql":
var tsqlf = new TsqlFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
return WebUtility.HtmlDecode(tsqlf.FormatCode(text));
case "msh":
var mshf = new MshFormat
{
LineNumbers = options.DisplayLineNumbers,
Alternate = options.AlternateLineNumbers
};
return WebUtility.HtmlDecode(mshf.FormatCode(text));
}
return string.Empty;
}
#endregion
#region Methods
///
/// Formats the text
///
/// Text
/// Formatted text
public static string FormatTextSimple(string text)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
if (!text.Contains("[/code]"))
return text;
text = _regexCode.Replace(text, CodeEvaluatorSimple);
text = _regexCode.Replace(text, "$1");
return text;
}
#endregion
}