BeforeBuild.Substitution.Substitute C# (CSharp) Method

Substitute() private method

private Substitute ( int indent, string sName, string dName, string>.IDictionary partials ) : void
indent int
sName string
dName string
partials string>.IDictionary
return void
        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();
            }
        }