private void Categories_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Search.Text = "";
            var selected = Categories.SelectedItem as string;

            VisibleConstants = ConstantDB?.GetCategory(selected);
        }
Example #2
0
        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);
     }
 }
Example #4
0
        /// <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());
        }