public LanguageItemWindow (ILanguageItem item, IParserContext ctx, Ambience ambience,
		                           string errorInformations) : base (WindowType.Popup)
		{
			Name = "gtk-tooltips";
			
			// Approximate value for usual case
			StringBuilder s = new StringBuilder(150);
			
			if (item != null) {
				if (item is IParameter) {
					s.Append ("<small><i>");
					s.Append (paramStr);
					s.Append ("</i></small>\n");
					s.Append (ambience.Convert ((IParameter)item, WindowConversionFlags));
				} else if (item is LocalVariable) {
					s.Append ("<small><i>");
					s.Append (localStr);
					s.Append ("</i></small>\n");
					s.Append (ambience.Convert ((LocalVariable)item, WindowConversionFlags));
				} else if (item is IField) {				
					s.Append ("<small><i>");
					s.Append (fieldStr);
					s.Append ("</i></small>\n");
					s.Append (ambience.Convert ((IField)item, WindowConversionFlags));
				} else if (item is IProperty) {				
					s.Append ("<small><i>");
					s.Append (propertyStr);
					s.Append ("</i></small>\n");
					s.Append (ambience.Convert ((IProperty)item, WindowConversionFlags));
				} else if (item is Namespace) {
					s.Append ("namespace <b>");
					s.Append (item.Name);
					s.Append ("</b>");
				} else
					s.Append (ambience.Convert (item, WindowConversionFlags));
				
				string doc = GetDocumentation (item.Documentation).Trim ('\n');
				if (!string.IsNullOrEmpty (doc)) {
					s.Append ("\n<small>");
					s.Append (doc);
					s.Append ("</small>");
				}
			}			
			
			if (!string.IsNullOrEmpty (errorInformations)) {
				if (s.Length != 0)
					s.Append ("\n\n");
				s.Append ("<small>");
				s.Append (errorInformations);
				s.Append ("</small>");
			}
			
			Label lab = new Label ();
			lab.Markup = s.ToString ();
			lab.Xalign = 0;
			lab.Xpad = 3;
			lab.Ypad = 3;
			Add (lab);
		}
        void OutlineTreeTextFunc(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
        {
            CellRendererText txtRenderer = (CellRendererText)cell;
            object           o           = model.GetValue(iter, 0);
            Ambience         am          = GetAmbience();

            if (o is IEntity)
            {
                txtRenderer.Text = am.GetString((IEntity)o, OutputFlags.ClassBrowserEntries);
            }
            else if (o is FoldingRegion)
            {
                string name = ((FoldingRegion)o).Name.Trim();
                if (string.IsNullOrEmpty(name))
                {
                    name = "#region";
                }
                txtRenderer.Text = name;
            }
        }
        string IAssemblyBrowserNodeBuilder.GetDocumentationMarkup(ITreeNavigator navigator)
        {
            var method   = (IUnresolvedMethod)navigator.DataItem;
            var resolved = Resolve(navigator, method);

            if (GetMainAssembly(navigator) == null)
            {
                return(StringTextSource.ReadFrom(method.Region.FileName).Text);
            }
            StringBuilder result = new StringBuilder();

            result.Append("<big>");
            result.Append(MonoDevelop.Ide.TypeSystem.Ambience.EscapeText(Ambience.ConvertSymbol(resolved)));
            result.Append("</big>");
            result.AppendLine();

            //result.Append (AmbienceService.GetDocumentationMarkup (resolved, AmbienceService.GetDocumentation (resolved), options));

            return(result.ToString());
        }
        string IAssemblyBrowserNodeBuilder.GetDocumentationMarkup(ITreeNavigator navigator)
        {
            DomCecilMethod method = navigator.DataItem as DomCecilMethod;
            StringBuilder  result = new StringBuilder();

            result.Append("<big>");
            result.Append(Ambience.GetString(method, OutputFlags.AssemblyBrowserDescription));
            result.Append("</big>");
            result.AppendLine();

            AmbienceService.DocumentationFormatOptions options = new AmbienceService.DocumentationFormatOptions();
            options.MaxLineLength = -1;
            options.BigHeadings   = true;
            options.Ambience      = Ambience;
            result.AppendLine();

            result.Append(AmbienceService.GetDocumentationMarkup(AmbienceService.GetDocumentation(method), options));

            return(result.ToString());
        }
        string IAssemblyBrowserNodeBuilder.GetDocumentationMarkup(ITreeNavigator navigator)
        {
            var           property = (IUnresolvedProperty)navigator.DataItem;
            var           resolved = Resolve(navigator, property);
            StringBuilder result   = new StringBuilder();

            result.Append("<big>");
            result.Append(Ambience.GetString(resolved, OutputFlags.AssemblyBrowserDescription));
            result.Append("</big>");
            result.AppendLine();

            AmbienceService.DocumentationFormatOptions options = new AmbienceService.DocumentationFormatOptions();
            options.MaxLineLength = -1;
            options.BigHeadings   = true;
            options.Ambience      = Ambience;
            result.AppendLine();

            result.Append(AmbienceService.GetDocumentationMarkup(resolved, AmbienceService.GetDocumentation(resolved), options));

            return(result.ToString());
        }
Beispiel #6
0
 public static void AppendTaggedText(this StringBuilder markup, EditorTheme theme, IEnumerable <TaggedText> text, int col, int maxColumn)
 {
     foreach (var part in text)
     {
         if (part.Tag == TextTags.LineBreak)
         {
             markup.AppendLine();
             col = 0;
             continue;
         }
         if (part.Tag != TextTags.Text)
         {
             markup.Append("<span foreground=\"");
             markup.Append(GetThemeColor(theme, GetThemeColor(part.Tag)));
             markup.Append("\">");
         }
         if (maxColumn >= 0 && col + part.Text.Length > maxColumn)
         {
             AppendAndBreakText(markup, part.Text, col, maxColumn);
             col = 0;
         }
         else
         {
             markup.Append(Ambience.EscapeText(part.Text));
             var lineBreak = part.Text.LastIndexOfAny(new [] { '\n', '\r' });
             if (lineBreak >= 0)
             {
                 col += part.Text.Length - lineBreak;
             }
             else
             {
                 col += part.Text.Length;
             }
         }
         if (part.Tag != TextTags.Text)
         {
             markup.Append("</span>");
         }
     }
 }
Beispiel #7
0
/*		public override void GetNodeAttributes (ITreeNavigator parentNode, object dataObject, ref NodeAttributes attributes)
 *              {
 *                      attributes |= NodeAttributes.UseMarkup;
 *              }
 */
        public override void BuildNode(ITreeBuilder treeBuilder, object dataObject, NodeInfo nodeInfo)
        {
            UnitTest test = dataObject as UnitTest;

            nodeInfo.Icon = test.StatusIcon;

            var title = RemoveGenericArgument(test.Title);

            title = test.Title;
            if (test.Status == TestStatus.Running)
            {
                nodeInfo.Label = Ambience.EscapeText(title);
                return;
            }
            else if (test.Status == TestStatus.Loading)
            {
                nodeInfo.Label = Ambience.EscapeText(title) + GettextCatalog.GetString(" (Loading)");
                return;
            }
            else if (test.Status == TestStatus.LoadError)
            {
                nodeInfo.Label = Ambience.EscapeText(title) + GettextCatalog.GetString(" (Load failed)");
                return;
            }
            else
            {
                nodeInfo.Label = Ambience.EscapeText(title);

                UnitTestResult res = test.GetLastResult();
                if (res != null && treeBuilder.Options ["ShowTestCounters"] && (test is UnitTestGroup))
                {
                    nodeInfo.Label += string.Format(GettextCatalog.GetString(" ({0} passed, {1} failed, {2} not run)"), res.Passed, res.ErrorsAndFailures, res.TestsNotRun);
                }

                if (treeBuilder.Options ["ShowTestTime"])
                {
                    nodeInfo.Label += string.Format("   Time: {0}ms", res.Time.TotalMilliseconds);
                }
            }
        }
Beispiel #8
0
        private void Main_DoUpdate(On.Terraria.Main.orig_DoUpdate orig, Main self, GameTime gameTime)
        {
            GeneralHelpers.ClickHandling();
            GeneralHelpers.UpdateButtons();
            orig(self, gameTime);
            var aLoader = Ambience.Instance;

            Ambience.DoUpdate_Ambience();
            Ambience.UpdateVolume();
            if (Main.gameMenu)
            {
                return;
            }
            Player player = Main.player[Main.myPlayer]?.GetModPlayer <FootstepsPlayer>().player;

            // soundInstancer.Condition = player.ZoneSkyHeight;
            if (Main.hasFocus)
            {
                delta_lastPos_playerBottom = lastPlayerPositionOnGround - player.Bottom.Y;

                // Main.NewText(delta_lastPos_playerBottom);
                if (ModContent.GetInstance <AmbientConfigServer>().newSplashes)
                {
                    if (player.velocity.Y <= 0 || player.teleporting)
                    {
                        lastPlayerPositionOnGround = player.Bottom.Y;
                    }
                    // Main.NewText(player.fallStart - player.Bottom.Y);
                    if (delta_lastPos_playerBottom > -300)
                    {
                        Main.soundSplash[0] = Ambience.SplashNew;
                    }
                    else if (delta_lastPos_playerBottom <= -300)
                    {
                        Main.soundSplash[0] = GetSound($"{Ambience.AmbientPath}/environment/liquid/entity_splash_heavy");
                    }
                }
            }
            Ambience.ClampAll();
        }
Beispiel #9
0
        string IAssemblyBrowserNodeBuilder.GetDecompiledCode(ITreeNavigator navigator)
        {
            IProperty     property = (IProperty)navigator.DataItem;
            StringBuilder result   = new StringBuilder();

            result.Append(DomMethodNodeBuilder.GetAttributes(Ambience, property.Attributes));
            result.Append(Ambience.GetString(property, DomTypeNodeBuilder.settings));
            result.Append("{"); result.AppendLine();
            DomCecilProperty cecilProperty = property as DomCecilProperty;

            if (property.HasGet)
            {
                result.Append("\t");
                if (property.GetterModifier != property.Modifiers)
                {
                    result.Append("<span style=\"keyword.modifier\">");
                    result.Append(Ambience.GetString(property.GetterModifier));
                    result.Append("</span> ");
                }
                result.Append("<b>get</b> {"); result.AppendLine();
                result.Append(DomMethodNodeBuilder.Decompile(cecilProperty.GetMethod as DomCecilMethod, true).Replace("\t", "\t\t"));
                result.Append("\t}"); result.AppendLine();
            }
            if (property.HasSet)
            {
                result.Append("\t");
                if (property.SetterModifier != property.Modifiers)
                {
                    result.Append("<span style=\"keyword.modifier\">");
                    result.Append(Ambience.GetString(property.SetterModifier));
                    result.Append("</span> ");
                }
                result.Append("<b>set</b> {"); result.AppendLine();

                result.Append(DomMethodNodeBuilder.Decompile(cecilProperty.SetMethod as DomCecilMethod, true).Replace("\t", "\t\t"));
                result.Append("\t}"); result.AppendLine();
            }
            result.Append("}");
            return(result.ToString());
        }
Beispiel #10
0
 public static void AppendTaggedText(this StringBuilder markup, EditorTheme theme, IEnumerable <TaggedText> text)
 {
     foreach (var part in text)
     {
         if (part.Tag == TextTags.LineBreak)
         {
             markup.AppendLine();
             continue;
         }
         if (part.Tag != TextTags.Text)
         {
             markup.Append("<span foreground=\"");
             markup.Append(GetThemeColor(theme, GetThemeColor(part.Tag)));
             markup.Append("\">");
         }
         markup.Append(Ambience.EscapeText(part.Text));
         if (part.Tag != TextTags.Text)
         {
             markup.Append("</span>");
         }
     }
 }
        public override string GetDisplayTextMarkup()
        {
            var model = ext.ParsedDocument.GetAst <SemanticModel> ();

            var result = Ambience.EscapeText(SafeMinimalDisplayString(base.Symbol, model, ext.Editor.CaretOffset, Ambience.LabelFormat)) + " {...}";
            var idx    = result.IndexOf(Symbol.Name, StringComparison.Ordinal);

            if (idx >= 0)
            {
                result =
                    result.Substring(0, idx) +
                    "<b>" + Symbol.Name + "</b>" +
                    result.Substring(idx + Symbol.Name.Length);
            }

            if (!afterKeyword)
            {
                result = "partial " + result;
            }

            return(ApplyDiplayFlagsFormatting(result));
        }
Beispiel #12
0
        public string GetDisassembly(ITreeNavigator navigator)
        {
            bool          publicOnly = navigator.Options ["PublicApiOnly"];
            Namespace     ns         = (Namespace)navigator.DataItem;
            StringBuilder result     = new StringBuilder();

            if (!String.IsNullOrEmpty(ns.Name))
            {
                result.Append("<span style=\"keyword.namespace\">namespace</span> ");
                result.Append("<span style=\"text\">");
                result.Append(ns.Name);
                result.Append("</span>");
                result.AppendLine();
                result.Append("<span style=\"text\">{</span>");
                result.AppendLine();
            }
            foreach (IType type in ns.Types)
            {
                if (publicOnly && !type.IsPublic)
                {
                    continue;
                }
                if (!String.IsNullOrEmpty(ns.Name))
                {
                    result.Append("\t");
                }
                result.Append(Ambience.GetString(type, DomTypeNodeBuilder.settings));
                result.AppendLine();
            }
            if (!String.IsNullOrEmpty(ns.Name))
            {
                result.Append("<span style=\"text\">}</span>");
                result.AppendLine();
            }
            return(result.ToString());
        }
        void AddAspAttributeValueCompletionData(CompletionDataList list, XName tagName, XName attName, string id)
        {
            Debug.Assert(tagName.IsValid && tagName.HasPrefix);
            Debug.Assert(attName.IsValid && !attName.HasPrefix);

            INamedTypeSymbol controlClass = refman.GetControlType(tagName.Prefix, tagName.Name);

            if (controlClass == null)
            {
                return;
            }

            //find the codebehind class
            INamedTypeSymbol codeBehindClass;

            GetCodeBehind(out codeBehindClass);

            //if it's an event, suggest compatible methods
            if (codeBehindClass != null && attName.Name.StartsWith("On", StringComparison.Ordinal))
            {
                string eventName = attName.Name.Substring(2);

                foreach (IEventSymbol ev in controlClass.GetAccessibleMembersInThisAndBaseTypes <IEventSymbol> (controlClass))
                {
                    if (ev.Name == eventName)
                    {
                        var domMethod = BindingService.MDDomToCodeDomMethod(ev);
                        if (domMethod == null)
                        {
                            return;
                        }

                        foreach (IMethodSymbol meth
                                 in BindingService.GetCompatibleMethodsInClass(codeBehindClass, ev))
                        {
                            list.Add(meth.Name, "md-method",
                                     GettextCatalog.GetString("A compatible method in the CodeBehind class"));
                        }

                        string suggestedIdentifier = ev.Name;
                        if (id != null)
                        {
                            suggestedIdentifier = id + "_" + suggestedIdentifier;
                        }
                        else
                        {
                            suggestedIdentifier = tagName.Name + "_" + suggestedIdentifier;
                        }

                        domMethod.Name = BindingService.GenerateIdentifierUniqueInClass
                                             (codeBehindClass, suggestedIdentifier);
                        domMethod.Attributes = (domMethod.Attributes & ~System.CodeDom.MemberAttributes.AccessMask)
                                               | System.CodeDom.MemberAttributes.Family;

                        list.Add(
                            new SuggestedHandlerCompletionData(project, domMethod, codeBehindClass,
                                                               CodeBehind.GetNonDesignerClassLocation(codeBehindClass))
                            );
                        return;
                    }
                }
            }

            //if it's a property and is an enum or bool, suggest valid values
            foreach (IPropertySymbol prop in GetAllMembers <IPropertySymbol> (controlClass))
            {
                if (prop.Name != attName.Name)
                {
                    continue;
                }

                //boolean completion
                if (prop.GetReturnType().Equals(refman.Compilation.GetTypeByMetadataName("System.Boolean")))
                {
                    AddBooleanCompletionData(list);
                    return;
                }
                //color completion
                if (prop.GetReturnType().Equals(refman.Compilation.GetTypeByMetadataName("System.Drawing.Color")))
                {
                    var conv = new System.Drawing.ColorConverter();
                    foreach (System.Drawing.Color c in conv.GetStandardValues(null))
                    {
                        if (c.IsSystemColor)
                        {
                            continue;
                        }
                        string hexcol = string.Format("#{0:x2}{1:x2}{2:x2}", c.R, c.G, c.B);
                        list.Add(c.Name, hexcol);
                    }
                    return;
                }

                //enum completion
                var retCls = prop.GetReturnType() as INamedTypeSymbol;
                if (retCls != null && retCls.TypeKind == TypeKind.Enum)
                {
                    foreach (var enumVal in GetAllMembers <IFieldSymbol> (retCls))
                    {
                        if (enumVal.DeclaredAccessibility == Accessibility.Public && enumVal.IsStatic)
                        {
                            list.Add(enumVal.Name, "md-literal", Ambience.GetSummaryMarkup(enumVal));
                        }
                    }
                    return;
                }
            }
        }
Beispiel #14
0
 public virtual string GetDescriptionMarkupText()
 {
     return(Ambience.EscapeText(Description));
 }
Beispiel #15
0
        public void FillInspectors(string filter)
        {
            categories.Clear();
            treeStore.Clear();
            var grouped = severities.Keys
                          .Where(node => node.Item2 == null && (string.IsNullOrEmpty(filter) || node.Item1.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) > 0))
                          .GroupBy(node => node.Item1.GetProvider().SupportedDiagnostics.First().Category)
                          .OrderBy(g => g.Key, StringComparer.Ordinal);

            foreach (var g in grouped)
            {
                TreeIter categoryIter = treeStore.AppendValues("<b>" + g.Key + "</b>", null, null);
                categories [g.Key] = categoryIter;

                foreach (var node in g.OrderBy(n => n.Item1.Name, StringComparer.Ordinal))
                {
                    var title = node.Item1.Name;
                    MarkupSearchResult(filter, ref title);
                    var nodeIter = treeStore.AppendValues(categoryIter, title, node, Ambience.EscapeText(node.Item1.Name));
                    if (node.Item1.GetProvider().SupportedDiagnostics.Length > 1)
                    {
                        foreach (var subIssue in node.Item1.GetProvider().SupportedDiagnostics)
                        {
                            title = subIssue.Title.ToString();
                            MarkupSearchResult(filter, ref title);
                            treeStore.AppendValues(nodeIter, title, new Tuple <CodeDiagnosticDescriptor, DiagnosticDescriptor>(node.Item1, subIssue), Ambience.EscapeText(node.Item1.Name));
                        }
                    }
                }
            }
            treeviewInspections.ExpandAll();
        }
