diff --git a/Plugins/Wox.Plugin.Calculator/Languages/de.xaml b/Plugins/Wox.Plugin.Calculator/Languages/de.xaml index 02c51e8c7..286e4bc9b 100644 --- a/Plugins/Wox.Plugin.Calculator/Languages/de.xaml +++ b/Plugins/Wox.Plugin.Calculator/Languages/de.xaml @@ -4,5 +4,7 @@ Rechner Stellt mathematische Berechnungen bereit.(Versuche 5*3-2 in Wox) - + Keine Zahl (NaN) + Ausdruck falsch oder nicht vollständig (Klammern vergessen?) + Diese Zahl in die Zwischenablage kopieren \ No newline at end of file diff --git a/Plugins/Wox.Plugin.Calculator/Languages/en.xaml b/Plugins/Wox.Plugin.Calculator/Languages/en.xaml index 833a0c14b..3b5fa32b3 100644 --- a/Plugins/Wox.Plugin.Calculator/Languages/en.xaml +++ b/Plugins/Wox.Plugin.Calculator/Languages/en.xaml @@ -4,5 +4,7 @@ Calculator Allows to do mathematical calculations.(Try 5*3-2 in Wox) - + Not a number (NaN) + Expression wrong or incomplete (Did you forget some parentheses?) + Copy this number to the clipboard \ No newline at end of file diff --git a/Plugins/Wox.Plugin.Calculator/Main.cs b/Plugins/Wox.Plugin.Calculator/Main.cs index 42f592b18..fab0b8e03 100644 --- a/Plugins/Wox.Plugin.Calculator/Main.cs +++ b/Plugins/Wox.Plugin.Calculator/Main.cs @@ -1,15 +1,14 @@ using System.Collections.Generic; -using System.Globalization; using System.Runtime.InteropServices; using System.Text.RegularExpressions; using System.Windows; -using YAMP; +using Mages.Core; namespace Wox.Plugin.Caculator { public class Main : IPlugin, IPluginI18n { - private static Regex regValidExpressChar = new Regex( + private static readonly Regex RegValidExpressChar = new Regex( @"^(" + @"ceil|floor|exp|pi|e|max|min|det|abs|log|ln|sqrt|" + @"sin|cos|tan|arcsin|arccos|arctan|" + @@ -18,64 +17,70 @@ namespace Wox.Plugin.Caculator @"==|~=|&&|\|\||" + @"[ei]|[0-9]|[\+\-\*\/\^\., ""]|[\(\)\|\!\[\]]" + @")+$", RegexOptions.Compiled); - private static Regex regBrackets = new Regex(@"[\(\)\[\]]", RegexOptions.Compiled); - private static ParseContext yampContext; - private PluginInitContext context { get; set; } - private NumberTranslator _numberTranslator; + private static readonly Regex RegBrackets = new Regex(@"[\(\)\[\]]", RegexOptions.Compiled); + private static readonly Engine MagesEngine; + private PluginInitContext Context { get; set; } static Main() { - yampContext = Parser.PrimaryContext; - Parser.InteractiveMode = false; - Parser.UseScripting = false; + MagesEngine = new Engine(); } public List Query(Query query) { if (query.Search.Length <= 2 // don't affect when user only input "e" or "i" keyword - || !regValidExpressChar.IsMatch(query.Search) + || !RegValidExpressChar.IsMatch(query.Search) || !IsBracketComplete(query.Search)) return new List(); try { - var result = yampContext.Run(this._numberTranslator?.Translate(query.Search) ?? query.Search); - if (result.Output != null && !string.IsNullOrEmpty(result.Result)) + var result = MagesEngine.Interpret(query.Search); + + if (result.ToString() == "NaN") + result = Context.API.GetTranslation("wox_plugin_calculator_not_a_number"); + + if (result is Function) + result = Context.API.GetTranslation("wox_plugin_calculator_expression_not_complete"); + + + if (!string.IsNullOrEmpty(result?.ToString())) { - string resultValue = this._numberTranslator?.TranslateBack(result.Result) ?? result.Result; return new List { new Result { - Title = resultValue, + Title = result.ToString(), IcoPath = "Images/calculator.png", Score = 300, - SubTitle = "Copy this number to the clipboard", + SubTitle = Context.API.GetTranslation("wox_plugin_calculator_copy_number_to_clipboard"), Action = c => { try { - Clipboard.SetText(resultValue); + Clipboard.SetText(result.ToString()); return true; } - catch (ExternalException e) + catch (ExternalException) { MessageBox.Show("Copy failed, please try later"); return false; } } - } + } }; } } catch - { } + { + // ignored + } return new List(); } private bool IsBracketComplete(string query) { - var matchs = regBrackets.Matches(query); + var matchs = RegBrackets.Matches(query); var leftBracketCount = 0; foreach (Match match in matchs) { @@ -94,18 +99,17 @@ namespace Wox.Plugin.Caculator public void Init(PluginInitContext context) { - this.context = context; - this._numberTranslator = NumberTranslator.Create(CultureInfo.CurrentCulture, CultureInfo.InvariantCulture); + Context = context; } public string GetTranslatedPluginTitle() { - return context.API.GetTranslation("wox_plugin_caculator_plugin_name"); + return Context.API.GetTranslation("wox_plugin_caculator_plugin_name"); } public string GetTranslatedPluginDescription() { - return context.API.GetTranslation("wox_plugin_caculator_plugin_description"); + return Context.API.GetTranslation("wox_plugin_caculator_plugin_description"); } } } diff --git a/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj b/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj index c65590ea7..8fd3169a8 100644 --- a/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj +++ b/Plugins/Wox.Plugin.Calculator/Wox.Plugin.Calculator.csproj @@ -38,14 +38,14 @@ ..\..\packages\JetBrains.Annotations.10.3.0\lib\net\JetBrains.Annotations.dll True + + ..\..\packages\Mages.1.5.0\lib\net35\Mages.Core.dll + True + - - ..\..\packages\YAMP.1.4.0\lib\net35\YAMP.dll - True - diff --git a/Plugins/Wox.Plugin.Calculator/packages.config b/Plugins/Wox.Plugin.Calculator/packages.config index d1fce409f..c17f6726f 100644 --- a/Plugins/Wox.Plugin.Calculator/packages.config +++ b/Plugins/Wox.Plugin.Calculator/packages.config @@ -1,6 +1,6 @@  + - \ No newline at end of file