コード例 #1
0
        static string StripHeaderAndBlankLines(string text, CodeDomProvider provider)
        {
            Mono.TextEditor.Document doc = new Mono.TextEditor.Document();
            doc.Text = text;
            int realStartLine = 0;

            for (int i = 0; i < doc.LineCount; i++)
            {
                var lineSegment = doc.GetLine(i);
                if (lineSegment == null)
                {
                    continue;
                }
                string lineText = doc.GetTextAt(lineSegment);
                // Microsoft.NET generates "auto-generated" tags where Mono generates "autogenerated" tags.
                if (lineText.Contains("</autofgenerated>") || lineText.Contains("</auto-generated>"))
                {
                    realStartLine = i + 2;
                    break;
                }
            }

            // The Mono provider inserts additional blank lines, so strip them out
            // But blank lines might actually be significant in other languages.
            // We reformat the C# generated output to the user's coding style anyway, but the reformatter preserves blank lines
            if (provider is Microsoft.CSharp.CSharpCodeProvider)
            {
                bool previousWasBlank = false;
                for (int i = 0; i < doc.LineCount; i++)
                {
                    Mono.TextEditor.LineSegment line = doc.GetLine(i);
                    bool isBlank, isBracket;
                    CheckLine(doc, line, out isBlank, out isBracket);
                    if (isBlank && previousWasBlank && line.Length > 0)
                    {
                        ((Mono.TextEditor.IBuffer)doc).Remove(line.Offset, line.Length);
                        i--;
                    }
                    previousWasBlank = isBlank || isBracket;
                }
            }

            int offset = doc.GetLine(realStartLine).Offset;

            return(doc.GetTextAt(offset, doc.Length - offset));
        }
コード例 #2
0
        // Returns a stream with the content of the file.
        // project and language parameters are optional
        public virtual Stream CreateFileContent(SolutionItem policyParent, Project project, string language, string fileName, string identifier)
        {
            Dictionary <string, string> tags = new Dictionary <string, string> ();

            ModifyTags(policyParent, project, language, identifier, fileName, ref tags);

            string content = CreateContent(project, tags, language);

            content = StringParserService.Parse(content, tags);
            string        mime      = DesktopService.GetMimeTypeForUri(fileName);
            CodeFormatter formatter = !string.IsNullOrEmpty(mime) ? CodeFormatterService.GetFormatter(mime) : null;

            if (formatter != null)
            {
                var formatted = formatter.FormatText(policyParent != null ? policyParent.Policies : null, content);
                if (formatted != null)
                {
                    content = formatted;
                }
            }

            MemoryStream ms = new MemoryStream();

            byte[] data;
            if (AddStandardHeader)
            {
                string header = StandardHeaderService.GetHeader(policyParent, fileName, true);
                data = System.Text.Encoding.UTF8.GetBytes(header);
                ms.Write(data, 0, data.Length);
            }

            Mono.TextEditor.Document doc = new Mono.TextEditor.Document();
            doc.Text = content;

            TextStylePolicy textPolicy = policyParent != null?policyParent.Policies.Get <TextStylePolicy> ("text/plain")
                                             : MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy <TextStylePolicy> ("text/plain");

            string eolMarker = TextStylePolicy.GetEolMarker(textPolicy.EolMarker);

            byte[] eolMarkerBytes = System.Text.Encoding.UTF8.GetBytes(eolMarker);

            var tabToSpaces = textPolicy.TabsToSpaces? new string (' ', textPolicy.TabWidth) : null;

            foreach (Mono.TextEditor.LineSegment line in doc.Lines)
            {
                var lineText = doc.GetTextAt(line.Offset, line.EditableLength);
                if (tabToSpaces != null)
                {
                    lineText = lineText.Replace("\t", tabToSpaces);
                }
                data = System.Text.Encoding.UTF8.GetBytes(lineText);
                ms.Write(data, 0, data.Length);
                ms.Write(eolMarkerBytes, 0, eolMarkerBytes.Length);
            }

            ms.Position = 0;
            return(ms);
        }
