Exemplo n.º 1
0
		public static void Format (TextEditorData data, IType type, IMember member, ProjectDom dom, ICompilationUnit unit, DomLocation caretLocation)
		{
			if (type == null)
				return;
			if (member == null) {
				//				member = type;
				return;
			}
			string wrapper;
			int endPos;
			wrapper = CreateWrapperClassForMember (member, member != type, data, out endPos);
			if (string.IsNullOrEmpty (wrapper) || endPos < 0)
				return;
		//			Console.WriteLine (wrapper);
			
			int bracketIndex = wrapper.IndexOf ('{') + 1;
			int col = GetColumn (wrapper, bracketIndex, data.Options.TabSize);
			
			CSharpFormatter formatter = new CSharpFormatter ();
			formatter.startIndentLevel = System.Math.Max (0, col / data.Options.TabSize - 1);
			
			string formattedText = formatter.InternalFormat (dom != null && dom.Project != null ? dom.Project.Policies : null, MimeType, wrapper, 0, wrapper.Length);
			
			if (formatter.hasErrors)
				return;
			
			int startPos = data.Document.LocationToOffset (member.Location.Line, 1) - 1;
			InFormat = true;
			if (member != type) {
				int len1 = formattedText.IndexOf ('{') + 1;
				int last = formattedText.LastIndexOf ('}');
				formattedText = formattedText.Substring (len1, last - len1 - 1).TrimStart ('\n', '\r');
			} else {
				startPos++;
			}
			
			//Console.WriteLine ("formattedText0:" + formattedText.Replace ("\t", "->").Replace (" ", "°"));
			if (member != type) {
				string indentToRemove = GetIndent (formattedText);
		//				Console.WriteLine ("Remove:" + indentToRemove.Replace ("\t", "->").Replace (" ", "°"));
				formattedText = RemoveIndent (formattedText, indentToRemove);
			} else {
				formattedText = formattedText.TrimStart ();
			}
			//Console.WriteLine ("Indent:" + GetIndent (data, member.Location.Line - 1).Replace ("\t", "->").Replace (" ", "°"));
			//Console.WriteLine ("formattedText1:" + formattedText.Replace ("\t", "->").Replace (" ", "°"));
			formattedText = AddIndent (formattedText, GetIndent (data, member.Location.Line));
			
			Document doc = new Document ();
			doc.Text = formattedText;
			for (int i = doc.LineCount; i --> DocumentLocation.MinLine;) {
				LineSegment lineSegment = doc.GetLine (i);
				if (doc.IsEmptyLine (lineSegment))
					((IBuffer)doc).Remove (lineSegment.Offset, lineSegment.Length);
			}
			formattedText = doc.Text;
			
			//Console.WriteLine ("formattedText3:" + formattedText.Replace ("\t", "->").Replace (" ", "°").Replace ("\n", "\\n").Replace ("\r", "\\r"));
	
			int textLength = CanInsertFormattedText (data, startPos, data.Document.LocationToOffset (caretLocation.Line, caretLocation.Column), formattedText);
			if (textLength > 0) {
//				Console.WriteLine (formattedText.Substring (0, textLength));
				InsertFormattedText (data, startPos, formattedText.Substring (0, textLength).TrimEnd ());
			} else {
				Console.WriteLine ("Can't insert !!!");
			}
			InFormat = false;
		}
Exemplo n.º 2
0
        public static void Format(TextEditorData data, IType type, IMember member, ProjectDom dom, ICompilationUnit unit, DomLocation caretLocation)
        {
            if (type == null)
            {
                return;
            }
            if (member == null)
            {
                //				member = type;
                return;
            }
            string wrapper;
            int    endPos;

            wrapper = CreateWrapperClassForMember(member, member != type, data, out endPos);
            if (string.IsNullOrEmpty(wrapper) || endPos < 0)
            {
                return;
            }
            //			Console.WriteLine (wrapper);

            int bracketIndex = wrapper.IndexOf('{') + 1;
            int col          = GetColumn(wrapper, bracketIndex, data.Options.TabSize);

            CSharpFormatter formatter = new CSharpFormatter();

            formatter.startIndentLevel = System.Math.Max(0, col / data.Options.TabSize - 1);

            string formattedText = formatter.InternalFormat(dom != null && dom.Project != null ? dom.Project.Policies : null, MimeType, wrapper, 0, wrapper.Length);

            if (formatter.hasErrors)
            {
                return;
            }

            int startPos = data.Document.LocationToOffset(member.Location.Line - 1, 0) - 1;

            InFormat = true;
            if (member != type)
            {
                int len1 = formattedText.IndexOf('{') + 1;
                int last = formattedText.LastIndexOf('}');
                formattedText = formattedText.Substring(len1, last - len1 - 1).TrimStart('\n', '\r');
            }
            else
            {
                startPos++;
            }

            //Console.WriteLine ("formattedText0:" + formattedText.Replace ("\t", "->").Replace (" ", "°"));
            if (member != type)
            {
                string indentToRemove = GetIndent(formattedText);
                //				Console.WriteLine ("Remove:" + indentToRemove.Replace ("\t", "->").Replace (" ", "°"));
                formattedText = RemoveIndent(formattedText, indentToRemove);
            }
            else
            {
                formattedText = formattedText.TrimStart();
            }
            //Console.WriteLine ("Indent:" + GetIndent (data, member.Location.Line - 1).Replace ("\t", "->").Replace (" ", "°"));
            //Console.WriteLine ("formattedText1:" + formattedText.Replace ("\t", "->").Replace (" ", "°"));
            formattedText = AddIndent(formattedText, GetIndent(data, member.Location.Line - 1));

            Document doc = new Document();

            doc.Text = formattedText;
            for (int i = doc.LineCount - 1; i >= 0; i--)
            {
                LineSegment lineSegment = doc.GetLine(i);
                if (doc.IsEmptyLine(lineSegment))
                {
                    ((IBuffer)doc).Remove(lineSegment.Offset, lineSegment.Length);
                }
            }
            formattedText = doc.Text;

            //Console.WriteLine ("formattedText3:" + formattedText.Replace ("\t", "->").Replace (" ", "°").Replace ("\n", "\\n").Replace ("\r", "\\r"));

            int textLength = CanInsertFormattedText(data, startPos, data.Document.LocationToOffset(caretLocation.Line, caretLocation.Column), formattedText);

            if (textLength > 0)
            {
//				Console.WriteLine (formattedText.Substring (0, textLength));
                InsertFormattedText(data, startPos, formattedText.Substring(0, textLength).TrimEnd());
            }
            else
            {
                Console.WriteLine("Can't insert !!!");
            }
            InFormat = false;
        }