From f0cda2a80ff1513d97ed16dd176c44fb6dd81825 Mon Sep 17 00:00:00 2001 From: Liam Riddell <3812154+LiamRiddell@users.noreply.github.com> Date: Sun, 12 Nov 2023 15:37:26 +0000 Subject: [PATCH] 0.6.0 (#27) --- manifest.json | 4 +- package.json | 2 +- src/codemirror/MarkdownEditorViewPlugin.ts | 54 ++++++- src/providers/IProvider.ts | 1 + src/providers/ProviderBase.ts | 4 + src/providers/ProviderManager.ts | 9 +- .../arithmetic/BasicArithmeticProvider.ts | 5 + src/providers/datetime/DatetimeProvider.ts | 4 + .../function/FunctionArithmeticProvider.ts | 5 + .../PercentageArithmeticProvider.ts | 5 + .../uom/UnitsOfMeasurementProvider.ts | 5 + .../vector/VectorArithmeticProvider.ts | 5 + src/settings/PluginSettings.ts | 18 +++ src/settings/SettingsTab.ts | 132 +++++++++++++++++- src/settings/UserSettings.ts | 27 ++++ .../definition/IArithmeticProviderSettings.ts | 1 + .../definition/IDatetimeProviderSettings.ts | 1 + src/settings/definition/IEngineSettings.ts | 3 + .../IFuntionArithmeticProviderSettings.ts | 3 + .../IPercentageArithmeticProviderSettings.ts | 3 + src/settings/definition/IPluginSettings.ts | 10 ++ .../IUnitOfMeasurementProviderSettings.ts | 3 + .../IVectorArithmeticProviderSettings.ts | 3 + .../properties/ArithmeticProviderSettings.ts | 11 ++ .../properties/DatetimeProviderSettings.ts | 11 ++ src/settings/properties/EngineSettings.ts | 17 +++ .../FunctionArithmeticProviderSettings.ts | 17 +++ .../PercentageArithmeticProviderSettings.ts | 17 +++ .../UnitOfMeasurementProviderSettings.ts | 17 +++ .../VectorArithmeticProviderSettings.ts | 17 +++ versions.json | 5 +- 31 files changed, 404 insertions(+), 15 deletions(-) create mode 100644 src/settings/definition/IEngineSettings.ts create mode 100644 src/settings/definition/IFuntionArithmeticProviderSettings.ts create mode 100644 src/settings/definition/IPercentageArithmeticProviderSettings.ts create mode 100644 src/settings/definition/IUnitOfMeasurementProviderSettings.ts create mode 100644 src/settings/definition/IVectorArithmeticProviderSettings.ts create mode 100644 src/settings/properties/EngineSettings.ts create mode 100644 src/settings/properties/FunctionArithmeticProviderSettings.ts create mode 100644 src/settings/properties/PercentageArithmeticProviderSettings.ts create mode 100644 src/settings/properties/UnitOfMeasurementProviderSettings.ts create mode 100644 src/settings/properties/VectorArithmeticProviderSettings.ts diff --git a/manifest.json b/manifest.json index 58d9396..d6e5cec 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "solve", "name": "Solve", - "version": "0.5.1", + "version": "0.6.0", "minAppVersion": "0.15.0", "description": "Level Up Your Notes: Introducing Solve – Your Math Maestro! Real-time calculations without AI fuss. From date magic ('Now + 20 days') to arithmetic flair ('10 + 5'), your trusted sidekick in every note. More brilliance on the way!", "author": "Liam Riddell", @@ -11,4 +11,4 @@ "GitHub Sponser": "https://github.com/sponsors/LiamRiddell" }, "isDesktopOnly": false -} +} \ No newline at end of file diff --git a/package.json b/package.json index e251eaa..2f47aa3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solve", - "version": "0.5.1", + "version": "0.6.0", "description": "Level Up Your Notes: Introducing Solve – Your Math Maestro! Real-time calculations without AI fuss. From date magic ('Now + 20 days') to arithmetic flair ('10 + 5'), your trusted sidekick in every note. More brilliance on the way!", "main": "main.js", "scripts": { diff --git a/src/codemirror/MarkdownEditorViewPlugin.ts b/src/codemirror/MarkdownEditorViewPlugin.ts index 39b8b83..dd54428 100644 --- a/src/codemirror/MarkdownEditorViewPlugin.ts +++ b/src/codemirror/MarkdownEditorViewPlugin.ts @@ -1,6 +1,7 @@ import { ResultWidget } from "@/codemirror/widgets/ResultWidget"; import { pluginEventBus } from "@/eventbus/PluginEventBus"; import { IResult } from "@/results/definition/IResult"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; // @ts-expect-error import { syntaxTree } from "@codemirror/language"; @@ -19,6 +20,8 @@ import { solveProviderManager } from "../providers/ProviderManager"; export class MarkdownEditorViewPlugin implements PluginValue { public decorations: DecorationSet; + private userSettings: UserSettings; + private ignoreNodeForMaskString = [ "Document", "quote", @@ -31,6 +34,9 @@ export class MarkdownEditorViewPlugin implements PluginValue { constructor(view: EditorView) { logger.debug(`[SolveViewPlugin] Constructer`); + + this.userSettings = UserSettings.getInstance(); + this.decorations = this.buildDecorations(view); } @@ -140,8 +146,8 @@ export class MarkdownEditorViewPlugin implements PluginValue { continue; } - // Ignored nodes e.g. block qoutes (>), lists (-), checked list ([ ] Test) will leave the - // markdown formatting at the front we need these to be removed. + // Ignored nodes e.g. block qoutes (>), lists (-), checked list ([ ]) will remove the + // markdown formatting at the start of the string. lineText = lineText.replace( /^(?:(?:[-+*>]|(?:\[\s\])|(?:\d+\.))\s)+/m, "" @@ -192,15 +198,49 @@ export class MarkdownEditorViewPlugin implements PluginValue { } private provideDecoration(sentence: string) { + let isExplicitlyDefinedSentence = false; + + // When explicit mode is enabled the sentence will end with = sign. + // This needs to be removed in order for grammars to match. + if (this.userSettings.engine.explicitMode) { + if (sentence.trimEnd().endsWith("=")) { + sentence = sentence.substring(0, sentence.length - 1).trimEnd(); + isExplicitlyDefinedSentence = true; + } else { + return undefined; + } + } + // Initial implementation will show the first valid result from available providers. const result = solveProviderManager.provideFirst(sentence); - if (result !== undefined) { - return Decoration.widget({ - widget: new ResultWidget(result), - side: 1, - }); + if (result === undefined) { + return undefined; } + + // If the input sentence and the output is the same value ignore it. + // For example, 10 = 10 + const sentenceLowercasedTrimmed = sentence.toLowerCase().trim(); + const resultLowercaseTrimmed = result.startsWith("= ") + ? result.substring(2).toLocaleLowerCase().trim() + : result.toLowerCase().trim(); + + if (sentenceLowercasedTrimmed === resultLowercaseTrimmed) { + return undefined; + } + + // If we're in explicit mode, we should only show the result if it was defined explicitly `=` + if ( + this.userSettings.engine.explicitMode && + !isExplicitlyDefinedSentence + ) { + return undefined; + } + + return Decoration.widget({ + widget: new ResultWidget(result), + side: 1, + }); } //#region Variables diff --git a/src/providers/IProvider.ts b/src/providers/IProvider.ts index dcf8bda..5ed0c4a 100644 --- a/src/providers/IProvider.ts +++ b/src/providers/IProvider.ts @@ -1,5 +1,6 @@ export interface IProvider { name: string; + enabled(): boolean; provide(sentence: string, raw: boolean): T | undefined; } diff --git a/src/providers/ProviderBase.ts b/src/providers/ProviderBase.ts index f6facdc..80423db 100644 --- a/src/providers/ProviderBase.ts +++ b/src/providers/ProviderBase.ts @@ -12,6 +12,10 @@ export class ProviderBase implements IProvider { this.formatVisitor = new FormatVisitor(); } + public enabled(): boolean { + throw new Error("Method not implemented."); + } + public provide(sentence: string, raw: boolean): T | undefined { throw new Error("Method not implemented."); } diff --git a/src/providers/ProviderManager.ts b/src/providers/ProviderManager.ts index 2cbe65a..fd3e957 100644 --- a/src/providers/ProviderManager.ts +++ b/src/providers/ProviderManager.ts @@ -10,8 +10,8 @@ import { fastHash } from "@/utilities/FastHash"; import { logger } from "@/utilities/Logger"; class ProviderManager { - private providersMap: Map; private _debugMode = false; + private providersMap: Map; private settings: UserSettings; constructor() { @@ -30,6 +30,11 @@ class ProviderManager { ): string | undefined { for (const [, provider] of this.providersMap) { try { + // Skip providers that are not enabled + if (!provider.enabled()) { + continue; + } + let result = provider.provide(sentence, raw); if (result !== undefined) { @@ -38,8 +43,8 @@ class ProviderManager { } if ( + !this.settings.engine.explicitMode && this.settings.arithmeticProvider - .renderEqualsBeforeResult ) { result = `= ${result}`; } diff --git a/src/providers/arithmetic/BasicArithmeticProvider.ts b/src/providers/arithmetic/BasicArithmeticProvider.ts index a6b664a..1032414 100644 --- a/src/providers/arithmetic/BasicArithmeticProvider.ts +++ b/src/providers/arithmetic/BasicArithmeticProvider.ts @@ -3,6 +3,7 @@ import grammar, { } from "@/grammars/arithmetic/BasicArithmetic.ohm-bundle"; import { SemanticProviderBase } from "@/providers/SemanticProviderBase"; import { basicArithmeticSemanticActions } from "@/providers/arithmetic/ArithmeticSemantics"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; export class BasicArithmeticProvider extends SemanticProviderBase { @@ -14,6 +15,10 @@ export class BasicArithmeticProvider extends SemanticProviderBase(sentence: string, raw: boolean = true): T | undefined { try { const matchResult = grammar.match(sentence); diff --git a/src/providers/datetime/DatetimeProvider.ts b/src/providers/datetime/DatetimeProvider.ts index aa2b4c0..dbf6917 100644 --- a/src/providers/datetime/DatetimeProvider.ts +++ b/src/providers/datetime/DatetimeProvider.ts @@ -156,6 +156,10 @@ export class DatetimeProvider extends SemanticProviderBase { ); } + enabled() { + return UserSettings.getInstance().datetimeProvider.enabled; + } + provide(sentence: string, raw: boolean = true): T | undefined { try { const matchResult = grammar.match(sentence); diff --git a/src/providers/function/FunctionArithmeticProvider.ts b/src/providers/function/FunctionArithmeticProvider.ts index bc26a58..c8a29ac 100644 --- a/src/providers/function/FunctionArithmeticProvider.ts +++ b/src/providers/function/FunctionArithmeticProvider.ts @@ -5,6 +5,7 @@ import { SemanticProviderBase } from "@/providers/SemanticProviderBase"; import { basicArithmeticSemanticActions } from "@/providers/arithmetic/ArithmeticSemantics"; import { HexResult } from "@/results/HexResult"; import { NumberResult } from "@/results/NumberResult"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; export class FunctionArithmeticProvider extends SemanticProviderBase { @@ -50,6 +51,10 @@ export class FunctionArithmeticProvider extends SemanticProviderBase(sentence: string, raw: boolean = true): T | undefined { try { const matchResult = grammar.FunctionArithmetic.match(sentence); diff --git a/src/providers/percentage/PercentageArithmeticProvider.ts b/src/providers/percentage/PercentageArithmeticProvider.ts index 2f19d75..a8e073b 100644 --- a/src/providers/percentage/PercentageArithmeticProvider.ts +++ b/src/providers/percentage/PercentageArithmeticProvider.ts @@ -6,6 +6,7 @@ import { basicArithmeticSemanticActions } from "@/providers/arithmetic/Arithmeti import { HexResult } from "@/results/HexResult"; import { NumberResult } from "@/results/NumberResult"; import { PercentageResult } from "@/results/PercentageResult"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; import { DecreaseByVisitor } from "@/visitors/percentage/DecreaseByVisitor"; import { IncreaseByVisitor } from "@/visitors/percentage/IncreaseByVisitor"; @@ -56,6 +57,10 @@ export class PercentageArithmeticProvider extends SemanticProviderBase(sentence: string, raw: boolean = true): T | undefined { try { const matchResult = grammar.PercentageArithmetic.match(sentence); diff --git a/src/providers/uom/UnitsOfMeasurementProvider.ts b/src/providers/uom/UnitsOfMeasurementProvider.ts index d50e4f5..7309293 100644 --- a/src/providers/uom/UnitsOfMeasurementProvider.ts +++ b/src/providers/uom/UnitsOfMeasurementProvider.ts @@ -9,6 +9,7 @@ import { PercentageResult } from "@/results/PercentageResult"; import { StringResult } from "@/results/StringResult"; import { UnitOfMeasurementResult } from "@/results/UnitOfMeasurementResult"; import { INumericResult } from "@/results/definition/INumericResult"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; import convert, { Unit } from "convert-units"; @@ -73,6 +74,10 @@ export class UnitsOfMeasurementProvider extends SemanticProviderBase(sentence: string, raw: boolean = true): T | undefined { try { const matchResult = diff --git a/src/providers/vector/VectorArithmeticProvider.ts b/src/providers/vector/VectorArithmeticProvider.ts index c3919ae..3777d19 100644 --- a/src/providers/vector/VectorArithmeticProvider.ts +++ b/src/providers/vector/VectorArithmeticProvider.ts @@ -13,6 +13,7 @@ import { NumberResult } from "@/results/NumberResult"; import { Vector2Result } from "@/results/Vector2Result"; import { Vector3Result } from "@/results/Vector3Result"; import { Vector4Result } from "@/results/Vector4Result"; +import UserSettings from "@/settings/UserSettings"; import { logger } from "@/utilities/Logger"; import { Vector2 } from "@/utilities/Vector2"; import { Vector3 } from "@/utilities/Vector3"; @@ -520,6 +521,10 @@ export class VectorArithmeticProvider extends ProviderBase { return undefined; } + enabled() { + return UserSettings.getInstance().vectorArithmeticProvider.enabled; + } + provide(sentence: string, raw: boolean = true): T | undefined { try { const result = this.tryParseVectorArithmetic(sentence); diff --git a/src/settings/PluginSettings.ts b/src/settings/PluginSettings.ts index 132c44a..df140be 100644 --- a/src/settings/PluginSettings.ts +++ b/src/settings/PluginSettings.ts @@ -3,6 +3,10 @@ import { IPluginSettings } from "@/settings/definition/IPluginSettings"; import moment from "moment"; export const DEFAULT_SETTINGS: IPluginSettings = { + engine: { + explicitMode: false, + }, + interface: { renderResultEndOfLine: false, showStatusBarCompanion: true, @@ -10,11 +14,25 @@ export const DEFAULT_SETTINGS: IPluginSettings = { // Providers arithmeticProvider: { + enabled: true, renderEqualsBeforeResult: true, }, + functionArithmeticProvider: { + enabled: true, + }, + vectorArithmeticProvider: { + enabled: true, + }, + percentageArithmeticProvider: { + enabled: true, + }, datetimeProvider: { + enabled: true, parsingFormat: EDatetimeParsingFormat.EU, }, + unitOfMeasurementProvider: { + enabled: true, + }, // Results integerResult: {}, diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 709e9f6..733f0fa 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -16,9 +16,11 @@ export class SettingTab extends PluginSettingTab { this.containerEl.empty(); this.displayIntroduction(); + this.displayEngineSettings(); this.displayInterfaceSettings(); - // Providers + // Providers Settings + this.displayProviderManagementSettings(); this.displayArithmeticProviderSettings(); this.displayDatetimeProviderSettings(); @@ -41,6 +43,134 @@ export class SettingTab extends PluginSettingTab { ); } + displayEngineSettings() { + new Setting(this.containerEl).setName("Engine").setHeading(); + + new Setting(this.containerEl) + .setName("Explicit mode") + .setDesc( + `Solve will only display results for sentences ending with '=' sign. Default is ${DEFAULT_SETTINGS.engine.explicitMode}` + ) + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.engine.explicitMode) + .onChange(async (value) => { + this.plugin.settings.engine.explicitMode = value; + + await this.plugin.saveSettings(); + }) + ); + } + + displayProviderManagementSettings() { + new Setting(this.containerEl) + .setName("Provider management") + .setHeading(); + + new Setting(this.containerEl) + .setName("Arithmetic") + .setDesc( + `Enable the arithmetic provider e.g. 10 + 2. Default is ${DEFAULT_SETTINGS.arithmeticProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.arithmeticProvider.enabled) + .onChange(async (value) => { + this.plugin.settings.arithmeticProvider.enabled = value; + + await this.plugin.saveSettings(); + }) + ); + + new Setting(this.containerEl) + .setName("Function Arithmetic") + .setDesc( + `Enable the function arithmetic provider e.g. sin(), cos(). Default is ${DEFAULT_SETTINGS.functionArithmeticProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue( + this.plugin.settings.functionArithmeticProvider.enabled + ) + .onChange(async (value) => { + this.plugin.settings.functionArithmeticProvider.enabled = + value; + + await this.plugin.saveSettings(); + }) + ); + + new Setting(this.containerEl) + .setName("Vector Arithmetic") + .setDesc( + `Enable the vector arithmetic provider e.g. (10, 22.3), vec3(1.0, 23, 18.3). Default is ${DEFAULT_SETTINGS.vectorArithmeticProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue( + this.plugin.settings.vectorArithmeticProvider.enabled + ) + .onChange(async (value) => { + this.plugin.settings.vectorArithmeticProvider.enabled = + value; + + await this.plugin.saveSettings(); + }) + ); + + new Setting(this.containerEl) + .setName("Percentage") + .setDesc( + `Enable the percentage provider e.g. 10% of 200, increase 20 by 10%. Default is ${DEFAULT_SETTINGS.percentageArithmeticProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue( + this.plugin.settings.percentageArithmeticProvider + .enabled + ) + .onChange(async (value) => { + this.plugin.settings.percentageArithmeticProvider.enabled = + value; + + await this.plugin.saveSettings(); + }) + ); + + new Setting(this.containerEl) + .setName("Datetime") + .setDesc( + `Enable the datetime provider e.g. today + 20 days, last monday. Default is ${DEFAULT_SETTINGS.datetimeProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.datetimeProvider.enabled) + .onChange(async (value) => { + this.plugin.settings.datetimeProvider.enabled = value; + + await this.plugin.saveSettings(); + }) + ); + + new Setting(this.containerEl) + .setName("Unit of Measurement") + .setDesc( + `Enable the unit of measurement provider e.g. 10cm + 20, 200cm to m. Default is ${DEFAULT_SETTINGS.unitOfMeasurementProvider.enabled}` + ) + .addToggle((toggle) => + toggle + .setValue( + this.plugin.settings.unitOfMeasurementProvider.enabled + ) + .onChange(async (value) => { + this.plugin.settings.unitOfMeasurementProvider.enabled = + value; + + await this.plugin.saveSettings(); + }) + ); + } + displayInterfaceSettings() { new Setting(this.containerEl).setName("Interface").setHeading(); diff --git a/src/settings/UserSettings.ts b/src/settings/UserSettings.ts index 93bf41e..5aac888 100644 --- a/src/settings/UserSettings.ts +++ b/src/settings/UserSettings.ts @@ -3,22 +3,32 @@ import { IPluginSettings } from "@/settings/definition/IPluginSettings"; import { ArithmeticProviderSettings } from "@/settings/properties/ArithmeticProviderSettings"; import { DatetimeProviderSettings } from "@/settings/properties/DatetimeProviderSettings"; import { DatetimeResultSettings } from "@/settings/properties/DatetimeResultSettings"; +import { EngineSettings } from "@/settings/properties/EngineSettings"; import { FloatResultSettings } from "@/settings/properties/FloatResultSettings"; +import { FunctionArithmeticProviderSettings } from "@/settings/properties/FunctionArithmeticProviderSettings"; import { HexResultSettings } from "@/settings/properties/HexResultSettings"; import { IntegerResultSettings } from "@/settings/properties/IntegerResultSettings"; import { InterfaceSettings } from "@/settings/properties/InterfaceSettings"; +import { PercentageArithmeticProviderSettings } from "@/settings/properties/PercentageArithmeticProviderSettings"; import { PercentageResultSettings } from "@/settings/properties/PercentageResultSettings"; +import { UnitOfMeasurementProviderSettings } from "@/settings/properties/UnitOfMeasurementProviderSettings"; import { UnitOfMeasurementResultSettings } from "@/settings/properties/UnitOfMeasurementResultSettings"; +import { VectorArithmeticProviderSettings } from "@/settings/properties/VectorArithmeticProviderSettings"; export default class UserSettings { private static instance: UserSettings | null = null; public settings: IPluginSettings; + public readonly engine: EngineSettings; public readonly interface: InterfaceSettings; // Provider Settings public readonly arithmeticProvider: ArithmeticProviderSettings; + public readonly functionArithmeticProvider: FunctionArithmeticProviderSettings; + public readonly vectorArithmeticProvider: VectorArithmeticProviderSettings; + public readonly percentageArithmeticProvider: PercentageArithmeticProviderSettings; public readonly datetimeProvider: DatetimeProviderSettings; + public readonly unitOfMeasurementProvider: UnitOfMeasurementProviderSettings; // Result Settings public readonly integerResult: IntegerResultSettings; @@ -30,9 +40,26 @@ export default class UserSettings { private constructor() { this.settings = DEFAULT_SETTINGS; + + // General + this.engine = new EngineSettings(this); this.interface = new InterfaceSettings(this); + + // Providers this.arithmeticProvider = new ArithmeticProviderSettings(this); + this.functionArithmeticProvider = + new FunctionArithmeticProviderSettings(this); + this.vectorArithmeticProvider = new VectorArithmeticProviderSettings( + this + ); + this.percentageArithmeticProvider = + new PercentageArithmeticProviderSettings(this); this.datetimeProvider = new DatetimeProviderSettings(this); + this.unitOfMeasurementProvider = new UnitOfMeasurementProviderSettings( + this + ); + + // Results this.integerResult = new IntegerResultSettings(this); this.floatResult = new FloatResultSettings(this); this.percentageResult = new PercentageResultSettings(this); diff --git a/src/settings/definition/IArithmeticProviderSettings.ts b/src/settings/definition/IArithmeticProviderSettings.ts index a8ae70e..b624cce 100644 --- a/src/settings/definition/IArithmeticProviderSettings.ts +++ b/src/settings/definition/IArithmeticProviderSettings.ts @@ -1,3 +1,4 @@ export interface IArithmeticProviderSettings { + enabled: boolean; renderEqualsBeforeResult: boolean; } diff --git a/src/settings/definition/IDatetimeProviderSettings.ts b/src/settings/definition/IDatetimeProviderSettings.ts index 4cf85b4..b516fe4 100644 --- a/src/settings/definition/IDatetimeProviderSettings.ts +++ b/src/settings/definition/IDatetimeProviderSettings.ts @@ -1,5 +1,6 @@ import { EDatetimeParsingFormat } from "@/constants/EDatetimeFormat"; export interface IDatetimeProviderSettings { + enabled: boolean; parsingFormat: EDatetimeParsingFormat; } diff --git a/src/settings/definition/IEngineSettings.ts b/src/settings/definition/IEngineSettings.ts new file mode 100644 index 0000000..3efdbe5 --- /dev/null +++ b/src/settings/definition/IEngineSettings.ts @@ -0,0 +1,3 @@ +export interface IEngineSettings { + explicitMode: boolean; +} diff --git a/src/settings/definition/IFuntionArithmeticProviderSettings.ts b/src/settings/definition/IFuntionArithmeticProviderSettings.ts new file mode 100644 index 0000000..7758070 --- /dev/null +++ b/src/settings/definition/IFuntionArithmeticProviderSettings.ts @@ -0,0 +1,3 @@ +export interface IFunctionArithmeticProviderSettings { + enabled: boolean; +} diff --git a/src/settings/definition/IPercentageArithmeticProviderSettings.ts b/src/settings/definition/IPercentageArithmeticProviderSettings.ts new file mode 100644 index 0000000..5ac4e6a --- /dev/null +++ b/src/settings/definition/IPercentageArithmeticProviderSettings.ts @@ -0,0 +1,3 @@ +export interface IPercentageProviderSettings { + enabled: boolean; +} diff --git a/src/settings/definition/IPluginSettings.ts b/src/settings/definition/IPluginSettings.ts index 0162897..1e36cf3 100644 --- a/src/settings/definition/IPluginSettings.ts +++ b/src/settings/definition/IPluginSettings.ts @@ -1,19 +1,29 @@ import { IArithmeticProviderSettings } from "@/settings/definition/IArithmeticProviderSettings"; import { IDatetimeProviderSettings } from "@/settings/definition/IDatetimeProviderSettings"; import { IDatetimeResultSettings } from "@/settings/definition/IDatetimeResultSettings"; +import { IEngineSettings } from "@/settings/definition/IEngineSettings"; import { IFloatResultSettings } from "@/settings/definition/IFloatResultSettings"; +import { IFunctionArithmeticProviderSettings } from "@/settings/definition/IFuntionArithmeticProviderSettings"; import { IHexResultSettings } from "@/settings/definition/IHexResultSettings"; import { IIntegerResultSettings } from "@/settings/definition/IIntegerResultSettings"; import { IInterfaceSettings } from "@/settings/definition/IInterfaceSettings"; +import { IPercentageProviderSettings } from "@/settings/definition/IPercentageArithmeticProviderSettings"; import { IPercentageResultSettings } from "@/settings/definition/IPercentageResultSettings"; +import { IUnitOfMeasurementProviderSettings } from "@/settings/definition/IUnitOfMeasurementProviderSettings"; import { IUnitOfMeasurementResultSettings } from "@/settings/definition/IUnitOfMeasurementResultSettings"; +import { IVectorArithmeticProviderSettings } from "@/settings/definition/IVectorArithmeticProviderSettings"; export interface IPluginSettings { + engine: IEngineSettings; interface: IInterfaceSettings; // Providers arithmeticProvider: IArithmeticProviderSettings; + functionArithmeticProvider: IFunctionArithmeticProviderSettings; + vectorArithmeticProvider: IVectorArithmeticProviderSettings; + percentageArithmeticProvider: IPercentageProviderSettings; datetimeProvider: IDatetimeProviderSettings; + unitOfMeasurementProvider: IUnitOfMeasurementProviderSettings; // Results integerResult: IIntegerResultSettings; diff --git a/src/settings/definition/IUnitOfMeasurementProviderSettings.ts b/src/settings/definition/IUnitOfMeasurementProviderSettings.ts new file mode 100644 index 0000000..03df891 --- /dev/null +++ b/src/settings/definition/IUnitOfMeasurementProviderSettings.ts @@ -0,0 +1,3 @@ +export interface IUnitOfMeasurementProviderSettings { + enabled: boolean; +} diff --git a/src/settings/definition/IVectorArithmeticProviderSettings.ts b/src/settings/definition/IVectorArithmeticProviderSettings.ts new file mode 100644 index 0000000..8f1441f --- /dev/null +++ b/src/settings/definition/IVectorArithmeticProviderSettings.ts @@ -0,0 +1,3 @@ +export interface IVectorArithmeticProviderSettings { + enabled: boolean; +} diff --git a/src/settings/properties/ArithmeticProviderSettings.ts b/src/settings/properties/ArithmeticProviderSettings.ts index 240631e..301c15a 100644 --- a/src/settings/properties/ArithmeticProviderSettings.ts +++ b/src/settings/properties/ArithmeticProviderSettings.ts @@ -4,6 +4,17 @@ import UserSettings from "@/settings/UserSettings"; export class ArithmeticProviderSettings { constructor(private parent: UserSettings) {} + get enabled() { + return ( + this.parent.settings.arithmeticProvider.enabled ?? + DEFAULT_SETTINGS.arithmeticProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.arithmeticProvider.enabled = value; + } + get renderEqualsBeforeResult() { return ( this.parent.settings.arithmeticProvider.renderEqualsBeforeResult ?? diff --git a/src/settings/properties/DatetimeProviderSettings.ts b/src/settings/properties/DatetimeProviderSettings.ts index cdfc254..098fda0 100644 --- a/src/settings/properties/DatetimeProviderSettings.ts +++ b/src/settings/properties/DatetimeProviderSettings.ts @@ -5,6 +5,17 @@ import UserSettings from "@/settings/UserSettings"; export class DatetimeProviderSettings { constructor(private parent: UserSettings) {} + get enabled(): boolean { + return ( + this.parent.settings.datetimeProvider.enabled ?? + DEFAULT_SETTINGS.datetimeProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.datetimeProvider.enabled = value; + } + get parsingFormat(): EDatetimeParsingFormat { return ( this.parent.settings.datetimeProvider.parsingFormat ?? diff --git a/src/settings/properties/EngineSettings.ts b/src/settings/properties/EngineSettings.ts new file mode 100644 index 0000000..7d24491 --- /dev/null +++ b/src/settings/properties/EngineSettings.ts @@ -0,0 +1,17 @@ +import { DEFAULT_SETTINGS } from "@/settings/PluginSettings"; +import UserSettings from "@/settings/UserSettings"; + +export class EngineSettings { + constructor(private parent: UserSettings) {} + + get explicitMode(): boolean { + return ( + this.parent.settings.engine.explicitMode ?? + DEFAULT_SETTINGS.engine.explicitMode + ); + } + + set explicitMode(value: boolean) { + this.parent.settings.engine.explicitMode = value; + } +} diff --git a/src/settings/properties/FunctionArithmeticProviderSettings.ts b/src/settings/properties/FunctionArithmeticProviderSettings.ts new file mode 100644 index 0000000..85b2755 --- /dev/null +++ b/src/settings/properties/FunctionArithmeticProviderSettings.ts @@ -0,0 +1,17 @@ +import { DEFAULT_SETTINGS } from "@/settings/PluginSettings"; +import UserSettings from "@/settings/UserSettings"; + +export class FunctionArithmeticProviderSettings { + constructor(private parent: UserSettings) {} + + get enabled(): boolean { + return ( + this.parent.settings.functionArithmeticProvider.enabled ?? + DEFAULT_SETTINGS.functionArithmeticProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.functionArithmeticProvider.enabled = value; + } +} diff --git a/src/settings/properties/PercentageArithmeticProviderSettings.ts b/src/settings/properties/PercentageArithmeticProviderSettings.ts new file mode 100644 index 0000000..8300147 --- /dev/null +++ b/src/settings/properties/PercentageArithmeticProviderSettings.ts @@ -0,0 +1,17 @@ +import { DEFAULT_SETTINGS } from "@/settings/PluginSettings"; +import UserSettings from "@/settings/UserSettings"; + +export class PercentageArithmeticProviderSettings { + constructor(private parent: UserSettings) {} + + get enabled(): boolean { + return ( + this.parent.settings.percentageArithmeticProvider.enabled ?? + DEFAULT_SETTINGS.percentageArithmeticProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.percentageArithmeticProvider.enabled = value; + } +} diff --git a/src/settings/properties/UnitOfMeasurementProviderSettings.ts b/src/settings/properties/UnitOfMeasurementProviderSettings.ts new file mode 100644 index 0000000..9a55791 --- /dev/null +++ b/src/settings/properties/UnitOfMeasurementProviderSettings.ts @@ -0,0 +1,17 @@ +import { DEFAULT_SETTINGS } from "@/settings/PluginSettings"; +import UserSettings from "@/settings/UserSettings"; + +export class UnitOfMeasurementProviderSettings { + constructor(private parent: UserSettings) {} + + get enabled(): boolean { + return ( + this.parent.settings.unitOfMeasurementProvider.enabled ?? + DEFAULT_SETTINGS.unitOfMeasurementProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.unitOfMeasurementProvider.enabled = value; + } +} diff --git a/src/settings/properties/VectorArithmeticProviderSettings.ts b/src/settings/properties/VectorArithmeticProviderSettings.ts new file mode 100644 index 0000000..e69a77b --- /dev/null +++ b/src/settings/properties/VectorArithmeticProviderSettings.ts @@ -0,0 +1,17 @@ +import { DEFAULT_SETTINGS } from "@/settings/PluginSettings"; +import UserSettings from "@/settings/UserSettings"; + +export class VectorArithmeticProviderSettings { + constructor(private parent: UserSettings) {} + + get enabled(): boolean { + return ( + this.parent.settings.vectorArithmeticProvider.enabled ?? + DEFAULT_SETTINGS.vectorArithmeticProvider.enabled + ); + } + + set enabled(value: boolean) { + this.parent.settings.vectorArithmeticProvider.enabled = value; + } +} diff --git a/versions.json b/versions.json index 257ee77..b343644 100644 --- a/versions.json +++ b/versions.json @@ -6,5 +6,6 @@ "0.4.0": "0.15.0", "0.4.1": "0.15.0", "0.5.0": "0.15.0", - "0.5.1": "0.15.0" -} + "0.5.1": "0.15.0", + "0.6.0": "0.15.0" +} \ No newline at end of file