Exemplo n.º 1
0
        private void SearchKeywordAction()
        {
            KeywordFinder finder        = new KeywordFinder();
            int           matchedNumber = finder.FindMatchedKeyword(SelectedFilePath, KeywordToSearch);

            SearchResult = matchedNumber + " keyword find in the file.";
        }
        public void Should_Highlight_Keywords_In_Input()
        {
            List <Keyword> keywords = new List <Keyword>
            {
                new Keyword("as", "blue", "capital", "normal"),
                new Keyword("if", "red", "lower", "bold"),
                new Keyword("and", "red", "capital", "bold"),
                new Keyword("then", "green", "lower", "normal"),
                new Keyword("when", "blue", "lower", "normal"),
            };

            //string input = "If we write a program and compile it, then we can run the program to get output";
            string input = "If we write a program and compile it, then as we run the program, we will get output";

            var keywordFinder = new KeywordFinder(keywords);
            var highLigher    = new HighLighter(
                keywordFinder,
                new IDecorater[]
            {
                new WordCasing(),
                new WordStyle(),
                new Colorization(),
            });

            var result = highLigher.HighLight(input);

            //var expected = "[red]If[red] we write a program [red]and[red] compile it, [blue]then[blue] we can run the program to get output";
            //var expected = "[red]If[red] we write a program [red]and[red] compile it, [green]then[green] [blue]as[blue] we run the program, we will get output";
            //var expected = "[red]if[red] we write a program [red]AND[red] compile it, [green]then[green] [blue]AS[blue] we run the program, we will get output";
            var expected = "[red][bold]if[bold][red] we write a program [red][bold]AND[bold][red] compile it, [green]then[green] [blue]AS[blue] we run the program, we will get output";

            Assert.Equal(expected, result);
        }
Exemplo n.º 3
0
        public void FindMatchedKeyword_Return1MatchedKeyword()
        {
            IFileReader fakeFileReader = new FileReaderMock()
            {
                TextInFile = "Hello Mock!!!"
            };
            KeywordFinder keywordFinder = new KeywordFinder(fakeFileReader);

            int actualResult = keywordFinder.FindMatchedKeyword(string.Empty, "Hello");

            int expectedResult = 1;

            Assert.AreEqual(expectedResult, actualResult);
        }
        public void FindMatchedKeyword_Return3MatchedKeyword()
        {
            string textInFile = "Hello Integration Tests!!! Hello hello";
            string filePath   = @"C:\temp\FileForFindMatchedKeywordIntegrationTests.txt";

            File.WriteAllText(filePath, textInFile);

            KeywordFinder keywordFinder = new KeywordFinder();
            int           actualResult  = keywordFinder.FindMatchedKeyword(filePath, "Hello");

            int expectedResult = 3;

            Assert.AreEqual(expectedResult, actualResult);

            //File.Delete(filePath);
        }
Exemplo n.º 5
0
        private static List <string> SearchKeywords(string path, string filter, string[] excludedPaths)
        {
            List <string> keywords = new List <string>();

            string[]      searchFiles = Directory.GetFiles(path, filter, SearchOption.AllDirectories);
            KeywordFinder finder      = new KeywordFinder();

            foreach (string file in searchFiles)
            {
                if (!excludedPaths.Any(p => file.IndexOf(p, StringComparison.OrdinalIgnoreCase) >= 0))
                {
                    var lines = File.ReadLines(file).ToList();
                    keywords = keywords.Union(finder.FindAll(file, lines)).ToList();
                }
            }
            return(keywords);
        }
