private void Substitute(int indent, string sName, string dName, IDictionary<string, string> partials)
{
Boolean needsCancelOff = false;
String key = "";
String value = "";
String lines = "";
int lineNumber = 1;
Boolean hasError = false;
String comment = "";
StreamReader sr = File.OpenText(sName);
try
{
string line = sr.ReadLine();
while (line != null)
{
String aline = line.Trim();
if (aline.StartsWith("<!--"))
{
//错误
if (!aline.EndsWith("-->"))
{
Log(indent+1, String.Format("行号:{0} 错误:注释未结束。", new object[] { lineNumber }));
hasError = true;
break;
}
else
{
if (!needsCancelOff)
{
needsCancelOff = true;
key = aline.Substring(4, aline.Length - 7).Trim();
if (key.StartsWith("/"))
{
Log(indent+1, String.Format("行号:{0} 错误:注释{1}没有匹配的开始注释。", new object[] { lineNumber, key }));
hasError = true;
break;
}
value = "";
comment = line;
}
else
{
String backslashKey = aline.Substring(4, aline.Length - 7).Trim();
if (!("/" + key).Equals(backslashKey))
{
Log(indent+1, String.Format("行号:{0} 错误:注释{1}没有匹配的结束注释,注释{2}没有匹配的开始注释。", new object[] { lineNumber, key, backslashKey }));
hasError = true;
break;
}
needsCancelOff = false;
Log("----------------------------------------------------");
Log(indent+1, String.Format("发现注释项:" + key));
if (partials.Keys.Contains(key))
{
lines = lines + Environment.NewLine + comment + Environment.NewLine + partials[key] + Environment.NewLine + line;
Log(indent + 1, String.Format("替换注释项:" + key));
Log("----------------------------------------------------");
}
else
lines = lines + Environment.NewLine + comment + Environment.NewLine + value + Environment.NewLine + line;
}
}
}
else
{
if (needsCancelOff)
value = value + Environment.NewLine + line;
else
lines = lines + Environment.NewLine + line;
}
lineNumber++;
line = sr.ReadLine();
}
//still needs cancel off, no matching closing comment
if (needsCancelOff)
{
Log(indent+1, String.Format("行号:{0} 错误:注释{1}没有匹配的结束注释。", new object[] { lineNumber, key }));
hasError = true;
}
if(!hasError)
{
WriteFile(dName, lines);
}
}
finally
{
sr.Close();
}
}