コード例 #1
0
ファイル: Form2.cs プロジェクト: joeytall/Terminator2.5
        private void ScrollToLine(int lineNumber)
        {
            if (lineNumber > FilePeek.Lines.Count())
            {
                return;
            }

            int start  = FilePeek.GetFirstCharIndexFromLine(lineNumber),
                length = FilePeek.Lines[lineNumber].Length;

            FilePeek.Select(CurrentSelection[0], CurrentSelection[1]);
            //FilePeek.SelectionBackColor = Color.Black;

            CurrentSelection[0] = start;
            CurrentSelection[1] = length;
            FilePeek.Select(start, length);
            FilePeek.ScrollToCaret();
            //FilePeek.SelectionBackColor = Color.Gray;
        }
コード例 #2
0
ファイル: Form2.cs プロジェクト: joeytall/Terminator2.5
        public void InitFilePeek(string filePath = "")
        {
            string[] allLines = new string[] { };
            detailedSearch.Clear();

            if (filePath == "")
            {
                allLines = Regex.Split(FilePeek.Text, "\n");
            }
            else
            {
                string lastFolder = FolderName;
                FolderName    = Regex.Split(filePath, @"\\").Reverse().ElementAt(1);
                allLines      = File.ReadAllLines(filePath);
                FilePath      = filePath;
                FilePeek.Text = string.Join("\r\n", allLines);
                undoList.Push(FilePeek.Text);
            }

            int[] ASCIIquotes = { 34, 39 };
            Dictionary <int, int> quotationIndices = new Dictionary <int, int>();
            Dictionary <int, int> commentIndices   = new Dictionary <int, int>();
            bool isComment    = false;
            int  commentStart = 0;

            for (int lineNumber = 0; lineNumber < allLines.Length; lineNumber++)
            {
                string line         = allLines[lineNumber];
                string trimmedLine  = line.Trim();
                int    currentIndex = FilePeek.GetFirstCharIndexFromLine(lineNumber);
                if (trimmedLine.EndsWith("*/"))
                {
                    isComment = false;
                    if (!commentIndices.Keys.Contains(commentStart))
                    {
                        commentIndices.Add(commentStart, currentIndex - commentStart + line.Length);
                    }
                    continue;
                }
                else if (isComment == true)
                {
                    continue;
                }
                else if (trimmedLine.StartsWith("//"))
                {
                    commentIndices.Add(currentIndex, line.Length);
                    continue;
                }
                else if (trimmedLine.StartsWith("/*"))
                {
                    isComment    = true;
                    commentStart = currentIndex;
                    continue;
                }
                //else if (trimmedLine.Contains("</script>") && trimmedLine.Contains("</script>"))
                //    continue;
                //else if (trimmedLine.StartsWith("<") && trimmedLine.EndsWith(">"))
                //    continue;
                else if (line.Contains('\"') || line.Contains('\''))
                {
                    //int inLineCommentStart = line.IndexOf("//");
                    //if (inLineCommentStart > 0)
                    //    line = line.Substring(0, inLineCommentStart);
                    char quote           = '\0';
                    int  startquoteIndex = 0;
                    for (int i = 0; i < line.Length; i++)
                    {
                        char character = line[i],
                             nextChar  = i == line.Length - 1 ? '~' : line[i + 1],
                             prevChar  = i == 0 ? '~' : line[i - 1],
                             prevChar2 = i < 2 ? '~' : line[i - 2];
                        int ascii      = (int)character;
                        if (ascii == 92)
                        {
                            i++;
                            if (i > line.Length)
                            {
                                break;
                            }
                        }
                        else if (character == quote)
                        {
                            if (nextChar == ']' || nextChar == ':')
                            {
                                quote = '\0';
                                continue;
                            }
                            else
                            {
                                int key   = currentIndex + startquoteIndex,
                                    value = i - startquoteIndex + 1;
                                quotationIndices.Add(key, value);
                                quote = '\0';
                            }
                        }
                        else if (ASCIIquotes.Contains(ascii))
                        {
                            if (prevChar == '(' && prevChar2 == '$')
                            {
                                continue;
                            }
                            else
                            {
                                quote           = line[i];
                                startquoteIndex = i;
                            }
                        }
                    }
                }
            }

            List <string> exclude = new List <string>(new string[] { "\"\"", "{}", string.Empty });

            foreach (KeyValuePair <int, int> pair in quotationIndices)
            {
                string word = FilePeek.Text.Substring(pair.Key, pair.Value);
                if (!exclude.Contains(word) && word != "")
                {
                    int    lineNumber    = FilePeek.GetLineFromCharIndex(pair.Key);
                    string lineWithQuote = FilePeek.Lines[lineNumber];
                    LinesWIthQuote.Add(lineWithQuote);

                    if (!detailedSearch.ContainsKey(word))
                    {
                        detailedSearch.Add(word, new List <int>()
                        {
                            pair.Key
                        });
                    }
                    else
                    {
                        detailedSearch[word].Add(pair.Key);
                    }
                    FilePeek.Select(pair.Key, pair.Value);
                    FilePeek.SelectionBackColor = Color.PaleVioletRed;
                }
            }

            if (filePath != "")
            {
                this.Text += " - " + detailedSearch.Count + " suspect found!";
            }

            populateResultGrid();

            foreach (KeyValuePair <int, int> pair in commentIndices)
            {
                FilePeek.Select(pair.Key, pair.Value);
                FilePeek.SelectionColor = Color.Gray;
            }

            //FilePeek.WordWrap = true;
            FilePeek.DeselectAll();
        }