Exemplo n.º 6
0
        private void LoadMainEvents(EventOptions options)
        {
            CurrentEventsTable.Controls.Clear();

            // Get events
            List <EventBrief> events    = Program.DataProvider.GetEventsBrief(options);
            List <int>        scores    = new List <int>();
            List <double>     distances = new List <double>();

            // Calculate distances
            UserData user           = Program.UserDataManager.GetData();
            bool     isAddressAdded = !(user.Address == "" || user.Address == null || (user.Latitude == 0 && user.Longitude == 0));

            foreach (var evBrief in events)
            {
                distances.Add(MathSupplement.Distance(user.Latitude, user.Longitude, evBrief.Latitude, evBrief.Longitude));
            }

            if (options.Keywords.Count > 0)
            {
                // Calculate scores
                KeywordFinder kFinder = new KeywordFinder();
                foreach (var evBrief in events)
                {
                    DataList @event = evBrief.ToDataList();
                    scores.Add(kFinder.Find(options.Keywords.ToArray(), @event));
                }

                // Sort by score
                EventBrief[] eventArray = events.ToArray();
                int[]        scoreArray = scores.ToArray();
                Array.Sort(scoreArray, eventArray);
                events = eventArray.ToList();
                scores = scoreArray.ToList();
                events.Reverse();
                scores.Reverse();
            }
            else
            {
                // Sort by distance
                EventBrief[] eventArray    = events.ToArray();
                double[]     distanceArray = distances.ToArray();
                Array.Sort(distanceArray, eventArray);
                events    = eventArray.ToList();
                distances = distanceArray.ToList();
            }

            // Add all of them to a list
            int col   = 0;
            int count = 0;

            foreach (var eBrief in events)
            {
                // Skip events with 0 score
                if (scores.Count > 0)
                {
                    if (scores[count] == 0)
                    {
                        count++;
                        continue;
                    }
                }

                // Main container
                Panel eventPanel = new Panel();
                eventPanel.AutoSize    = false;
                eventPanel.Size        = new Size(240, 238);
                eventPanel.Margin      = new Padding(43, 10, 43, 10);
                eventPanel.BorderStyle = BorderStyle.Fixed3D;

                eventPanel.Click += (sender, e) =>
                {
                    try
                    {
                        new UiEventDisplay(eBrief.Id, this).Show();
                    }
                    catch { }
                };

                // Thumbnail
                PictureBox thumbnail = new PictureBox();
                thumbnail.Size     = new Size(240, 180);
                thumbnail.Location = new Point(0, 0);
                thumbnail.Click   += (sender, e) =>
                {
                    try
                    {
                        new UiEventDisplay(eBrief.Id, this).Show();
                    }
                    catch { }
                };
                try
                {
                    using (WebClient client = new WebClient())
                    {
                        Stream stream       = client.OpenRead(eBrief.Images[0]);
                        Bitmap bitmap       = new Bitmap(stream);
                        Bitmap bitmapScaled = new Bitmap(bitmap, new Size(240, 180));
                        thumbnail.Image = bitmapScaled;

                        stream.Flush();
                        stream.Close();
                    }
                }
                catch
                {
                }

                // Name label
                Label eventName = new Label();
                eventName.Text        = eBrief.Name;
                eventName.AutoSize    = true;
                eventName.Location    = new Point(0, 180);
                eventName.MinimumSize = new Size(240, 30);
                eventName.Font        = new Font("Arial Rounded", 12, FontStyle.Bold);
                eventName.BackColor   = Color.FromArgb(240, 240, 240);
                eventName.TextAlign   = ContentAlignment.MiddleLeft;

                // Sport label
                Label eventSports = new Label();
                eventSports.Text = "";
                eventSports.Font = new Font("Arial", 11);
                foreach (var sport in eBrief.Sports)
                {
                    eventSports.Text += $"{sport}  ";
                }
                eventSports.AutoSize  = false;
                eventSports.Location  = new Point(0, 210);
                eventSports.Size      = new Size(180, 25);
                eventSports.BackColor = Color.FromArgb(230, 230, 230);
                eventSports.TextAlign = ContentAlignment.MiddleLeft;

                // Distance label
                Label eventDistance = new Label();
                eventDistance.Text      = "";
                eventDistance.Font      = new Font("Arial", 11, FontStyle.Bold);
                eventDistance.Text     += $"{distances[count] / 1000.0:0.0}km";
                eventDistance.AutoSize  = false;
                eventDistance.Location  = new Point(180, 210);
                eventDistance.Size      = new Size(60, 25);
                eventDistance.BackColor = Color.FromArgb(230, 230, 230);
                eventDistance.TextAlign = ContentAlignment.MiddleCenter;
                if (!isAddressAdded)
                {
                    eventDistance.Text = "";
                }

                // Add everything
                eventPanel.Controls.Add(thumbnail);
                eventPanel.Controls.Add(eventName);
                eventPanel.Controls.Add(eventSports);
                eventPanel.Controls.Add(eventDistance);

                CurrentEventsTable.Controls.Add(eventPanel, col, count / CurrentEventsTable.ColumnCount);

                col = (++col) % CurrentEventsTable.ColumnCount;
                count++;

                // Redraw
                Invalidate();
            }

            CurrentEventsTable.RowCount = (events.Count + 1) / CurrentEventsTable.ColumnCount;
        }
