/// <summary> /// Process the page in aspFile string. Pagepath is only used for getting included files. /// </summary> /// <param name="pagePath"></param> /// <param name="aspFile"></param> /// <param name="virtualRootPath">Physical path of the virtual root used when this class is used public void processPage(string pagePath, string aspFile, string virtualRootPath) { _virtualRootPath = virtualRootPath; Range[] lineRanges = SourceUtil.GetLineRanges(aspFile); const string pattern = "<%(?<contents>.*?)%>|<!--\\s*#include\\s+(?<contents>.*?)\\s*-->|<script[^>]+runat=\"?server\"?[^>]*>(?<contents>.*?)</script>"; Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection ms = r.Matches(aspFile); int p1 = 0; int p2 = 0; foreach (Match m in ms) { p2 = m.Index; if (p2 - p1 > 0) { appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, p1, p2 - 1), GetListeral(aspFile, p1, p2), 1); } p1 = m.Index + m.Length; string value = m.Value; string contents = m.Groups["contents"].Value; switch (value.Substring(0, 3)) { case "<!-": //Include processInclude(pagePath, contents.ToLower(), SourceUtil.GetSpan(lineRanges, m.Index, p1 - 1), value); break; case "<%@": //Declaration. Ignore break; default: string temp = contents.Trim(); if (!string.IsNullOrEmpty(temp)) { if (temp[0] == '=') //Expression { contents = "@Html.Raw(" + temp.Substring(1).Trim() + ")"; //string.Format("response.Write({0})", temp.Substring(1).Trim()); appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, m.Index, p1 - 1), contents, 1); } else { if (ProcessCode != null) { contents = ProcessCode(contents); } var preceeding = m.Index > 0 ? aspFile.Substring(m.Index - 1, 1) : " "; var codePrefix = (Regex.IsMatch(preceeding, @"\s|[>='\""]") ? "" : " ") + "@Code"; if (!contents.StartsWith(" ")) { codePrefix += " "; } contents = codePrefix + contents; if (!contents.EndsWith("\n") && !contents.EndsWith(" ")) { contents += " "; } contents += "End Code"; var nextChar = m.Index + m.Length; var following = nextChar < aspFile.Length ? aspFile.Substring(m.Index + m.Length, 1) : " "; contents += (Regex.IsMatch(following, @"\s|['\""&<]") ? "" : " "); appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, m.Index, p1 - 1), contents, SourceUtil.GetLineCount(contents)); } } break; } } p2 = aspFile.Length; if (p2 - p1 > 0) { appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, p1, p2 - 1), GetListeral(aspFile, p1, p2), 1); } }
/// <summary> /// Process the page in aspFile string. Pagepath is only used for getting included files. /// </summary> /// <param name="pagePath"></param> /// <param name="aspFile"></param> /// <param name="virtualRootPath">Physical path of the virtual root used when this class is used public void processPage(string pagePath, string aspFile, string virtualRootPath) { _virtualRootPath = virtualRootPath; Range[] lineRanges = SourceUtil.GetLineRanges(aspFile); const string pattern = "<%(?<contents>.*?)%>|<!--\\s*#include\\s+(?<contents>.*?)\\s*-->|<script[^>]+runat=\"?server\"?[^>]*>(?<contents>.*?)</script>"; Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline); MatchCollection ms = r.Matches(aspFile); int p1 = 0; int p2 = 0; foreach (Match m in ms) { p2 = m.Index; if (p2 - p1 > 0) { appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, p1, p2 - 1), GetListeral(aspFile, p1, p2), 1); } p1 = m.Index + m.Length; string value = m.Value; string contents = m.Groups["contents"].Value; switch (value.Substring(0, 3)) { case "<!-": //Include processInclude(pagePath, contents.ToLower()); break; case "<%@": //Declaration. Ignore break; default: string temp = contents.Trim(); if (!string.IsNullOrEmpty(temp)) { if (temp[0] == '=') //Expression { contents = string.Format("response.Write({0})", temp.Substring(1).Trim()); appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, m.Index, p1 - 1), contents, 1); } else { appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, m.Index, p1 - 1), contents, SourceUtil.GetLineCount(contents)); } } break; } } p2 = aspFile.Length; if (p2 - p1 > 0) { appendBlock(pagePath, SourceUtil.GetSpan(lineRanges, p1, p2 - 1), GetListeral(aspFile, p1, p2), 1); } }