private void Categories_SelectionChanged(object sender, SelectionChangedEventArgs e) { Search.Text = ""; var selected = Categories.SelectedItem as string; VisibleConstants = ConstantDB?.GetCategory(selected); }
public CalculatorEngine() { TrigonometryMode = TrigonometryMode.DEG; ConstantDB = new ConstantDB(); _linebuffer = new StringBuilder(); _functioncache = new Dictionary <string, FunctionInformation>(); _preprocessor = new Preprocessor(_functioncache, ConstantDB); var options = new Dictionary <string, object>(); options["DivisionOptions"] = PythonDivisionOptions.New; _history = new ZeroStream(); _output = new EventRedirectedStreamWriter(_history); _output.StreamWasWritten += _output_StreamWasWritten; _engine = Python.CreateEngine(options); _engine.Runtime.IO.SetOutput(_history, _output); _engine.Runtime.IO.SetErrorOutput(_history, _output); _scope = _engine.CreateScope(); _functionTypes = new Type[] { typeof(Trigonometry), typeof(Engineering), typeof(GeneralFunctions), typeof(Variations), typeof(TypeFunctions), typeof(Statistics) }; FunctionCache.Fill(ref _functioncache, ref _scope, _functionTypes); }
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { if (string.IsNullOrEmpty(Search.Text)) { ResetCategoryFiltering(ConstantDB); } else { VisibleConstants = ConstantDB.SearchByName(Search.Text); } }
/// <summary> /// Pre process calculator raw input /// </summary> /// <param name="input">raw input</param> /// <returns>executable python code</returns> public string PreProcess(string input, bool multiline = false) { var lines = input.Split('\n'); var processed = new StringBuilder(); foreach (var line in lines) { if (ShouldSkip(line)) { continue; } var parts = Regex.Split(line, @"(\+)|(\-)|(\*)|(\()|(\))|(\×)|(\×)|(\÷)|(\%)|(\,)|(\|AND\|)|(\|OR\|)|(\|NOT\|)|(\|XOR\|)|(\|SHL\|)|(\|SHR\|)"); string temp; for (int i = 0; i < parts.Length; i++) { if (string.IsNullOrWhiteSpace(parts[i])) { continue; } if (!multiline) { parts[i] = parts[i].Trim(); } if (parts[i] == "×") { parts[i] = "*"; } else if (parts[i] == "÷") { parts[i] = "/"; } else if (parts[i].StartsWith("&")) { parts[i] = ConstantDB.Lookup(parts[i]).ToString(CultureInfo.InvariantCulture); } else if (_functioncache.ContainsKey(parts[i])) { parts[i] = _functioncache[parts[i]]; } else { var result = ParseNumber(out temp, parts[i]); if (result) { parts[i] = temp; } } } for (int i = 0; i < parts.Length; i++) { if (string.IsNullOrWhiteSpace(parts[i])) { continue; } processed.Append(parts[i]); if (i != (parts.Length - 1) && parts[i] != "(" && parts[i] != ")") { processed.Append(" "); } } processed.Append("\n"); } return(processed.ToString()); }