// TODO: Roslyn port
//		public override ParameterHintingResult HandleParameterCompletionAsync (CodeCompletionContext completionContext, char completionChar)
//		{
///*			if (Tracker.Engine.CurrentState is AspNetExpressionState && documentBuilder != null && localDocumentInfo != null) {
//				return documentBuilder.HandleParameterCompletion (defaultDocument, completionContext, documentInfo, localDocumentInfo, completionChar);
//			}*/
//
//			return base.HandleParameterCompletionAsync (completionContext, completionChar);
//		}

        /*public override void RunParameterCompletionCommand ()
         * {
         *      if (localDocumentInfo == null) {
         *              base.RunParameterCompletionCommand ();
         *              return;
         *      }
         *      var doc = document;
         *      document = localDocumentInfo.HiddenDocument;
         *      var cw = CompletionWidget;
         *      CompletionWidget = documentBuilder.CreateCompletionWidget (localDocumentInfo);
         *      try {
         *              base.RunParameterCompletionCommand ();
         *      } finally {
         *              document = doc;
         *              CompletionWidget = cw;
         *      }
         * }*/

        protected override async Task <CompletionDataList> GetElementCompletions(CancellationToken token)
        {
            var   list       = new CompletionDataList();
            XName parentName = GetParentElementName(0);

            INamedTypeSymbol controlClass = null;

            if (parentName.HasPrefix)
            {
                controlClass = refman.GetControlType(parentName.Prefix, parentName.Name);
            }
            else
            {
                XName grandparentName = GetParentElementName(1);
                if (grandparentName.IsValid && grandparentName.HasPrefix)
                {
                    controlClass = refman.GetControlType(grandparentName.Prefix, grandparentName.Name);
                }
            }

            //we're just in HTML
            if (controlClass == null)
            {
                //root element?
                if (!parentName.IsValid)
                {
                    if (aspDoc.Info.Subtype == WebSubtype.WebControl)
                    {
                        await AddHtmlTagCompletionData(list, Schema, new XName ("div"), token);

                        AddAspBeginExpressions(list);
                        list.AddRange(refman.GetControlCompletionData());
                        AddMiscBeginTags(list);
                    }
                    else if (!string.IsNullOrEmpty(aspDoc.Info.MasterPageFile))
                    {
                        //FIXME: add the actual region names
                        list.Add(new CompletionData("asp:Content"));
                    }
                }
                else
                {
                    AddAspBeginExpressions(list);
                    list.AddRange(refman.GetControlCompletionData());
                    list.AddRange(await base.GetElementCompletions(token));
                }
                return(list);
            }

            string defaultProp;
            bool   childrenAsProperties = AreChildrenAsProperties(controlClass, out defaultProp);

            if (defaultProp != null && defaultProp.Length == 0)
            {
                defaultProp = null;
            }

            //parent permits child controls directly
            if (!childrenAsProperties)
            {
                AddAspBeginExpressions(list);
                list.AddRange(refman.GetControlCompletionData());
                AddMiscBeginTags(list);
                //TODO: get correct parent for Content tags
                await AddHtmlTagCompletionData(list, Schema, new XName ("body"), token);

                return(list);
            }

            //children of properties
            if (childrenAsProperties && (!parentName.HasPrefix || defaultProp != null))
            {
                string          propName = defaultProp ?? parentName.Name;
                IPropertySymbol property =
                    controlClass.GetMembers().OfType <IPropertySymbol> ()
                    .FirstOrDefault(x => string.Equals(propName, x.Name, StringComparison.OrdinalIgnoreCase));

                if (property == null)
                {
                    return(list);
                }

                //sanity checks on attributes
                switch (GetPersistenceMode(property))
                {
                case System.Web.UI.PersistenceMode.Attribute:
                case System.Web.UI.PersistenceMode.EncodedInnerDefaultProperty:
                    return(list);

                case System.Web.UI.PersistenceMode.InnerDefaultProperty:
                    if (!parentName.HasPrefix)
                    {
                        return(list);
                    }
                    break;

                case System.Web.UI.PersistenceMode.InnerProperty:
                    if (parentName.HasPrefix)
                    {
                        return(list);
                    }
                    break;
                }

                //check if allows freeform ASP/HTML content
                if (property.GetReturnType().GetFullName() == "System.Web.UI.ITemplate")
                {
                    AddAspBeginExpressions(list);
                    AddMiscBeginTags(list);
                    await AddHtmlTagCompletionData(list, Schema, new XName ("body"), token);

                    list.AddRange(refman.GetControlCompletionData());
                    return(list);
                }

                //FIXME:unfortunately ASP.NET doesn't seem to have enough type information / attributes
                //to be able to resolve the correct child types here
                //so we assume it's a list and have a quick hack to find arguments of strongly typed ILists

                ITypeSymbol collectionType = property.GetReturnType();
                if (collectionType == null)
                {
                    list.AddRange(refman.GetControlCompletionData());
                    return(list);
                }

                string        addStr = "Add";
                IMethodSymbol meth   = collectionType.GetMembers().OfType <IMethodSymbol> ().FirstOrDefault(m => m.Parameters.Length == 1 && m.Name == addStr);

                if (meth != null)
                {
                    var argType           = meth.Parameters [0].Type as INamedTypeSymbol;
                    INamedTypeSymbol type = refman.Compilation.GetTypeByMetadataName("System.Web.UI.Control");
                    if (argType != null && type != null && argType.IsDerivedFromClass(type))
                    {
                        list.AddRange(refman.GetControlCompletionData(argType));
                        return(list);
                    }
                }

                list.AddRange(refman.GetControlCompletionData());
                return(list);
            }

            //properties as children of controls
            if (parentName.HasPrefix && childrenAsProperties)
            {
                foreach (IPropertySymbol prop in GetUniqueMembers <IPropertySymbol> (controlClass.GetMembers().OfType <IPropertySymbol> ()))
                {
                    if (GetPersistenceMode(prop) != System.Web.UI.PersistenceMode.Attribute)
                    {
                        list.Add(prop.Name, prop.GetStockIcon(), Ambience.GetSummaryMarkup(prop));
                    }
                }
            }
            return(list);
        }
        void ResultTextDataFunc(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
        {
            if (TreeIter.Zero.Equals(iter))
            {
                return;
            }
            var textRenderer = (CellRendererText)cell;
            var searchResult = (SearchResult)store.GetValue(iter, SearchResultColumn);

            if (searchResult == null || searchResult.Offset < 0)
            {
                textRenderer.Markup = "Invalid search result";
                return;
            }
            string textMarkup = markupCache.FirstOrDefault(t => t.Item1 == searchResult)?.Item2;
            bool   isSelected = treeviewSearchResults.Selection.IterIsSelected(iter);

            if (isSelected)
            {
                textMarkup = null;
            }
            if (textMarkup == null)
            {
                var doc = GetDocument(searchResult);
                if (doc == null)
                {
                    textMarkup = "Can't create document for:" + searchResult.FileName;
                    goto end;
                }
                int lineNumber, startIndex = 0, endIndex = 0;
                try {
                    lineNumber = doc.OffsetToLineNumber(searchResult.Offset);
                } catch (ArgumentOutOfRangeException) {
                    lineNumber = -1;
                    textMarkup = "Invalid search result offset";
                    goto end;
                }

                var line = doc.GetLine(lineNumber);
                if (line == null)
                {
                    textMarkup = "Invalid line number " + lineNumber + " from offset: " + searchResult.Offset;
                    goto end;
                }
                int indent   = line.GetIndentation(doc).Length;
                var lineText = doc.GetTextAt(line.Offset + indent, line.Length - indent);
                int col      = searchResult.Offset - line.Offset - indent;
                // search result contained part of the indent.
                if (col + searchResult.Length < lineText.Length)
                {
                    lineText = doc.GetTextAt(line.Offset, line.Length);
                }

                string markup;
                if (isSelected)
                {
                    markup = Ambience.EscapeText(doc.GetTextAt(line.Offset + indent, line.Length - indent));
                }
                else
                {
                    markup = doc.GetMarkup(line.Offset + indent, line.Length - indent, new MarkupOptions(MarkupFormat.Pango));
                    markup = AdjustColors(markup);
                }

                if (col >= 0)
                {
                    uint start;
                    uint end;
                    try {
                        start = (uint)TranslateIndexToUTF8(lineText, col);
                        end   = (uint)TranslateIndexToUTF8(lineText, Math.Min(lineText.Length, col + searchResult.Length));
                    } catch (Exception e) {
                        LoggingService.LogError("Exception while translating index to utf8 (column was:" + col + " search result length:" + searchResult.Length + " line text:" + lineText + ")", e);
                        return;
                    }
                    startIndex = (int)start;
                    endIndex   = (int)end;
                }

                try {
                    textMarkup = markup;

                    if (!isSelected)
                    {
                        var    searchColor = searchResult.GetBackgroundMarkerColor(highlightStyle);
                        double b1          = HslColor.Brightness(searchColor);

                        double b2    = HslColor.Brightness(AdjustColor(Style.Base(StateType.Normal), SyntaxHighlightingService.GetColor(highlightStyle, EditorThemeColors.Foreground)));
                        double delta = Math.Abs(b1 - b2);
                        if (delta < 0.1)
                        {
                            var color1 = SyntaxHighlightingService.GetColor(highlightStyle, EditorThemeColors.FindHighlight);
                            if (color1.L + 0.5 > 1.0)
                            {
                                color1.L -= 0.5;
                            }
                            else
                            {
                                color1.L += 0.5;
                            }
                            searchColor = color1;
                        }
                        if (startIndex != endIndex)
                        {
                            textMarkup = PangoHelper.ColorMarkupBackground(textMarkup, (int)startIndex, (int)endIndex, searchColor);
                        }
                    }
                    else
                    {
                        var searchColor = this.treeviewSearchResults.Style.Base(StateType.Selected);
                        searchColor = searchColor.AddLight(-0.2);
                        textMarkup  = PangoHelper.ColorMarkupBackground(textMarkup, (int)startIndex, (int)endIndex, searchColor);
                    }
                } catch (Exception e) {
                    LoggingService.LogError("Error whil setting the text renderer markup to: " + markup, e);
                }
end:
                textMarkup = textMarkup.Replace("\t", new string (' ', doc.Options.TabSize));
                if (!isSelected)
                {
                    markupCache.Add(Tuple.Create(searchResult, textMarkup));
                    if (markupCache.Count > 100)
                    {
                        markupCache.RemoveAt(0);
                    }
                }
            }
            textRenderer.Markup = textMarkup;
        }
Beispiel #18
0
    IEnumerator RandomOneshotPlayer(AudioSourcePRO s, Ambience.AmbienceSetting setting, Ambience ambience, bool immediate = false)
    {
        if (immediate)
        {
            //yield return new WaitForSeconds(setting.Delay());
        }
        if (!s.isPlaying)
        {
            s.Play(0);
        }

        yield return(new WaitForSeconds(setting.Delay()));

        StartCoroutine(RandomPlayer(s, setting, ambience));
    }
Beispiel #19
0
        public override List <Change> PerformChanges(RefactoringOptions options, object prop)
        {
            List <Change>           result   = new List <Change> ();
            ExtractMethodParameters param    = (ExtractMethodParameters)prop;
            TextEditorData          data     = options.GetTextEditorData();
            INRefactoryASTProvider  provider = options.GetASTProvider();
            IResolver resolver = options.GetResolver();

            ICSharpCode.NRefactory.Ast.INode node = Analyze(options, param, false);
            if (param.VariablesToGenerate.Count > 0)
            {
                TextReplaceChange varGen = new TextReplaceChange();
                varGen.Description = GettextCatalog.GetString("Generate some temporary variables");
                varGen.FileName    = options.Document.FileName;
                LineSegment line = data.Document.GetLine(Math.Max(0, data.Document.OffsetToLineNumber(data.SelectionRange.Offset) - 1));
                varGen.Offset       = line.Offset + line.EditableLength;
                varGen.InsertedText = Environment.NewLine + options.GetWhitespaces(line.Offset);
                foreach (VariableDescriptor var in param.VariablesToGenerate)
                {
                    TypeReference tr = options.ShortenTypeName(var.ReturnType).ConvertToTypeReference();
                    varGen.InsertedText += provider.OutputNode(options.Dom, new LocalVariableDeclaration(new VariableDeclaration(var.Name, null, tr))).Trim();
                }
                result.Add(varGen);
            }
            InvocationExpression invocation = new InvocationExpression(new IdentifierExpression(param.Name));

            foreach (VariableDescriptor var in param.Parameters)
            {
                if (!param.OneChangedVariable && param.ChangedVariables.Contains(var.Name))
                {
                    FieldDirection     fieldDirection = FieldDirection.Ref;
                    VariableDescriptor outsideVar     = null;
                    if (param.VariablesOutside.TryGetValue(var.Name, out outsideVar) && (var.GetsAssigned || param.VariablesToGenerate.Where(v => v.Name == var.Name).Any()))
                    {
                        if (!outsideVar.GetsAssigned)
                        {
                            fieldDirection = FieldDirection.Out;
                        }
                    }
                    invocation.Arguments.Add(new DirectionExpression(fieldDirection, new IdentifierExpression(var.Name)));
                }
                else
                {
                    invocation.Arguments.Add(new IdentifierExpression(var.Name));
                }
            }
            //	string mimeType = DesktopService.GetMimeTypeForUri (options.Document.FileName);
            TypeReference returnType = new TypeReference("System.Void", true);

            ICSharpCode.NRefactory.Ast.INode outputNode;
            if (param.OneChangedVariable)
            {
                string name = param.ChangedVariables.First();
                returnType = options.ShortenTypeName(param.Variables.Find(v => v.Name == name).ReturnType).ConvertToTypeReference();
                if (param.OutsideVariableList.Any(v => v.Name == name && !v.IsDefined))
                {
                    LocalVariableDeclaration varDecl = new LocalVariableDeclaration(returnType);
                    varDecl.Variables.Add(new VariableDeclaration(name, invocation));
                    outputNode = varDecl;
                }
                else
                {
                    outputNode = new ExpressionStatement(new AssignmentExpression(new IdentifierExpression(name), ICSharpCode.NRefactory.Ast.AssignmentOperatorType.Assign, invocation));
                }
            }
            else
            {
                outputNode = node is BlockStatement ? (ICSharpCode.NRefactory.Ast.INode) new ExpressionStatement(invocation) : invocation;
            }
            TextReplaceChange replacement = new TextReplaceChange();

            replacement.Description        = string.Format(GettextCatalog.GetString("Substitute selected statement(s) with call to {0}"), param.Name);
            replacement.FileName           = options.Document.FileName;
            replacement.Offset             = options.Document.TextEditor.SelectionStartPosition;
            replacement.RemovedChars       = options.Document.TextEditor.SelectionEndPosition - options.Document.TextEditor.SelectionStartPosition;
            replacement.MoveCaretToReplace = true;

            LineSegment line1 = data.Document.GetLineByOffset(options.Document.TextEditor.SelectionEndPosition);

            if (options.Document.TextEditor.SelectionEndPosition == line1.Offset)
            {
                if (line1.Offset > 0)
                {
                    LineSegment line2 = data.Document.GetLineByOffset(line1.Offset - 1);
                    replacement.RemovedChars -= line2.DelimiterLength;
                }
            }

            replacement.InsertedText = options.GetWhitespaces(options.Document.TextEditor.SelectionStartPosition) + provider.OutputNode(options.Dom, outputNode).Trim();

            result.Add(replacement);

            TextReplaceChange insertNewMethod = new TextReplaceChange();

            insertNewMethod.FileName     = options.Document.FileName;
            insertNewMethod.Description  = string.Format(GettextCatalog.GetString("Create new method {0} from selected statement(s)"), param.Name);
            insertNewMethod.RemovedChars = param.InsertionPoint.LineBefore == NewLineInsertion.Eol ? 0 : param.InsertionPoint.Location.Column;
            insertNewMethod.Offset       = data.Document.LocationToOffset(param.InsertionPoint.Location) - insertNewMethod.RemovedChars;

            ExtractMethodAstTransformer transformer = new ExtractMethodAstTransformer(param.VariablesToGenerate);

            node.AcceptVisitor(transformer, null);
            if (!param.OneChangedVariable && node is Expression)
            {
                ResolveResult resolveResult = resolver.Resolve(new ExpressionResult("(" + provider.OutputNode(options.Dom, node) + ")"), new DomLocation(options.Document.TextEditor.CursorLine, options.Document.TextEditor.CursorColumn));
                if (resolveResult.ResolvedType != null)
                {
                    returnType = options.ShortenTypeName(resolveResult.ResolvedType).ConvertToTypeReference();
                }
            }

            MethodDeclaration methodDecl = new MethodDeclaration();

            methodDecl.Name          = param.Name;
            methodDecl.Modifier      = param.Modifiers;
            methodDecl.TypeReference = returnType;

            if (!param.ReferencesMember)
            {
                methodDecl.Modifier |= ICSharpCode.NRefactory.Ast.Modifiers.Static;
            }
            if (node is BlockStatement)
            {
                methodDecl.Body = new BlockStatement();
                methodDecl.Body.AddChild(new EmptyStatement());
                if (param.OneChangedVariable)
                {
                    methodDecl.Body.AddChild(new ReturnStatement(new IdentifierExpression(param.ChangedVariables.First())));
                }
            }
            else if (node is Expression)
            {
                methodDecl.Body = new BlockStatement();
                methodDecl.Body.AddChild(new ReturnStatement(node as Expression));
            }

            foreach (VariableDescriptor var in param.VariablesToDefine)
            {
                BlockStatement           block   = methodDecl.Body;
                LocalVariableDeclaration varDecl = new LocalVariableDeclaration(options.ShortenTypeName(var.ReturnType).ConvertToTypeReference());
                varDecl.Variables.Add(new VariableDeclaration(var.Name));
                block.Children.Insert(0, varDecl);
            }

            foreach (VariableDescriptor var in param.Parameters)
            {
                TypeReference typeReference        = options.ShortenTypeName(var.ReturnType).ConvertToTypeReference();
                ParameterDeclarationExpression pde = new ParameterDeclarationExpression(typeReference, var.Name);
                if (!param.OneChangedVariable)
                {
                    if (param.ChangedVariables.Contains(var.Name))
                    {
                        pde.ParamModifier = ICSharpCode.NRefactory.Ast.ParameterModifiers.Ref;
                    }
                    if (param.VariablesToGenerate.Where(v => v.Name == var.Name).Any())
                    {
                        pde.ParamModifier = ICSharpCode.NRefactory.Ast.ParameterModifiers.Out;
                    }
                    VariableDescriptor outsideVar = null;
                    if (var.GetsAssigned && param.VariablesOutside.TryGetValue(var.Name, out outsideVar))
                    {
                        if (!outsideVar.GetsAssigned)
                        {
                            pde.ParamModifier = ICSharpCode.NRefactory.Ast.ParameterModifiers.Out;
                        }
                    }
                }

                methodDecl.Parameters.Add(pde);
            }

            string        indent     = options.GetIndent(param.DeclaringMember);
            StringBuilder methodText = new StringBuilder();

            switch (param.InsertionPoint.LineBefore)
            {
            case NewLineInsertion.Eol:
                methodText.AppendLine();
                break;

            case NewLineInsertion.BlankLine:
                methodText.Append(indent);
                methodText.AppendLine();
                break;
            }
            if (param.GenerateComment)
            {
                methodText.Append(indent);
                methodText.AppendLine("/// <summary>");
                methodText.Append(indent);
                methodText.AppendLine("/// TODO: write a comment.");
                methodText.Append(indent);
                methodText.AppendLine("/// </summary>");
                Ambience ambience = AmbienceService.GetAmbienceForFile(options.Document.FileName);
                foreach (ParameterDeclarationExpression pde in methodDecl.Parameters)
                {
                    methodText.Append(indent);
                    methodText.Append("/// <param name=\"");
                    methodText.Append(pde.ParameterName);
                    methodText.Append("\"> A ");
                    methodText.Append(ambience.GetString(pde.TypeReference.ConvertToReturnType(), OutputFlags.IncludeGenerics | OutputFlags.UseFullName));
                    methodText.Append(" </param>");
                    methodText.AppendLine();
                }
                if (methodDecl.TypeReference.Type != "System.Void")
                {
                    methodText.Append(indent);
                    methodText.AppendLine("/// <returns>");
                    methodText.Append(indent);
                    methodText.Append("/// A ");
                    methodText.AppendLine(ambience.GetString(methodDecl.TypeReference.ConvertToReturnType(), OutputFlags.IncludeGenerics | OutputFlags.UseFullName));
                    methodText.Append(indent);
                    methodText.AppendLine("/// </returns>");
                }
            }

            methodText.Append(indent);

            if (node is BlockStatement)
            {
                string text = provider.OutputNode(options.Dom, methodDecl, indent).Trim();
                int    emptyStatementMarker = text.LastIndexOf(';');
                if (param.OneChangedVariable)
                {
                    emptyStatementMarker = text.LastIndexOf(';', emptyStatementMarker - 1);
                }
                StringBuilder sb = new StringBuilder();
                sb.Append(text.Substring(0, emptyStatementMarker));
                sb.Append(AddIndent(param.Text, indent + "\t"));
                sb.Append(text.Substring(emptyStatementMarker + 1));

                methodText.Append(sb.ToString());
            }
            else
            {
                methodText.Append(provider.OutputNode(options.Dom, methodDecl, options.GetIndent(param.DeclaringMember)).Trim());
            }

            switch (param.InsertionPoint.LineAfter)
            {
            case NewLineInsertion.Eol:
                methodText.AppendLine();
                break;

            case NewLineInsertion.BlankLine:
                methodText.AppendLine();
                methodText.AppendLine();
                methodText.Append(indent);
                break;
            }
            insertNewMethod.InsertedText = methodText.ToString();
            result.Add(insertNewMethod);

            return(result);
        }
Beispiel #20
0
        // Yoinked from C# binding
        void UpdatePath(object sender, Mono.TextEditor.DocumentLocationEventArgs e)
        {
            var unit           = Document.CompilationUnit;
            var textEditorData = Document.Editor;

            if (unit == null)
            {
                return;
            }

            var              loc    = textEditorData.Caret.Location;
            IType            type   = unit.GetTypeAt(loc.Line, loc.Column);
            List <PathEntry> result = new List <PathEntry> ();
            Ambience         amb    = GetAmbience();
            IMember          member = null;
            INode            node   = (INode)unit;

            if (type != null && type.ClassType != ClassType.Delegate)
            {
                member = type.GetMemberAt(loc.Line, loc.Column);
            }

            if (null != member)
            {
                node = member;
            }
            else if (null != type)
            {
                node = type;
            }

            while (node != null)
            {
                PathEntry entry;
                if (node is ICompilationUnit)
                {
                    if (!Document.ParsedDocument.UserRegions.Any())
                    {
                        break;
                    }
                    FoldingRegion reg = Document.ParsedDocument.UserRegions.LastOrDefault(r => r.Region.Contains(loc.Line, loc.Column));
                    if (reg == null)
                    {
                        entry = new PathEntry(GettextCatalog.GetString("No region"));
                    }
                    else
                    {
                        entry = new PathEntry(CompilationUnitDataProvider.Pixbuf, reg.Name);
                    }
                    entry.Position = EntryPosition.Right;
                }
                else
                {
                    entry = new PathEntry(ImageService.GetPixbuf(((IMember)node).StockIcon, Gtk.IconSize.Menu), amb.GetString((IMember)node, OutputFlags.IncludeGenerics | OutputFlags.IncludeParameters | OutputFlags.ReformatDelegates));
                }
                entry.Tag = node;
                result.Insert(0, entry);
                node = node.Parent;
            }

            PathEntry noSelection = null;

            if (type == null)
            {
                noSelection = new PathEntry(GettextCatalog.GetString("No selection"))
                {
                    Tag = new CustomNode(Document.CompilationUnit)
                };
            }
            else if (member == null && type.ClassType != ClassType.Delegate)
            {
                noSelection = new PathEntry(GettextCatalog.GetString("No selection"))
                {
                    Tag = new CustomNode(type)
                }
            }
            ;
            if (noSelection != null)
            {
                result.Add(noSelection);
            }

            var prev = CurrentPath;

            CurrentPath = result.ToArray();
            OnPathChanged(this, new DocumentPathChangedEventArgs(prev));
        }
Beispiel #21
0
        public static async Task <long> Get_Data(int pastHours, string sensorId, long lastUpdatedTicks)
        {
            SensorContext db        = new SensorContext();
            long          itemTicks = 0;

            try
            {
                var resources = ResourceLoader.GetForCurrentView("Resources");

                var blobStorageKey = resources.GetString("BlobStorageKey");

                string storageConnection                = "DefaultEndpointsProtocol=https;AccountName=envirodata;AccountKey=" + blobStorageKey;
                CloudStorageAccount   storageAccount    = CloudStorageAccount.Parse(storageConnection);
                CloudBlobClient       blobClient        = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer    container         = blobClient.GetContainerReference(sensorId);
                BlobContinuationToken myToken           = new BlobContinuationToken();
                BlobContinuationToken continuationToken = null;
                List <IListBlobItem>  results           = new List <IListBlobItem>();
                do
                {
                    var response = await container.ListBlobsSegmentedAsync(continuationToken);

                    continuationToken = response.ContinuationToken;
                    results.AddRange(response.Results);
                }while (continuationToken != null);
                TimeSpan pastSpan  = new TimeSpan(0, pastHours, 0, 0);
                long     fromTicks = DateTime.Now.Subtract(pastSpan).Ticks;

                Sensor sensor;
                string currentId      = "";
                bool   erasePreImport = false;
                if (erasePreImport)
                {
                    db.AmbientDataSample.RemoveRange(db.AmbientDataSample);
                    db.SaveChanges();
                }
                foreach (IListBlobItem item in results)
                {
                    itemTicks = Convert.ToInt64(item.Uri.ToString().Split('_')[1].Split('.')[0]);
                    if (itemTicks > fromTicks && itemTicks > lastUpdatedTicks)
                    {
                        string          blobText    = await(item as CloudBlockBlob).DownloadTextAsync();
                        JArray          jsonContent = JsonConvert.DeserializeObject(blobText) as JArray;
                        List <Ambience> ambBunch    = new List <Ambience>();
                        foreach (JToken entry in jsonContent)
                        {
                            JObject myAmb = entry.ToObject <JObject>();
                            currentId = myAmb.GetValue("ID").ToString();
                            sensor    = db.Sensors.Where(x => x.SensorId.ToString().Equals(myAmb.GetValue("sensorID").ToString())).FirstOrDefault();
                            if (sensor == null) // move out of foreach loop
                            {
                                try
                                {
                                    sensor = new Sensor {
                                        SensorId = new Guid(myAmb.GetValue("sensorID").ToString()), Title = "generic", Location = "Here"
                                    };
                                    db.Sensors.Add(sensor);
                                    db.SaveChanges();
                                }
                                catch (Exception ex)
                                {
                                    Debug.WriteLine(ex.Message);
                                }
                            }
                            if (!currentId.Equals("0"))
                            {
                                Ambience myAmbience = new Ambience();
                                myAmbience.AmbienceId  = (int)myAmb.GetValue("ID"); //.ToObject<int>();
                                myAmbience.captureTime = DateTime.Parse(myAmb.GetValue("captureTime").ToString());
                                myAmbience.temperature = myAmb.GetValue("temperature").ToObject <decimal>();
                                myAmbience.humidity    = myAmb.GetValue("humidity").ToObject <decimal>();
                                myAmbience.Sensor      = sensor;
                                ambBunch.Add(myAmbience);
                            }
                        }
                        db.AmbientDataSample.AddRange(ambBunch);
                        db.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            return(itemTicks);
        }
        public OverridesImplementsDialog(MonoDevelop.Ide.Gui.Document editor, IType cls)
        {
            this.Build();
            this.editor = editor;
            this.cls    = cls;

            // FIXME: title
            Title = GettextCatalog.GetString("Override and/or implement members");

            store = new TreeStore(typeof(bool), typeof(Gdk.Pixbuf), typeof(string), typeof(bool), typeof(IMember));

            // Column #1
            TreeViewColumn nameCol = new TreeViewColumn();

            nameCol.Title     = GettextCatalog.GetString("Name");
            nameCol.Expand    = true;
            nameCol.Resizable = true;

            CellRendererToggle cbRenderer = new CellRendererToggle();

            cbRenderer.Activatable = true;
            cbRenderer.Toggled    += OnSelectToggled;
            nameCol.PackStart(cbRenderer, false);
            nameCol.AddAttribute(cbRenderer, "active", colCheckedIndex);

            CellRendererPixbuf iconRenderer = new CellRendererPixbuf();

            nameCol.PackStart(iconRenderer, false);
            nameCol.AddAttribute(iconRenderer, "pixbuf", colIconIndex);

            CellRendererText nameRenderer = new CellRendererText();

            nameRenderer.Ellipsize = Pango.EllipsizeMode.End;
            nameCol.PackStart(nameRenderer, true);
            nameCol.AddAttribute(nameRenderer, "text", colNameIndex);

            treeview.AppendColumn(nameCol);

            // Column #2
            CellRendererToggle explicitRenderer = new CellRendererToggle();

            explicitRenderer.Activatable = true;
            explicitRenderer.Xalign      = 0.0f;
            explicitRenderer.Toggled    += OnExplicitToggled;
            TreeViewColumn explicitCol = new TreeViewColumn();

            explicitCol.Title = GettextCatalog.GetString("Explicit");
            explicitCol.PackStart(explicitRenderer, true);
            explicitCol.SetCellDataFunc(explicitRenderer, new TreeCellDataFunc(RenderExplicitCheckbox));
            explicitCol.AddAttribute(explicitRenderer, "active", colExplicitIndex);
            treeview.AppendColumn(explicitCol);

            store.SetSortColumnId(colNameIndex, SortType.Ascending);
            treeview.Model = store;

            buttonCancel.Clicked      += OnCancelClicked;
            buttonOk.Clicked          += OnOKClicked;
            buttonSelectAll.Clicked   += delegate { SelectAll(true); };
            buttonUnselectAll.Clicked += delegate { SelectAll(false); };

            refactorer = IdeApp.Workspace.GetCodeRefactorer(IdeApp.ProjectOperations.CurrentSelectedSolution);
            ambience   = AmbienceService.GetAmbienceForFile(cls.CompilationUnit.FileName);
            PopulateTreeView();
            UpdateOKButton();
        }
Beispiel #23
0
        TooltipInformation CreateTooltip(ToolTipData data, int offset, Ambience ambience, Gdk.ModifierType modifierState)
        {
            ResolveResult result = data.Result;
            var           doc    = IdeApp.Workbench.ActiveDocument;

            if (doc == null)
            {
                return(null);
            }
            bool createFooter = (modifierState & Gdk.ModifierType.Mod1Mask) != 0;
            var  file         = doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile;

            if (file == null)
            {
                return(null);
            }
            try {
                if (result is AliasNamespaceResolveResult)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetAliasedNamespaceTooltip((AliasNamespaceResolveResult)result));
                }

                if (result is AliasTypeResolveResult)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetAliasedTypeTooltip((AliasTypeResolveResult)result));
                }

                if (data.Node is TypeOfExpression)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetTypeOfTooltip((TypeOfExpression)data.Node, result as TypeOfResolveResult));
                }
                if (data.Node is PrimitiveType && data.Node.Parent is Constraint)
                {
                    var t = (PrimitiveType)data.Node;
                    if (t.Keyword == "class" || t.Keyword == "new" || t.Keyword == "struct")
                    {
                        var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                        var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                        sig.BreakLineAfterReturnType = false;
                        return(sig.GetConstraintTooltip(t.Keyword));
                    }
                    return(null);
                }
                if (data.Node is ExternAliasDeclaration)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetExternAliasTooltip((ExternAliasDeclaration)data.Node, doc.Project as DotNetProject));
                }
                if (result == null && data.Node is CSharpTokenNode)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip(data.Node));
                }
                if (data.Node is PrimitiveType && ((PrimitiveType)data.Node).KnownTypeCode == KnownTypeCode.Void)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip("void", null));
                }
                if (data.Node is NullReferenceExpression)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip("null", null));
                }

                if (result is UnknownIdentifierResolveResult)
                {
                    return(new TooltipInformation()
                    {
                        SignatureMarkup = string.Format("error CS0103: The name `{0}' does not exist in the current context", ((UnknownIdentifierResolveResult)result).Identifier)
                    });
                }
                else if (result is UnknownMemberResolveResult)
                {
                    var ur = (UnknownMemberResolveResult)result;
                    if (ur.TargetType.Kind != TypeKind.Unknown)
                    {
                        return(new TooltipInformation()
                        {
                            SignatureMarkup = string.Format("error CS0117: `{0}' does not contain a definition for `{1}'", ur.TargetType.FullName, ur.MemberName)
                        });
                    }
                }
                else if (result.IsError)
                {
                    return(new TooltipInformation()
                    {
                        SignatureMarkup = "Unknown resolve error."
                    });
                }
                if (result is LocalResolveResult)
                {
                    var lr          = (LocalResolveResult)result;
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    tooltipInfo.SignatureMarkup  = sig.GetLocalVariableMarkup(lr.Variable);
                    return(tooltipInfo);
                }
                else if (result is MethodGroupResolveResult)
                {
                    var mrr        = (MethodGroupResolveResult)result;
                    var allMethods = new List <IMethod> (mrr.Methods);
                    foreach (var l in mrr.GetExtensionMethods())
                    {
                        allMethods.AddRange(l);
                    }

                    var method = allMethods.FirstOrDefault();
                    if (method != null)
                    {
                        return(MemberCompletionData.CreateTooltipInformation(
                                   doc.Compilation,
                                   file,
                                   doc.Editor,
                                   doc.GetFormattingPolicy(),
                                   method,
                                   false,
                                   createFooter));
                    }
                }
                else if (result is CSharpInvocationResolveResult)
                {
                    var invocationResult = (CSharpInvocationResolveResult)result;
                    var member           = (IMember)invocationResult.ReducedMethod ?? invocationResult.Member;
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               member,
                               false,
                               createFooter));
                }
                else if (result is MemberResolveResult)
                {
                    var member = ((MemberResolveResult)result).Member;
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               member,
                               false,
                               createFooter));
                }
                else if (result is NamespaceResolveResult)
                {
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(((NamespaceResolveResult)result).Namespace);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + ((NamespaceResolveResult)result).Namespace, e);
                        return(new TooltipInformation());
                    }
                    return(tooltipInfo);
                }
                else if (result is OperatorResolveResult)
                {
                    var or          = result as OperatorResolveResult;
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(or.UserDefinedOperatorMethod);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + ((NamespaceResolveResult)result).Namespace, e);
                        return(new TooltipInformation());
                    }
                    return(tooltipInfo);
                }
                else
                {
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               result.Type,
                               false,
                               createFooter));
                }
            } catch (Exception e) {
                LoggingService.LogError("Error while creating tooltip.", e);
                return(null);
            }

            return(null);
        }
        public string CreateTooltip(ProjectDom dom, ICompilationUnit unit, MonoDevelop.Projects.Dom.ResolveResult result, string errorInformations, Ambience ambience, Gdk.ModifierType modifierState)
        {
            OutputSettings settings = new OutputSettings(OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);

            if ((Gdk.ModifierType.ShiftMask & modifierState) == Gdk.ModifierType.ShiftMask)
            {
                settings.EmitNameCallback = delegate(INode domVisitable, ref string outString) {
                    // crop used namespaces.
                    if (unit != null)
                    {
                        int len = 0;
                        foreach (IUsing u in unit.Usings)
                        {
                            foreach (string ns in u.Namespaces)
                            {
                                if (outString.StartsWith(ns + "."))
                                {
                                    len = Math.Max(len, ns.Length + 1);
                                }
                            }
                        }
                        string newName = outString.Substring(len);
                        int    count   = 0;
                        // check if there is a name clash.
                        if (dom.GetType(newName) != null)
                        {
                            count++;
                        }
                        foreach (IUsing u in unit.Usings)
                        {
                            foreach (string ns in u.Namespaces)
                            {
                                if (dom.GetType(ns + "." + newName) != null)
                                {
                                    count++;
                                }
                            }
                        }

                        if (len > 0 && count == 1)
                        {
                            outString = newName;
                        }
                    }
                };
            }

            // Approximate value for usual case
            StringBuilder s   = new StringBuilder(150);
            string        doc = null;

            if (result != null)
            {
                if (result is AggregatedResolveResult)
                {
                    result = ((AggregatedResolveResult)result).PrimaryResult;
                }
                if (result is ParameterResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(paramStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((ParameterResolveResult)result).Parameter, settings));
                }
                else if (result is LocalVariableResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(localStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((LocalVariableResolveResult)result).ResolvedType, settings));
                    s.Append(" ");
                    s.Append(((LocalVariableResolveResult)result).LocalVariable.Name);
                }
                else if (result is UnresolvedMemberResolveResult)
                {
                    s.Append(String.Format(GettextCatalog.GetString("Unresolved member '{0}'"), ((UnresolvedMemberResolveResult)result).MemberName));
                }
                else if (result is MethodResolveResult)
                {
                    MethodResolveResult mrr = (MethodResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(methodStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(mrr.MostLikelyMethod, settings));
                    if (mrr.Methods.Count > 1)
                    {
                        int overloadCount = mrr.Methods.Count - 1;
                        s.Append(string.Format(GettextCatalog.GetPluralString(" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
                    }
                    doc = AmbienceService.GetDocumentationSummary(((MethodResolveResult)result).MostLikelyMethod);
                }
                else if (result is MemberResolveResult)
                {
                    IMember member = ((MemberResolveResult)result).ResolvedMember;
                    if (member == null)
                    {
                        IReturnType returnType = ((MemberResolveResult)result).ResolvedType;
                        if (returnType != null)
                        {
                            IType type = dom.GetType(returnType);
                            if (type != null)
                            {
                                s.Append("<small><i>");
                                s.Append(typeStr);
                                s.Append("</i></small>\n");
                                s.Append(ambience.GetString(type, settings));
                                doc = AmbienceService.GetDocumentationSummary(type);
                            }
                        }
                    }
                    else
                    {
                        if (member is IField)
                        {
                            s.Append("<small><i>");
                            s.Append(fieldStr);
                            s.Append("</i></small>\n");
                        }
                        else if (member is IProperty)
                        {
                            s.Append("<small><i>");
                            s.Append(propertyStr);
                            s.Append("</i></small>\n");
                        }
                        s.Append(ambience.GetString(member, settings));
                        doc = AmbienceService.GetDocumentationSummary(member);
                    }
                }
                else if (result is NamespaceResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(namespaceStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(new Namespace(((NamespaceResolveResult)result).Namespace), settings));
                }
                else
                {
                    s.Append(ambience.GetString(result.ResolvedType, settings));
                }


                if (!string.IsNullOrEmpty(doc))
                {
                    s.Append("\n<small>");
                    s.Append(AmbienceService.GetDocumentationMarkup("<summary>" + doc + "</summary>"));
                    s.Append("</small>");
                }
            }

            if (!string.IsNullOrEmpty(errorInformations))
            {
                if (s.Length != 0)
                {
                    s.Append("\n\n");
                }
                s.Append("<small>");
                s.Append(errorInformations);
                s.Append("</small>");
            }
            return(s.ToString());
        }
Beispiel #25
0
        public string CreateTooltip(ResolveResult result, int offset, Ambience ambience)
        {
            var doc = IdeApp.Workbench.ActiveDocument;

            if (doc == null)
            {
                return(null);
            }
            try {
                OutputSettings settings = new OutputSettings(OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);
                // Approximate value for usual case
                StringBuilder s             = new StringBuilder(150);
                string        documentation = null;
                if (result is UnknownIdentifierResolveResult)
                {
                    s.Append(String.Format(GettextCatalog.GetString("Unresolved identifier '{0}'"), ((UnknownIdentifierResolveResult)result).Identifier));
                }
                else if (result.IsError)
                {
                    s.Append(GettextCatalog.GetString("Resolve error."));
                }
                else if (result is LocalResolveResult)
                {
                    var lr = (LocalResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(lr.IsParameter ? paramStr : localStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(lr.Variable.Type, settings));
                    s.Append(" ");
                    s.Append(lr.Variable.Name);
                }
                else if (result is MethodGroupResolveResult)
                {
                    var mrr = (MethodGroupResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(methodStr);
                    s.Append("</i></small>\n");
                    var allMethods = new List <IMethod> (mrr.Methods);
                    foreach (var l in mrr.GetExtensionMethods())
                    {
                        allMethods.AddRange(l);
                    }

                    var method = allMethods.FirstOrDefault();
                    if (method != null)
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, method.Compilation).ConvertEntity(method)));
                        if (allMethods.Count > 1)
                        {
                            int overloadCount = allMethods.Count - 1;
                            s.Append(string.Format(GettextCatalog.GetPluralString(" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
                        }
                        documentation = AmbienceService.GetDocumentationSummary(method);
                    }
                }
                else if (result is MemberResolveResult)
                {
                    var member = ((MemberResolveResult)result).Member;
                    s.Append("<small><i>");
                    s.Append(GetString(member));
                    s.Append("</i></small>\n");
                    var field = member as IField;
                    if (field != null && field.IsConst)
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, field.Compilation).ConvertType(field.Type)));
                        s.Append(" ");
                        s.Append(field.Name);
                        s.Append(" = ");
                        s.Append(GetConst(field.ConstantValue));
                        s.Append(";");
                    }
                    else
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, member.Compilation).ConvertEntity(member)));
                    }
                    documentation = AmbienceService.GetDocumentationSummary(member);
                }
                else if (result is NamespaceResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(namespaceStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((NamespaceResolveResult)result).NamespaceName, settings));
                }
                else
                {
                    var tr         = result;
                    var typeString = GetString(tr.Type);
                    if (!string.IsNullOrEmpty(typeString))
                    {
                        s.Append("<small><i>");
                        s.Append(typeString);
                        s.Append("</i></small>\n");
                    }
                    settings.OutputFlags |= OutputFlags.UseFullName | OutputFlags.UseFullInnerTypeName;
                    s.Append(ambience.GetString(tr.Type, settings));
                    documentation = AmbienceService.GetDocumentationSummary(tr.Type.GetDefinition());
                }

                if (!string.IsNullOrEmpty(documentation))
                {
                    s.Append("\n<small>");
                    s.Append(AmbienceService.GetDocumentationMarkup("<summary>" + documentation + "</summary>"));
                    s.Append("</small>");
                }
                return(s.ToString());
            } catch (Exception e) {
                LoggingService.LogError("Error while creating tooltip.", e);
                return(null);
            }
        }
 public RoslynCompletionCategory(ISymbol symbol)
 {
     this.symbol      = symbol;
     this.DisplayText = Ambience.EscapeText(symbol.ToDisplayString(MonoDevelop.Ide.TypeSystem.Ambience.NameFormat));
     this.Icon        = MonoDevelop.Ide.TypeSystem.Stock.GetStockIcon(symbol);
 }