コード例 #3
0
        internal static string CreateWrapperClassForMember(IMember member, string fileName, TextEditor editor)
        {
            if (member == null)
            {
                return("");
            }
            StringBuilder result    = new StringBuilder();
            int           startLine = member.Location.Line;
            int           endLine   = member.Location.Line;

            if (!member.BodyRegion.IsEmpty)
            {
                endLine = member.BodyRegion.End.Line + 1;
            }

            string text;

            result.Append("class " + member.DeclaringType.Name + " {");
            if (editor != null)
            {
                int col, maxLine;
                editor.GetLineColumnFromPosition(editor.TextLength - 1, out col, out maxLine);
                endLine = System.Math.Max(endLine, maxLine);

                int endPos = editor.GetPositionFromLineColumn(endLine, editor.GetLineLength(endLine));
                if (endPos < 0)
                {
                    endPos = editor.TextLength;
                }
                int startPos = Math.Max(0, editor.GetPositionFromLineColumn(startLine, 0));
                text = editor.GetText(startPos, endPos);
            }
            else
            {
                Mono.TextEditor.Document doc = new Mono.TextEditor.Document();
                doc.Text  = File.ReadAllText(fileName) ?? "";
                startLine = Math.Min(doc.LineCount, Math.Max(1, startLine));
                endLine   = Math.Min(doc.LineCount, Math.Max(1, endLine));
                int startOffset = doc.LocationToOffset(startLine - 1, 0);
                text = doc.GetTextAt(startOffset, doc.LocationToOffset(endLine - 1, doc.GetLine(endLine - 1).EditableLength) - startOffset);
            }
            if (!string.IsNullOrEmpty(text))
            {
                result.Append(text);
            }
            result.Append("}");

            return(result.ToString());
        }
コード例 #4
0
		public void GoToDeclaration ()
		{
			if (item is CompoundType) {
				CompoundType compoundType = (CompoundType)item;
				monitor = IdeApp.Workbench.ProgressMonitors.GetSearchProgressMonitor (true, true);
				using (monitor) {
					foreach (IType part in compoundType.Parts) {
						FileProvider provider = new FileProvider (part.CompilationUnit.FileName);
						Mono.TextEditor.Document doc = new Mono.TextEditor.Document ();
						System.IO.TextReader textReader = provider.Open ();
						doc.Text = textReader.ReadToEnd ();
						textReader.Close ();
						int position = doc.LocationToOffset (part.Location.Line, part.Location.Column);
						while (position + part.Name.Length < doc.Length) {
							if (doc.GetTextAt (position, part.Name.Length) == part.Name)
								break;
							position++;
						}
						monitor.ReportResult (new MonoDevelop.Ide.FindInFiles.SearchResult (provider, position, part.Name.Length));
					}
					
				}
				
				return;
			}
			IdeApp.ProjectOperations.JumpToDeclaration (item);
		}
