/// <summary> /// 转换标签 /// </summary> /// <param name="nest">深度</param> /// <param name="channelName">频道名称</param> /// <param name="sitePath">站点目录</param> /// <param name="skinName">模板名称</param> /// <param name="inputStr">模板内容</param> /// <returns></returns> private static string ConvertTags(int nest, string channelName, string pageSize, string sitePath, string tempPath, string skinName, string inputStr) { string strReturn = ""; string strTemplate = string.Empty; strTemplate = inputStr.Replace("\\", "\\\\"); strTemplate = strTemplate.Replace("\"", "\\\""); strTemplate = strTemplate.Replace("</script>", "</\");\r\n\ttemplateBuilder.Append(\"script>"); bool IsCodeLine = false; #region 解析嵌套标签====================================================OK foreach (Match m in r[0].Matches(strTemplate)) { IsCodeLine = true; if (m.Groups[3].ToString() != string.Empty) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n" + GetTemplate(sitePath, "templates", m.Groups[3].ToString(), m.Groups[4].ToString(), string.Empty, string.Empty, string.Empty, channelName, pageSize, nest + 1) + "\r\n"); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n" + GetTemplate(sitePath, tempPath, skinName, m.Groups[4].ToString(), string.Empty, string.Empty, string.Empty, channelName, pageSize, nest + 1) + "\r\n"); } } #endregion #region 解析模板路径标签================================================OK foreach (Match m in r[1].Matches(strTemplate)) { //IsCodeLine = true; if (m.Groups[3].ToString() != string.Empty) { //strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\ttemplateBuilder.Append(\"{0}{1}/{2}\");", sitePath, "templates", m.Groups[3].ToString())); strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("{0}{1}/{2}", sitePath, "templates", m.Groups[3].ToString())); } else { //strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\ttemplateBuilder.Append(\"{0}{1}/{2}\");", sitePath, tempPath, skinName)); strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("{0}{1}/{2}", sitePath, tempPath, skinName)); } } #endregion #region 解析csharp标签==================================================OK foreach (Match m in r[3].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), m.Groups[1].ToString().Replace("\r\t\r", "\r\n\t").Replace("\\\"", "\"")); } #endregion #region 解析loop标签====================================================OK foreach (Match m in r[4].Matches(strTemplate)) { IsCodeLine = true; if (m.Groups[3].ToString() == "") { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\tint {0}__loop__id=0;\r\n\tforeach(DataRow {0} in {1}.Rows)\r\n\t{{\r\n\t\t{0}__loop__id++;\r\n", m.Groups[4], m.Groups[5])); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\tint {1}__loop__id=0;\r\n\tforeach({0} {1} in {2})\r\n\t{{\r\n\t\t{1}__loop__id++;\r\n", m.Groups[3], m.Groups[4], m.Groups[5])); } } #endregion #region 解析foreach标签=================================================OK foreach (Match m in r[5].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\tforeach({0} {1} in {2})\r\n\t{{", m.Groups[1], m.Groups[2], m.Groups[3])); } #endregion #region 解析for标签=====================================================OK foreach (Match m in r[6].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\tfor({0})\r\n\t{{", m.Groups[1])); } #endregion #region 解译判断语句if==================================================OK foreach (Match m in r[7].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\tif (" + m.Groups[1].ToString().Replace("\\\"", "\"") + ")\r\n\t{"); } foreach (Match m in r[8].Matches(strTemplate)) { IsCodeLine = true; if (m.Groups[1].ToString() == string.Empty) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\t}\r\n\telse\r\n\t{"); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\t}\r\n\telse if (" + m.Groups[3].ToString().Replace("\\\"", "\"") + ")\r\n\t{"); } } foreach (Match m in r[9].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\tif (" + m.Groups[1].ToString().Replace("\\\"", "\"") + ")\r\n\t{"); } foreach (Match m in r[10].Matches(strTemplate)) { IsCodeLine = true; if (m.Groups[1].ToString() == string.Empty) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\t}\r\n\telse\r\n\t{"); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\t}\r\n\telse if (" + m.Groups[3].ToString().Replace("\\\"", "\"") + ")\r\n\t{"); } } #endregion #region 解析循环判断结束标签============================================OK foreach (Match m in r[11].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\r\n\t}\t//end for if"); } #endregion #region 解析continue,break标签==========================================OK foreach (Match m in r[12].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\tcontinue;\r\n"); } foreach (Match m in r[13].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "\tbreak;\r\n"); } #endregion #region 解析截取字符串标签==============================================OK foreach (Match m in r[15].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\ttemplateBuilder.Append(Utils.DropHTML({0},{1}));", m.Groups[2], m.Groups[3].ToString().Trim())); } #endregion #region 解析时间格式转换================================================OK foreach (Match m in r[20].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\ttemplateBuilder.Append(Utils.ObjectToDateTime({0}).ToString(\"{1}\"));", m.Groups[2], m.Groups[3].ToString().Replace("\\\"", string.Empty))); } #endregion #region 字符串转换整型==================================================OK foreach (Match m in r[21].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "Utils.StrToInt(" + m.Groups[2] + ", 0)"); } #endregion #region 解析url链接标签=================================================OK foreach (Match m in r[16].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\ttemplateBuilder.Append(linkurl({0}));", m.Groups[2]).Replace("\\\"", "\"")); } #endregion #region 解析赋值标签====================================================OK foreach (Match m in r[17].Matches(strTemplate)) { IsCodeLine = true; string type = ""; if (m.Groups[3].ToString() != string.Empty) { type = m.Groups[3].ToString(); } strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\t{0} {1} = {2};", type, m.Groups[4], m.Groups[5]).Replace("\\\"", "\"")); } #endregion #region 解析request标签=================================================OK foreach (Match m in r[14].Matches(strTemplate)) { if (IsCodeLine) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "DTRequest.GetString(\"" + m.Groups[2] + "\")"); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\" + DTRequest.GetString(\"{0}\") + \"", m.Groups[2])); } } #endregion #region 解析直接输出标签================================================OK foreach (Match m in r[22].Matches(strTemplate)) { IsCodeLine = true; strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\r\n\ttemplateBuilder.Append({0}{1}.ToString());", m.Groups[1], m.Groups[2]).Replace("\\\"", "\"")); } #endregion #region 解析数据变量标签================================================OK foreach (Match m in r[18].Matches(strTemplate)) { if (IsCodeLine) { if (Utils.IsNumeric(m.Groups[3].ToString())) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "Utils.ObjectToStr(" + m.Groups[2] + "[" + m.Groups[3] + "])"); } else { if (m.Groups[3].ToString() == "_id") { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), m.Groups[2] + "__loop__id"); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), "Utils.ObjectToStr(" + m.Groups[2] + "[\"" + m.Groups[3] + "\"])"); } } } else { if (Utils.IsNumeric(m.Groups[3].ToString())) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\" + Utils.ObjectToStr({0}[{1}]) + \"", m.Groups[2], m.Groups[3])); } else { if (m.Groups[3].ToString() == "_id") { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\" + {0}__loop__id.ToString() + \"", m.Groups[2])); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\" + Utils.ObjectToStr({0}[\"{1}\"]) + \"", m.Groups[2], m.Groups[3])); } } } } #endregion #region 解析普通变量标签================================================OK foreach (Match m in r[19].Matches(strTemplate)) { if (IsCodeLine) { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), m.Groups[2].ToString()); } else { strTemplate = strTemplate.Replace(m.Groups[0].ToString(), string.Format("\");\r\n\ttemplateBuilder.Append(Utils.ObjectToStr({0}));\r\n\ttemplateBuilder.Append(\"", m.Groups[2].ToString().Trim())); } } #endregion #region 最后处理========================================================OK if (IsCodeLine) { strReturn = strTemplate + "\r\n"; } else { if (strTemplate.Trim() != "") { strReturn = "\r\n\ttemplateBuilder.Append(\"" + strTemplate.Replace("\r\r\r", "\\r\\n") + "\");"; strReturn = strReturn.Replace("\\r\\n<?xml", "<?xml"); strReturn = strReturn.Replace("\\r\\n<!DOCTYPE", "<!DOCTYPE"); } } #endregion return(strReturn); }