Beispiel #27
0
        public void FillInspectors(string filter)
        {
            categories.Clear();
            treeStore.Clear();
            var grouped = severities.Keys
                          .GroupBy(node => node.Item2.Category)
                          .OrderBy(g => g.Key, StringComparer.Ordinal);

            foreach (var g in grouped)
            {
                foreach (var node in g.OrderBy(n => n.Item2.Title.ToString(), StringComparer.CurrentCulture))
                {
                    var title = GettextCatalog.GetString("{0} ({1})", node.Item2.Title, node.Item2.Id);
                    if (!string.IsNullOrEmpty(filter) && title.IndexOf(filter, StringComparison.CurrentCultureIgnoreCase) < 0)
                    {
                        continue;
                    }
                    TreeIter categoryIter;
                    if (!categories.TryGetValue(g.Key, out categoryIter))
                    {
                        categoryIter       = treeStore.AppendValues("<b>" + g.Key + "</b>", null, null, null);
                        categories [g.Key] = categoryIter;
                    }
                    var desc = node.Item2.Description.ToString();
                    if (string.IsNullOrEmpty(desc))
                    {
                        desc = title;
                    }
                    MarkupSearchResult(filter, ref title);
                    var nodeIter = treeStore.AppendValues(categoryIter, title, node, Ambience.EscapeText(title), Ambience.EscapeText(desc));
                }
            }
            treeviewInspections.ExpandAll();
        }
