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); }
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); }
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); }
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; }
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(); } }