示例#1
0
        /// <summary>
        /// Occurs when the mouse is hovered over an <c>EditorView</c></summary>
        private void EditorViewMouseHover(object sender, EditorViewMouseEventArgs e)
        {
            var editor = sender as ActiproSoftware.SyntaxEditor.SyntaxEditor;

            if (e.HitTestResult.Token == null ||
                MouseHoveringOverToken == null ||
                e.HitTestResult.Token.Language.Key.ToLower() == "plain text")
                return;

            var lang = Languages.Text;
            switch (e.HitTestResult.Token.Language.Key.ToLower())
            {
                case "c#":
                    lang = Languages.Csharp;
                    break;
                case "lua":
                    lang = Languages.Lua;
                    break;
                case "python":
                    lang = Languages.Python;
                    break;
                case "xml":
                    lang = Languages.Xml;
                    break;
            }

            if (editor == null)
                return;

            var itok = e.HitTestResult.Token;
            var t =
                new Token(
                    itok.StartOffset,
                    itok.EndOffset,
                    itok.ID,
                    itok.Key,
                    editor.Document.GetTokenText(itok));

            var arg =
                new MouseHoverOverTokenEventArgs(
                    lang,
                    t,
                    e.HitTestResult.DocumentLine.Index + 1);

            MouseHoveringOverToken(this, arg);
            if (!string.IsNullOrEmpty(arg.TooltipText))
                e.ToolTipText = arg.TooltipText;
        }
示例#2
0
        private static string FindAndConcatTokens(Token hoverToken, Token[] lineTokens)
        {
            string szFullToken = null;

            // Check if the token the mouse is hovering over is valid or not
            if (IsInvalidToken(hoverToken))
                return null;

            // Ignore whitespace the mouse is on
            if (hoverToken.TokenType == "WhitespaceToken")
                return null;

            var iIndex = -1;

            // Find the actual token the mouse is hovering over on the line
            for (var i = 0; (i < lineTokens.Length) && (iIndex == -1); i++)
            {
                if ((lineTokens[i].StartOffset == hoverToken.StartOffset) &&
                    (lineTokens[i].EndOffset == hoverToken.EndOffset))
                    iIndex = i;
            }

            // Concatenate together valid tokens
            if (iIndex != -1)
            {
                szFullToken = lineTokens[iIndex].Lexeme;

                //OutDevice.OutLine(MessageType.Info, "- [Index: " + iIndex.ToString() + "] of [Total: " + lineTokens.Length + "] [" + lineTokens[iIndex].Lexeme + "] [" + lineTokens[iIndex].TokenType + "]");

                var bStop = false;

                for (var i = iIndex + 1; (i < lineTokens.Length) && !bStop; i++)
                {
                    if (!IsInvalidToken(lineTokens[i]))
                        szFullToken = szFullToken + lineTokens[i].Lexeme;
                    else
                        bStop = true;
                }

                bStop = false;

                for (var i = iIndex - 1; (i >= 0) && !bStop; i--)
                {
                    if (!IsInvalidToken(lineTokens[i]))
                        szFullToken = lineTokens[i].Lexeme + szFullToken;
                    else
                        bStop = true;
                }

                // Remove spaces
                szFullToken = szFullToken.Trim();
                // Convert [ to .
                szFullToken = szFullToken.Replace('[', '.');
                // Remove ]
                szFullToken = szFullToken.Replace("]", String.Empty);
            }

            return szFullToken;
        }
示例#3
0
        /// <summary>
        /// Returns true or false if the token is valid or not (ie. it can
        /// be part of a Lua variable)
        /// <remarks>This isn't 100% accurate but returns a good enough
        /// result since the returned concatenated result still has to
        /// be looked up as a valid variable anyways.</remarks>
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private static bool IsInvalidToken(Token token)
        {
            var iHashCode = token.TokenType.GetHashCode();

            // Special case for PunctuationToken
            if (iHashCode == -1613044712)
            {
                if (token.Lexeme != ".")
                    return true;
            }

            return s_syntaxEditorTokenHashes.ContainsKey(iHashCode);
        }
 /// <summary>
 /// Construct a new MouseHoverOverTokenEventArgs with the specified arguments
 /// </summary>
 /// <param name="language">language</param>
 /// <param name="token">Token type</param>        
 /// <param name="lineNumber">the line number of the token</param>
 public MouseHoverOverTokenEventArgs(Languages language,Token token, int lineNumber)
 {
     Language = language;
     Token = token;            
     LineNumber = lineNumber;            
 }