Beispiel #28
0
        public override async Task <TooltipItem> GetItem(TextEditor editor, DocumentContext ctx, int offset, CancellationToken token = default(CancellationToken))
        {
            var results = new List <Result> ();
            int markerOffset = -1, markerEndOffset = -1;

            foreach (var marker in editor.GetTextSegmentMarkersAt(offset))
            {
                if (marker.Tag is Result result)
                {
                    if (result.Level == Microsoft.CodeAnalysis.DiagnosticSeverity.Hidden && result.InspectionMark == IssueMarker.WavedLine)
                    {
                        continue;
                    }
                    if (markerOffset < 0)
                    {
                        markerOffset    = marker.Offset;
                        markerEndOffset = marker.EndOffset;
                    }
                    else
                    {
                        markerOffset    = Math.Max(markerOffset, marker.Offset);
                        markerEndOffset = Math.Min(markerEndOffset, marker.EndOffset);
                    }
                    results.Add(result);
                }
            }
            if (results.Count == 0)
            {
                return(null);
            }
            var sb = StringBuilderCache.Allocate();

            sb.Append("<span font='");
            sb.Append(FontService.SansFontName);
            sb.Append("' size='small'>");
            int  minOffset           = int.MaxValue;
            int  maxOffset           = -1;
            bool floatingWidgetShown = false;

            for (int i = 0; i < results.Count; i++)
            {
                var r = results [i];
                var escapedMessage = Ambience.EscapeText(r.Message);
                if (i > 0)
                {
                    sb.AppendLine();
                }
                minOffset            = Math.Min(minOffset, r.Region.Start);
                maxOffset            = Math.Max(maxOffset, r.Region.End);
                floatingWidgetShown |= r.InspectionMark == IssueMarker.WavedLine;

                if (results.Count > 1)
                {
                    string   severity;
                    HslColor color;
                    switch (r.Level)
                    {
                    case Microsoft.CodeAnalysis.DiagnosticSeverity.Info:
                        severity = GettextCatalog.GetString("Info");
                        editor.Options.GetEditorTheme().TryGetColor(EditorThemeColors.UnderlineSuggestion, out color);
                        break;

                    case Microsoft.CodeAnalysis.DiagnosticSeverity.Warning:
                        severity = GettextCatalog.GetString("Warning");
                        editor.Options.GetEditorTheme().TryGetColor(EditorThemeColors.UnderlineWarning, out color);
                        break;

                    case Microsoft.CodeAnalysis.DiagnosticSeverity.Error:
                        severity = GettextCatalog.GetString("Error");
                        editor.Options.GetEditorTheme().TryGetColor(EditorThemeColors.UnderlineError, out color);
                        break;

                    default:
                        severity = "?";
                        editor.Options.GetEditorTheme().TryGetColor(EditorThemeColors.UnderlineSuggestion, out color);
                        break;
                    }
                    sb.AppendFormat("<span foreground ='{2}'font_weight='bold'>{0}</span>: {1}", severity, escapedMessage, color.ToPangoString());
                }
                else
                {
                    sb.Append(escapedMessage);
                }
            }

            sb.Append("</span>");
            CodeActions.CodeActionContainer tag = null;
            try {
                var ad   = ctx.AnalysisDocument;
                var root = await ad.GetSyntaxRootAsync(token);

                if (root.Span.End < offset)
                {
                    LoggingService.LogError($"Error in ResultTooltipProvider.GetItem offset {offset} not inside syntax root {root.Span.End} document length {editor.Length}.");
                }
                else
                {
                    var codeFixService = Ide.Composition.CompositionManager.GetExportedValue <ICodeFixService> ();
                    var span           = new TextSpan(offset, 0);
                    var fixes          = await codeFixService.GetFixesAsync(ad, span, true, token);

                    var codeRefactoringService = Ide.Composition.CompositionManager.GetExportedValue <Microsoft.CodeAnalysis.CodeRefactorings.ICodeRefactoringService> ();
                    var refactorings           = await codeRefactoringService.GetRefactoringsAsync(ad, span, token);

                    tag = new CodeActions.CodeActionContainer(fixes, refactorings)
                    {
                        Span = new TextSpan(minOffset, Math.Max(0, maxOffset - minOffset)),
                        FloatingWidgetShown = floatingWidgetShown
                    };
                }
            } catch (AggregateException ae) {
                ae.Flatten().Handle(aex => aex is OperationCanceledException);
            } catch (OperationCanceledException) {
            } catch (TargetInvocationException ex) {
                if (!(ex.InnerException is OperationCanceledException))
                {
                    throw;
                }
            }
            if (tag == null)
            {
                return(null);
            }
            var tooltipInfo = new TaggedTooltipInformation <CodeActions.CodeActionContainer> {
                SignatureMarkup = StringBuilderCache.ReturnAndFree(sb),
                Tag             = tag
            };

            return(new TooltipItem(tooltipInfo, markerOffset, markerEndOffset - markerOffset));
        }
            internal static Task <TooltipInformation> CreateTooltipInformation(MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol sym, int currentParameter, bool smartWrap, CancellationToken cancelToken)
            {
                var tooltipInfo = new TooltipInformation();
                var sig         = new SignatureMarkupCreator(ctx, editor != null ? editor.CaretOffset : 0);

                sig.HighlightParameter       = currentParameter;
                sig.BreakLineAfterReturnType = smartWrap;

                return(Task.Run(() => {
                    if (cancelToken.IsCancellationRequested)
                    {
                        return null;
                    }
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(sym);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + sym, e);
                        return new TooltipInformation();
                    }
                    tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup(sym) ?? "";

                    if (cancelToken.IsCancellationRequested)
                    {
                        return null;
                    }

                    if (sym is IMethodSymbol)
                    {
                        var method = (IMethodSymbol)sym;
                        if (method.IsExtensionMethod && method.ReducedFrom != null && method.ReducedFrom.ContainingType != null)
                        {
                            tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.ReducedFrom.ContainingType.Name);
                        }
                    }
                    int paramIndex = currentParameter;

                    //				if (Symbol is IMethodSymbol && ((IMethodSymbol)Symbol).IsExtensionMethod)
                    //					paramIndex++;
                    var list = GetParameterList(sym);
                    paramIndex = Math.Min(list.Length - 1, paramIndex);

                    var curParameter = paramIndex >= 0 && paramIndex < list.Length ? list [paramIndex] : null;
                    if (curParameter != null)
                    {
                        string docText = Ambience.GetDocumentation(sym);
                        if (!string.IsNullOrEmpty(docText))
                        {
                            string text = docText;
                            Regex paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                            Match match = paramRegex.Match(docText);

                            if (match.Success)
                            {
                                text = Ambience.GetDocumentationMarkup(sym, match.Groups [1].Value);
                                if (!string.IsNullOrWhiteSpace(text))
                                {
                                    tooltipInfo.AddCategory(GettextCatalog.GetString("Parameter"), text);
                                }
                            }
                        }
                        if (curParameter.Type.TypeKind == TypeKind.Delegate)
                        {
                            tooltipInfo.AddCategory(GettextCatalog.GetString("Delegate Info"), sig.GetDelegateInfo(curParameter.Type));
                        }
                    }
                    return tooltipInfo;
                }));
            }