コード例 #5
0
		static string StripHeaderAndBlankLines (string text, CodeDomProvider provider)
		{
			Mono.TextEditor.Document doc = new Mono.TextEditor.Document ();
			doc.Text = text;
			int realStartLine = 0;
			for (int i = 1; i <= doc.LineCount; i++) {
				string lineText = doc.GetTextAt (doc.GetLine (i));
				// Microsoft.NET generates "auto-generated" tags where Mono generates "autogenerated" tags.
				if (lineText.Contains ("</autogenerated>") || lineText.Contains ("</auto-generated>")) {
					realStartLine = i + 2;
					break;
				}
			}
			
			// The Mono provider inserts additional blank lines, so strip them out
			// But blank lines might actually be significant in other languages.
			// We reformat the C# generated output to the user's coding style anyway, but the reformatter preserves blank lines
			if (provider is Microsoft.CSharp.CSharpCodeProvider) {
				bool previousWasBlank = false;
				for (int i = 1; i <= doc.LineCount; i++) {
					Mono.TextEditor.LineSegment line = doc.GetLine (i);
					bool isBlank, isBracket;
					CheckLine (doc, line, out isBlank, out isBracket);
					if (isBlank && previousWasBlank && line.Length > 0) {
						((Mono.TextEditor.IBuffer)doc).Remove (line.Offset, line.Length);
						i--;
					}
					previousWasBlank = isBlank || isBracket;
				}
			}
			
			int offset = doc.GetLine (realStartLine).Offset;
			return doc.GetTextAt (offset, doc.Length - offset);
		}
		// Returns a stream with the content of the file.
		// project and language parameters are optional
		public virtual Stream CreateFileContent (SolutionItem policyParent, Project project, string language, string fileName)
		{
			Dictionary<string, string> tags = new Dictionary<string, string> ();
			ModifyTags (policyParent, project, language, null, fileName, ref tags);
			
			string content = CreateContent (project, tags, language);
			content = StringParserService.Parse (content, tags);
			string mime = DesktopService.GetMimeTypeForUri (fileName);
			Formatter formatter = !String.IsNullOrEmpty (mime) ? TextFileService.GetFormatter (mime) : null;
			
			if (formatter != null)
				content = formatter.FormatText (policyParent != null ? policyParent.Policies : null, content);
			
			MemoryStream ms = new MemoryStream ();
			byte[] data;
			if (AddStandardHeader) {
				string header = StandardHeaderService.GetHeader (policyParent, fileName, true);
				data = System.Text.Encoding.UTF8.GetBytes (header);
				ms.Write (data, 0, data.Length);
			}
			
			Mono.TextEditor.Document doc = new Mono.TextEditor.Document ();
			doc.Text = content;
			
			TextStylePolicy textPolicy = policyParent != null ? policyParent.Policies.Get<TextStylePolicy> ("text/plain") : MonoDevelop.Projects.Policies.PolicyService.GetDefaultPolicy<TextStylePolicy> ("text/plain");
			string eolMarker = TextStylePolicy.GetEolMarker (textPolicy.EolMarker);
			byte[] eolMarkerBytes = System.Text.Encoding.UTF8.GetBytes (eolMarker);
			foreach (Mono.TextEditor.LineSegment line in doc.Lines) {
				data = System.Text.Encoding.UTF8.GetBytes (doc.GetTextAt (line.Offset, line.EditableLength));
				ms.Write (data, 0, data.Length);
				ms.Write (eolMarkerBytes, 0, eolMarkerBytes.Length);
			}
			
			ms.Position = 0;
			return ms;
		}
コード例 #7
0
        internal static string CreateWrapperClassForMember(IMember member, string fileName, TextEditor editor)
        {
            if (member == null)
                return "";
            StringBuilder result = new StringBuilder ();
            int startLine = member.Location.Line;
            int endLine   = member.Location.Line;
            if (!member.BodyRegion.IsEmpty)
                endLine = member.BodyRegion.End.Line + 1;
            string text;
            result.Append ("class " + member.DeclaringType.Name + " {");
            if (editor != null) {
                int col, maxLine;
                editor.GetLineColumnFromPosition (editor.TextLength - 1, out col, out maxLine);
                endLine = System.Math.Max (endLine, maxLine);

                int endPos = editor.GetPositionFromLineColumn (endLine, editor.GetLineLength (endLine));
                if (endPos < 0)
                    endPos = editor.TextLength;
                text = editor.GetText (editor.GetPositionFromLineColumn (startLine, 0), endPos);
            } else {
                Mono.TextEditor.Document doc = new Mono.TextEditor.Document ();
                doc.Text = File.ReadAllText (fileName) ?? "";
                startLine = Math.Min (doc.LineCount, Math.Max (1, startLine));
                endLine   = Math.Min (doc.LineCount, Math.Max (1, endLine));
                int startOffset = doc.LocationToOffset (startLine - 1, 0);
                text = doc.GetTextAt (startOffset, doc.LocationToOffset (endLine  - 1, doc.GetLine (endLine - 1).EditableLength) - startOffset);
            }
            if (!string.IsNullOrEmpty (text))
                result.Append (text);
            result.Append ("}");

            return result.ToString ();
        }