Exemplo n.º 7
0
        private void LoadMainEvents(EventOptions options)
        {
            eventGridPanel.Controls.Clear();

            // Get events
            List <EventBrief> events    = Program.DataProvider.GetEventsBrief(options);
            List <int>        scores    = new List <int>();
            List <double>     distances = new List <double>();

            // Filter invisible
            if (!showInvisibleEventsCheckBox.Checked)
            {
                events = events.Where(item => item.Visible).ToList();
            }

            // Calculate distances
            UserData user           = Program.UserDataManager.GetData();
            bool     isAddressAdded = !(user.Address == "" || user.Address == null || (user.Latitude == 0 && user.Longitude == 0));

            foreach (var evBrief in events)
            {
                distances.Add(MathSupplement.Distance(user.Latitude, user.Longitude, evBrief.Latitude, evBrief.Longitude));
            }

            if (options.Keywords.Count > 0)
            {
                // Calculate scores
                KeywordFinder kFinder = new KeywordFinder();
                foreach (var evBrief in events)
                {
                    DataList @event = evBrief.ToDataList();
                    scores.Add(kFinder.Find(options.Keywords.ToArray(), @event));
                }

                // Sort by score
                EventBrief[] eventArray = events.ToArray();
                int[]        scoreArray = scores.ToArray();
                Array.Sort(scoreArray, eventArray);
                events = eventArray.ToList();
                scores = scoreArray.ToList();
                events.Reverse();
                scores.Reverse();
            }
            else
            {
                // Sort by distance
                EventBrief[] eventArray    = events.ToArray();
                double[]     distanceArray = distances.ToArray();
                Array.Sort(distanceArray, eventArray);
                events    = eventArray.ToList();
                distances = distanceArray.ToList();
            }

            // Grid variables
            int COL_COUNT     = 3;
            int ROW_COUNT     = (events.Count + COL_COUNT - 1) / COL_COUNT;
            int IMAGE_WIDTH   = 304;
            int IMAGE_HEIGHT  = 171;
            int BANNER_HEIGHT = 60;
            int START_HEIGHT  = 350;
            int MARGINS       = (1000 - IMAGE_WIDTH * COL_COUNT) / (COL_COUNT + 1);

            // Calculate size of event grid panel
            eventGridPanel.Size     = new Size(1000, MARGINS + (IMAGE_HEIGHT + BANNER_HEIGHT + MARGINS) * ROW_COUNT);
            eventGridPanel.Location = new Point(0, START_HEIGHT);
            mainPanel.Size          = new Size(1000, START_HEIGHT + eventGridPanel.Size.Height);

            // Add all of them to a list
            int col   = 0;
            int count = 0;

            foreach (var eBrief in events)
            {
                // Skip events with 0 score
                if (scores.Count > 0)
                {
                    if (scores[count] == 0)
                    {
                        count++;
                        continue;
                    }
                }

                // Main container
                Panel eventPanel = new Panel();
                eventPanel.AutoSize    = false;
                eventPanel.Size        = new Size(IMAGE_WIDTH, IMAGE_HEIGHT + BANNER_HEIGHT);
                eventPanel.BorderStyle = BorderStyle.FixedSingle;
                eventPanel.Click      += (sender, e) =>
                {
                    try
                    {
                        mainForm.ShowPanel(new UiEventDisplayPanel(eBrief.Id, this));
                        //new UiEventDisplay(eBrief.Id, this).Show();
                    }
                    catch
                    {
                        mainForm.ShowPanel(this);
                    }
                };

                // Calculate position of event panel
                eventPanel.Location = new Point
                                      (
                    MARGINS + (IMAGE_WIDTH + MARGINS) * col,
                    (IMAGE_HEIGHT + BANNER_HEIGHT + MARGINS) * (count / 3)
                                      );

                // Thumbnail
                PictureBox thumbnail = new PictureBox();
                thumbnail.Size     = new Size(IMAGE_WIDTH, IMAGE_HEIGHT);
                thumbnail.Location = new Point(0, 0);
                thumbnail.Click   += (sender, e) =>
                {
                    try
                    {
                        mainForm.ShowPanel(new UiEventDisplayPanel(eBrief.Id, this));
                        //new UiEventDisplay(eBrief.Id, this).Show();
                    }
                    catch { }
                };
                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, e) =>
                {
                    try
                    {
                        using (WebClient client = new WebClient())
                        {
                            Stream stream = client.OpenRead(eBrief.Images[0]);
                            Bitmap bitmap = new Bitmap(stream);

                            thumbnail.Image = Helper.ScaleBitmap(bitmap, IMAGE_WIDTH, IMAGE_HEIGHT, 16.0f / 9.0f);

                            stream.Flush();
                            stream.Close();
                        }
                    }
                    catch { }
                };
                worker.RunWorkerAsync();

                // Info panel
                Panel infoPanel = new Panel();
                infoPanel.Location = new Point(0, IMAGE_HEIGHT);
                infoPanel.Size     = new Size(IMAGE_WIDTH, BANNER_HEIGHT);

                if (!eBrief.Visible)
                {
                    infoPanel.BackColor = Color.FromArgb(255, 200, 200);
                }

                // Name label
                Label eventName = new Label();
                eventName.Text     = eBrief.Name;
                eventName.AutoSize = false;
                eventName.Location = new Point(10, 0);
                eventName.Size     = new Size(IMAGE_WIDTH - 20, 30);
                //eventName.Font = new Font("Segoe UI Semibold", 12);
                eventName.Font      = new Font("Arial", 12);
                eventName.ForeColor = Color.FromArgb(16, 16, 16);
                //eventName.BackColor = Color.White;
                eventName.TextAlign = ContentAlignment.MiddleLeft;

                int attempt = 0;
                while (true)
                {
                    Size nameSize = Helper.CalculateLabelSize(eventName, 1000);
                    if (nameSize.Width > eventName.Size.Width - 20)
                    {
                        eventName.Text = eventName.Text.Remove(eventName.Text.Length - 1);
                        attempt++;
                        continue;
                    }
                    else
                    {
                        if (attempt != 0)
                        {
                            eventName.Text += "...";

                            // Create tooltip
                            ToolTip fullEventName = new ToolTip();
                            fullEventName.SetToolTip(eventName, eBrief.Name);
                        }
                        break;
                    }
                }

                // Distance label
                Label distanceLabel = new Label();
                distanceLabel.Font      = new Font("Arial", 9);
                distanceLabel.ForeColor = Color.Gray;
                distanceLabel.Location  = new Point(10, 25);
                distanceLabel.AutoSize  = false;
                distanceLabel.TextAlign = ContentAlignment.MiddleCenter;

                double distance = MathSupplement.Distance(eBrief.Latitude, eBrief.Longitude, user.Latitude, user.Longitude);
                if (distance < 1000.0)
                {
                    distanceLabel.Text = $"{distance:0}m";
                }
                else
                {
                    distanceLabel.Text = $"{distance / 1000.0:0.0}km";
                }

                Size distanceLabelSize = Helper.CalculateLabelSize(distanceLabel, IMAGE_WIDTH);
                distanceLabel.Size = new Size(distanceLabelSize.Width, 30);

                // Separator panel
                Panel separatorPanel1 = new Panel();
                separatorPanel1.Location    = new Point(distanceLabel.Location.X + distanceLabel.Size.Width + 5, 33);
                separatorPanel1.Size        = new Size(1, 16);
                separatorPanel1.BorderStyle = BorderStyle.FixedSingle;

                // Sport label
                Label sportLabel = new Label();
                sportLabel.Font      = new Font("Arial", 9);
                sportLabel.ForeColor = Color.Gray;
                sportLabel.Location  = new Point(distanceLabel.Location.X + distanceLabel.Size.Width + 12, 25);
                sportLabel.AutoSize  = false;
                sportLabel.TextAlign = ContentAlignment.MiddleCenter;
                try { sportLabel.Text = eBrief.Sports[0]; } catch { sportLabel.Text = ""; }

                Size sportLabelSize = Helper.CalculateLabelSize(sportLabel, IMAGE_WIDTH);
                sportLabel.Size = new Size(sportLabelSize.Width, 30);

                // Separator panel
                Panel separatorPanel2 = new Panel();
                separatorPanel2.Location    = new Point(sportLabel.Location.X + sportLabel.Size.Width + 5, 33);
                separatorPanel2.Size        = new Size(1, 16);
                separatorPanel2.BorderStyle = BorderStyle.FixedSingle;

                // Date label
                Label dateLabel = new Label();
                dateLabel.Font      = new Font("Arial", 9);
                dateLabel.ForeColor = Color.Gray;
                dateLabel.Location  = new Point(sportLabel.Location.X + sportLabel.Size.Width + 12, 25);
                dateLabel.AutoSize  = false;
                dateLabel.TextAlign = ContentAlignment.MiddleCenter;
                { // Create date/time label
                    string finalString = "";

                    if ((DateTime.Now - eBrief.StartDate).Ticks > 0)
                    {
                        int daysAgo = (DateTime.Now - eBrief.StartDate).Days;
                        finalString += $"Happened ";
                        if (daysAgo == 0)
                        {
                            finalString += "today";
                        }
                        else if (daysAgo == 1)
                        {
                            finalString += $"{daysAgo} day ago";
                        }
                        else
                        {
                            finalString += $"{daysAgo} days ago";
                        }
                    }
                    else
                    {
                        if (eBrief.StartDate.Year != DateTime.Now.Year)
                        {
                            finalString += $"{eBrief.StartDate:yyyy-MM-dd HH:mm}";
                        }
                        else
                        {
                            if ((eBrief.StartDate - DateTime.Now).TotalDays == 1)
                            {
                                finalString += $"Tomorrow, {eBrief.StartDate:HH:mm}";
                            }
                            else if ((eBrief.StartDate - DateTime.Now).TotalDays < 1)
                            {
                                finalString += $"Today, {eBrief.StartDate:HH:mm}";
                            }
                            else
                            {
                                finalString += $"{eBrief.StartDate:MMMM dd, HH:mm}";
                            }
                        }
                    }
                    dateLabel.Text = finalString;
                }

                Size dateLabelSize = Helper.CalculateLabelSize(dateLabel, IMAGE_WIDTH);
                dateLabel.Size = new Size(dateLabelSize.Width, 30);


                infoPanel.Controls.Add(eventName);
                infoPanel.Controls.Add(distanceLabel);
                infoPanel.Controls.Add(separatorPanel1);
                infoPanel.Controls.Add(sportLabel);
                infoPanel.Controls.Add(separatorPanel2);
                infoPanel.Controls.Add(dateLabel);

                //// Sport label
                //Label eventSports = new Label();
                //eventSports.Text = "";
                //eventSports.Font = new Font("Arial", 11);
                //foreach (var sport in eBrief.Sports)
                //{
                //    eventSports.Text += $"{sport}  ";

                //}
                //eventSports.AutoSize = false;
                //eventSports.Location = new Point(0, 210);
                //eventSports.Size = new Size(180, 25);
                //eventSports.BackColor = Color.FromArgb(230, 230, 230);
                //eventSports.TextAlign = ContentAlignment.MiddleLeft;

                //// Distance label
                //Label eventDistance = new Label();
                //eventDistance.Text = "";
                //eventDistance.Font = new Font("Arial", 11, FontStyle.Bold);
                //eventDistance.Text += $"{distances[count] / 1000.0:0.0}km";
                //eventDistance.AutoSize = false;
                //eventDistance.Location = new Point(180, 210);
                //eventDistance.Size = new Size(60, 25);
                //eventDistance.BackColor = Color.FromArgb(230, 230, 230);
                //eventDistance.TextAlign = ContentAlignment.MiddleCenter;
                //if (!isAddressAdded)
                //{
                //    eventDistance.Text = "";
                //}

                // Add everything
                eventPanel.Controls.Add(thumbnail);
                eventPanel.Controls.Add(infoPanel);
                //eventPanel.Controls.Add(eventSports);
                //eventPanel.Controls.Add(eventDistance);

                eventGridPanel.Controls.Add(eventPanel);

                col = (++col) % COL_COUNT;
                count++;

                if (mainForm != null)
                {
                    mainForm.FitCurrentPanel();
                }

                // Redraw
                Invalidate();
            }
        }