/// <inheritdoc cref="TextBox{TRenderHookState}.IContentsRenderer.Render"/> public void Render(bool active, TextBox <State> textBox, State state, int startOffset) { var text = textBox.Value.ToUpperInvariant(); var parser = new MrrcParser(text); var tokens = parser.Tokenise(true, false); var lastIndex = 0; foreach (var token in tokens) { var startedBefore = lastIndex <= startOffset; var source = text.Substring(lastIndex, token.Content.Length); lastIndex += token.Content.Length; if (lastIndex <= startOffset) { continue; } Console.ForegroundColor = TokenColours[token.Type]; Console.Write(startedBefore ? source.Substring(startOffset - lastIndex + source.Length) : source); } }
private void FleetSearchOnSearch(object sender, Form.SubmittedEventArgs e) { var options = _fleet.Vehicles.Select(v => new[] { new Tuple <string, Vehicle>(v.Registration.ToString(), v), new Tuple <string, Vehicle>(v.Grade.ToString(), v), new Tuple <string, Vehicle>(v.Make, v), new Tuple <string, Vehicle>(v.Model, v), new Tuple <string, Vehicle>(v.Year.ToString(), v), new Tuple <string, Vehicle>(v.SeatCount.ToString(), v), new Tuple <string, Vehicle>(v.Transmission.ToString(), v), new Tuple <string, Vehicle>(v.Fuel.ToString(), v), new Tuple <string, Vehicle>(v.HasGps ? "GPS" : "No GPS", v), new Tuple <string, Vehicle>(v.HasSunRoof ? "Sun roof" : "No sun roof", v), new Tuple <string, Vehicle>(v.Colour, v), new Tuple <string, Vehicle>($"{v.SeatCount} seats", v), }).SelectMany(it => it).ToArray(); if (e.Data.Get <string>("Search").IsEmpty()) { e.Result = "Enter a search term"; return; } var parser = new MrrcParser(e.Data.Get <string>("Search").ToUpperInvariant()); var result = parser.Parse(parser.Tokenise()); if (result is FailedParseResult <Expression> failure) { e.Result = failure.Message; return; } var success = (SuccessfulParseResult <Expression>)result; var matches = success.Result.Matches(options); var individualMatches = matches.Item1 .Select(it => it.Item2) .Distinct() .Where(it => !matches.Item2.Contains(it)) .ToArray(); if (individualMatches.Length == 0) { e.Result = "No results where found"; return; } var fleetList = FleetSearch.GetComponent <Form>("customer list"); fleetList.Set("Search", e.Data.Get <string>("Search")); fleetList.GetComponent <Select>("Results") .SetNewMembers(individualMatches.Select(m => m.ToString()).ToArray()); FleetSearch.ActiveComponent = "customer list"; }
private void CustomerSearchOnSearch(object sender, Form.SubmittedEventArgs e) { var options = _crm.Customers.Select(c => new[] { new Tuple <string, Customer>(c.Id.ToString(), c), new Tuple <string, Customer>(c.Title.ToString(), c), new Tuple <string, Customer>(c.GivenNames, c), new Tuple <string, Customer>(c.Surname, c), new Tuple <string, Customer>(c.Gender.ToString(), c) }).SelectMany(it => it).ToArray(); if (e.Data.Get <string>("Search").IsEmpty()) { e.Result = "Enter a search term"; return; } var parser = new MrrcParser(e.Data.Get <string>("Search").ToUpperInvariant()); var result = parser.Parse(parser.Tokenise()); if (result is FailedParseResult <Expression> failure) { e.Result = failure.Message; return; } var success = (SuccessfulParseResult <Expression>)result; var matches = success.Result.Matches(options); var individualMatches = matches.Item1 .Select(it => it.Item2) .Distinct() .Where(it => !matches.Item2.Contains(it)) .ToArray(); if (individualMatches.Length == 0) { e.Result = "No results where found"; return; } var customerList = CustomerSearch.GetComponent <Form>("customer list"); customerList.Set("Search", e.Data.Get <string>("Search")); customerList.GetComponent <Select>("Results") .SetNewMembers(individualMatches.Select(m => m.ToString()).ToArray()); CustomerSearch.ActiveComponent = "customer list"; }