//�ΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡ������ȡ���� public SignedFoldingCodes[] GetPackage(string packageName, SignedFoldingCodes mainCode) { ArrayList packageList = new ArrayList(); packageList.Add(mainCode); int[] arrIndex = m_arrIndex.Clone() as int[]; int[] arrLevel = m_arrLevel.Clone() as int[]; string str = m_stText; string stPreFix = "package " + packageName + "{\r\n"; string stPostFix = "\r\n}"; for (int i = 0; i < arrIndex.Length; i++) { int index = arrIndex[i]; int indexClass = str.LastIndexOf("class ", index); int indexInterface = str.LastIndexOf("interface ", index); if (indexClass > -1 || indexInterface > -1) { int indexStart = str.LastIndexOf("\r\n", index); if (indexStart == -1) indexStart = 0; int level = arrLevel[i]; i++; while (arrLevel[i] > level) { if (i < arrLevel.Length - 1) i++; else break; } int length = arrIndex[i] - indexStart + 1; string strPackage = str.Substring(indexStart, length); str = str.Remove(indexStart, length); for (int j = i; j < arrIndex.Length; j++) { arrIndex[j] = arrIndex[j] - length; } packageList.Add(new SignedFoldingCodes(stPreFix + strPackage + stPostFix)); } } if (str.IndexOf(";") > -1 || str.IndexOf("=") > -1 || str.IndexOf("function ") > -1) packageList.Add(new SignedFoldingCodes(stPreFix + str + stPostFix)); return packageList.ToArray(typeof(SignedFoldingCodes)) as SignedFoldingCodes[]; }
//�ΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡ��ĵ����ɺ��� public void MakeDocument(bool useTemplate) { if (Directory.Exists(m_stAsPath)) { DirectoryInfo folder = new DirectoryInfo(m_stAsPath); FileInfo[] arrFiles = folder.GetFiles("*.as", SearchOption.AllDirectories); int count = arrFiles.Length; ArrayList arrClasses = new ArrayList(); for (int i = 0; i < arrFiles.Length; i++) { FileInfo file = arrFiles[i]; FileStream fs = new FileStream(file.FullName, FileMode.Open); StreamReader sr = new StreamReader(fs); string text = sr.ReadToEnd(); SignedFoldingCodes code = new SignedFoldingCodes(text); SignedFoldingCodes[] codeList = code.split(); for (int j = 0; j < codeList.Length; j++) { code = codeList[j]; string packageName = code.PackageName; string packagePath = packageName.Replace(".", "\\"); string path = m_stTargetPath + "\\"; if (useTemplate) path = m_stTemplatePath + "\\"; if (packagePath != "") path += packagePath + "\\"; string className = "_toplevel"; bool useAppend = true; if (code.ClassName != null) { useAppend = false; className = code.ClassName; } bool isNewClass = makeTemplate(path, className, code, !useTemplate, useAppend); if (isNewClass) { if (packageName == "") arrClasses.Add(className); else arrClasses.Add(packageName.Replace(".", "/") + "/" + className); } else count--; if (j > 0) count++; } sr.Close(); fs.Close(); } string info = arrFiles.Length.ToString() + " fiels to " + count.ToString(); if (useTemplate) info += " saved "; else { info += " maked "; FileStream fs = new FileStream(m_stTargetPath + "\\" + ClassList_name, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.Write(m_stXmlStart + ">"); for (int i = 0; i < arrClasses.Count; i++) { sw.WriteLine(ClassList_start + arrClasses[i] + Xml_end); } sw.Write(m_stXmlEnd); sw.Close(); fs.Close(); } ErrorBox.Show(info, "DocumentDataMakerError"); } }
//�ΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡ���ʱ�ļ����� private bool makeTemplate(string path, string className, SignedFoldingCodes code, bool useXml, bool useAppend) { bool isNewClass = true; if (!Directory.Exists(path)) Directory.CreateDirectory(path); if (useXml) path += className + ".xhtml"; else path += className + ".as"; string strCode = code.clearClass(); if (code.HasClass()) strCode = code.clearFunction(); if (useXml) strCode = GetMemberList(strCode, className, code.IsClass()); if (useAppend) { FileStream fs = new FileStream(path, FileMode.OpenOrCreate); StreamReader sr = new StreamReader(fs); string savedStr = sr.ReadToEnd(); string startStr = "{"; string endStr = "}"; if (useXml) { startStr = m_stXmlStart; endStr = m_stXmlEnd; } string[] segMent = SignedFoldingCodes.GetInsertPos(savedStr, true, startStr, endStr); if (useXml) { //��ȡ��������ǰ�˷ָ��,��ΪHxmlģʽ����Ҫ���� startStr = ">"; } string mainCode = SignedFoldingCodes.GetMainString(strCode, startStr, endStr, RootConfig.HxmlDataStart); if (savedStr.Length > 0) { if (savedStr.IndexOf(mainCode) == -1) { string insertSign = "//>>\r\n"; if (useXml) insertSign = RootConfig.Xml_tabStop + "<!--Separator-->\r\n"; strCode = segMent[0] + insertSign + mainCode + segMent[1]; isNewClass = false; } } sr.Close(); fs.Close(); } FileStream saver = new FileStream(path, FileMode.Create); StreamWriter sw = new StreamWriter(saver); sw.Write(strCode); sw.Close(); saver.Close(); return isNewClass; }
//�ΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡΡ�������뺯�� public SignedFoldingCodes[] split() { int count = 0; for (int i = 0; i < m_arrIndex.Length; i++) { int level = m_arrLevel[i]; if (level == 0) { count++; if (count == 3) { int index = m_arrIndex[i - 1] + 1; string mainCode = m_stText.Substring(0, index); SignedFoldingCodes outPackage = new SignedFoldingCodes(m_stText.Substring(index)); return outPackage.GetPackage(this.PackageName, new SignedFoldingCodes(mainCode)); } } } return new SignedFoldingCodes[] { this }; }