Beispiel #30
0
        public static string ClassificationsToMarkup(ITextSnapshot snapshot, IList <ClassificationSpan> classifications, IParameter currentParameter)
        {
            var  markup          = new StringBuilder();
            var  theme           = DefaultSourceEditorOptions.Instance.GetEditorTheme();
            Span?locus           = currentParameter?.Locus;
            bool inDocumentation = false;

            for (int i = 0; i < classifications.Count; i++)
            {
                var part = classifications [i];
                if (!inDocumentation)
                {
                    if (part.ClassificationType.Classification == ClassificationTypeNames.Text)
                    {
                        inDocumentation = true;
                        markup.Append("<span font='" + FontService.SansFontName + "' size='small'>");
                        markup.AppendLine();
                    }
                    else
                    {
                        markup.Append("<span foreground=\"");
                        markup.Append(GetThemeColor(theme, GetThemeColor(part.ClassificationType.Classification)));
                        markup.Append("\">");
                    }
                }

                if (locus is Span locusSpan && part.Span.Intersection(locusSpan) is SnapshotSpan intersection)
                {
                    if (intersection.Start == part.Span.Start)
                    {
                        if (intersection.End == part.Span.End)
                        {
                            markup.Append("<b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(part.Span)));
                            markup.Append("</b>");
                        }
                        else
                        {
                            markup.Append("<b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(intersection)));
                            markup.Append("</b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(intersection.End, part.Span.End - intersection.End)));
                        }
                    }
                    else
                    {
                        if (intersection.End == part.Span.End)
                        {
                            markup.Append(Ambience.EscapeText(snapshot.GetText(part.Span.Start, intersection.Start - part.Span.Start)));
                            markup.Append("<b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(intersection)));
                            markup.Append("</b>");
                        }
                        else
                        {
                            markup.Append(Ambience.EscapeText(snapshot.GetText(part.Span.Start, intersection.Start - part.Span.Start)));
                            markup.Append("<b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(intersection)));
                            markup.Append("</b>");
                            markup.Append(Ambience.EscapeText(snapshot.GetText(intersection.End, part.Span.End - intersection.End)));
                        }
                    }
                }
Beispiel #31
0
        async Task <string> CreateMarkupAsync(SearchResultWidget widget, TextEditor doc, Editor.IDocumentLine line)
        {
            int startIndex = 0, endIndex = 0;

            int    indent = line.GetIndentation(doc).Length;
            string lineText;
            int    col = Offset - line.Offset;
            int    markupStartOffset = 0;
            bool   trimStart = false, trimEnd = false;
            int    length;

            if (col < indent)
            {
                trimEnd = line.Length > maximumMarkupLength;
                length  = Math.Min(maximumMarkupLength, line.Length);
                // search result contained part of the indent.
                lineText = doc.GetTextAt(line.Offset, length);
            }
            else
            {
                // if not crop the indent
                length = line.Length - indent;
                if (length > maximumMarkupLength)
                {
                    markupStartOffset = Math.Min(Math.Max(0, col - indent - maximumMarkupLength / 2), line.Length - maximumMarkupLength);
                    trimEnd           = markupStartOffset + maximumMarkupLength < line.Length;
                    trimStart         = markupStartOffset > 0;
                    length            = maximumMarkupLength;
                }
                lineText = doc.GetTextAt(line.Offset + markupStartOffset + indent, length);
                col     -= indent;
            }
            if (col >= 0)
            {
                uint start;
                uint end;
                try {
                    start = (uint)TranslateIndexToUTF8(lineText, col - markupStartOffset);
                    end   = (uint)TranslateIndexToUTF8(lineText, Math.Min(lineText.Length, col - markupStartOffset + Length));
                } catch (Exception e) {
                    LoggingService.LogError("Exception while translating index to utf8 (column was:" + col + " search result length:" + Length + " line text:" + lineText + ")", e);
                    return("");
                }
                startIndex = (int)start;
                endIndex   = (int)end;
            }

            var tabSize = doc.Options.TabSize;

            this.markup = this.selectedMarkup = markup = Ambience.EscapeText(lineText);

            var searchColor = GetBackgroundMarkerColor(widget.HighlightStyle);

            var selectedSearchColor = widget.Style.Base(Gtk.StateType.Selected);

            selectedSearchColor = searchColor.AddLight(-0.2);
            double b1 = HslColor.Brightness(searchColor);
            double b2 = HslColor.Brightness(SearchResultWidget.AdjustColor(widget.Style.Base(Gtk.StateType.Normal), SyntaxHighlightingService.GetColor(widget.HighlightStyle, EditorThemeColors.Foreground)));

            // selected
            markup         = FormatMarkup(PangoHelper.ColorMarkupBackground(selectedMarkup, (int)startIndex, (int)endIndex, searchColor), trimStart, trimEnd, tabSize);
            selectedMarkup = FormatMarkup(PangoHelper.ColorMarkupBackground(selectedMarkup, (int)startIndex, (int)endIndex, selectedSearchColor), trimStart, trimEnd, tabSize);

            string newMarkup;

            using (var markupTimeoutSource = new CancellationTokenSource(150)) {
                newMarkup = await doc.GetMarkupAsync(line.Offset + markupStartOffset + indent, length, new MarkupOptions (MarkupFormat.Pango), markupTimeoutSource.Token).ConfigureAwait(false);

                newMarkup = widget.AdjustColors(newMarkup);
            }

            try {
                double delta = Math.Abs(b1 - b2);
                if (delta < 0.1)
                {
                    var color1 = SyntaxHighlightingService.GetColor(widget.HighlightStyle, EditorThemeColors.FindHighlight);
                    if (color1.L + 0.5 > 1.0)
                    {
                        color1.L -= 0.5;
                    }
                    else
                    {
                        color1.L += 0.5;
                    }
                    searchColor = color1;
                }
                if (startIndex != endIndex)
                {
                    newMarkup = PangoHelper.ColorMarkupBackground(newMarkup, (int)startIndex, (int)endIndex, searchColor);
                }
            } catch (Exception e) {
                LoggingService.LogError("Error while setting the text renderer markup to: " + newMarkup, e);
            }

            return(FormatMarkup(newMarkup, trimStart, trimEnd, tabSize));
        }