From 28bfa502a476d821d4d6e2f596d2d6ea1232e62f Mon Sep 17 00:00:00 2001
From: Ivan <8611739+IRBorisov@users.noreply.github.com>
Date: Tue, 11 Feb 2025 20:56:11 +0300
Subject: [PATCH] R: Split label resources into features
---
.../src/components/Modal/ModalForm.tsx | 4 +-
.../src/components/Modal/ModalView.tsx | 4 +-
.../src/components/shared/BadgeHelp.tsx | 4 +-
.../features/help/components/InfoCstClass.tsx | 2 +-
.../help/components/InfoCstStatus.tsx | 2 +-
.../features/help/components/Subtopics.tsx | 3 +-
.../features/help/components/TopicItem.tsx | 3 +-
.../frontend/src/features/help/labels.ts | 109 +++
.../help/pages/ManualsPage/TopicsDropdown.tsx | 3 +-
.../help/pages/ManualsPage/TopicsStatic.tsx | 5 +-
.../features/library/backend/useFolders.tsx | 2 +-
.../library/components/SelectLocation.tsx | 4 +-
.../library/components/SelectLocationHead.tsx | 2 +-
.../frontend/src/features/library/labels.ts | 47 +
.../library}/models/FolderTree.test.ts | 0
.../library}/models/FolderTree.ts | 0
.../pages/LibraryPage/ToolbarSearch.tsx | 4 +-
.../pages/LibraryPage/ViewSideLocation.tsx | 4 +-
.../oss/components/TooltipOperation.tsx | 2 +-
.../DlgCreateOperation/DlgCreateOperation.tsx | 2 +-
rsconcept/frontend/src/features/oss/labels.ts | 54 ++
.../src/features/oss/models/ossAPI.ts | 3 +-
.../EditorOssGraph/NodeContextMenu.tsx | 2 +-
.../EditorOssGraph/ToolbarOssGraph.tsx | 4 +-
.../oss/pages/OssPage/OssEditContext.tsx | 2 +-
.../rsform/components/BadgeGrammeme.tsx | 2 +-
.../rsform/components/InfoConstituenta.tsx | 2 +-
.../rsform/components/PickConstituenta.tsx | 2 +-
.../components/PickMultiConstituenta.tsx | 2 +-
.../rsform/components/RSInput/tooltip.ts | 2 +-
.../rsform/components/RefsInput/tooltip.ts | 3 +-
.../rsform/components/SelectConstituenta.tsx | 3 +-
.../rsform/components/SelectCstType.tsx | 2 +-
.../rsform/components/SelectVersion.tsx | 3 +-
.../dialogs/DlgCreateCst/FormCreateCst.tsx | 2 +-
.../dialogs/DlgDeleteCst/ListConstituents.tsx | 3 +-
.../dialogs/DlgEditEditors/DlgEditEditors.tsx | 2 +-
.../DlgEditReference/DlgEditReference.tsx | 2 +-
.../rsform/dialogs/DlgGraphParams.tsx | 2 +-
.../features/rsform/dialogs/DlgRenameCst.tsx | 2 +-
.../dialogs/DlgShowAST/graph/ASTNode.tsx | 2 +-
.../rsform/dialogs/DlgUploadRSForm.tsx | 2 +-
.../frontend/src/features/rsform/labels.ts | 641 +++++++++++++
.../src/features/rsform/models/languageAPI.ts | 3 +-
.../EditorConstituenta/EditorConstituenta.tsx | 2 +-
.../EditorConstituenta/FormConstituenta.tsx | 3 +-
.../ToolbarConstituenta.tsx | 5 +-
.../EditorRSExpression/EditorRSExpression.tsx | 2 +-
.../EditorRSExpression/ParsingResult.tsx | 3 +-
.../EditorRSExpression/RSTokenButton.tsx | 2 +-
.../EditorRSExpression/StatusBar.tsx | 3 +-
.../EditorRSFormCard/EditorLibraryItem.tsx | 8 +-
.../EditorRSFormCard/ToolbarItemAccess.tsx | 4 +-
.../EditorRSFormCard/ToolbarRSFormCard.tsx | 5 +-
.../EditorRSFormCard/ToolbarVersioning.tsx | 2 +-
.../RSFormPage/EditorRSList/TableRSList.tsx | 2 +-
.../RSFormPage/EditorRSList/ToolbarRSList.tsx | 5 +-
.../EditorTermGraph/GraphSelectors.tsx | 4 +-
.../EditorTermGraph/ToolbarTermGraph.tsx | 2 +-
.../rsform/pages/RSFormPage/RSTabs.tsx | 2 +-
.../ViewConstituents/SelectGraphFilter.tsx | 2 +-
.../ViewConstituents/SelectMatchMode.tsx | 2 +-
.../TableSideConstituents.tsx | 2 +-
.../features/users/components/SelectUser.tsx | 4 +-
rsconcept/frontend/src/utils/labels.ts | 858 +-----------------
rsconcept/frontend/src/utils/utils.ts | 17 +
66 files changed, 953 insertions(+), 939 deletions(-)
create mode 100644 rsconcept/frontend/src/features/help/labels.ts
create mode 100644 rsconcept/frontend/src/features/library/labels.ts
rename rsconcept/frontend/src/{ => features/library}/models/FolderTree.test.ts (100%)
rename rsconcept/frontend/src/{ => features/library}/models/FolderTree.ts (100%)
create mode 100644 rsconcept/frontend/src/features/oss/labels.ts
create mode 100644 rsconcept/frontend/src/features/rsform/labels.ts
diff --git a/rsconcept/frontend/src/components/Modal/ModalForm.tsx b/rsconcept/frontend/src/components/Modal/ModalForm.tsx
index f57f0577..0c31edd4 100644
--- a/rsconcept/frontend/src/components/Modal/ModalForm.tsx
+++ b/rsconcept/frontend/src/components/Modal/ModalForm.tsx
@@ -6,12 +6,12 @@ import { HelpTopic } from '@/features/help/models/helpTopic';
import useEscapeKey from '@/hooks/useEscapeKey';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { Button, MiniButton, SubmitButton } from '../Control';
import { IconClose } from '../Icons';
import { CProps } from '../props';
-import BadgeHelp from '../shared/BadgeHelp';
+import { BadgeHelp } from '../shared/BadgeHelp';
import { ModalBackdrop } from './ModalBackdrop';
export interface ModalProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/components/Modal/ModalView.tsx b/rsconcept/frontend/src/components/Modal/ModalView.tsx
index 05a98dae..d9ebce3a 100644
--- a/rsconcept/frontend/src/components/Modal/ModalView.tsx
+++ b/rsconcept/frontend/src/components/Modal/ModalView.tsx
@@ -5,11 +5,11 @@ import clsx from 'clsx';
import useEscapeKey from '@/hooks/useEscapeKey';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { Button, MiniButton } from '../Control';
import { IconClose } from '../Icons';
-import BadgeHelp from '../shared/BadgeHelp';
+import { BadgeHelp } from '../shared/BadgeHelp';
import { ModalBackdrop } from './ModalBackdrop';
import { ModalProps } from './ModalForm';
diff --git a/rsconcept/frontend/src/components/shared/BadgeHelp.tsx b/rsconcept/frontend/src/components/shared/BadgeHelp.tsx
index b48572a3..ffe0dfd9 100644
--- a/rsconcept/frontend/src/components/shared/BadgeHelp.tsx
+++ b/rsconcept/frontend/src/components/shared/BadgeHelp.tsx
@@ -27,7 +27,7 @@ interface BadgeHelpProps extends CProps.Styling {
/**
* Display help icon with a manual page tooltip.
*/
-function BadgeHelp({ topic, padding = 'p-1', ...restProps }: BadgeHelpProps) {
+export function BadgeHelp({ topic, padding = 'p-1', ...restProps }: BadgeHelpProps) {
const showHelp = usePreferencesStore(state => state.showHelp);
if (!showHelp) {
@@ -49,5 +49,3 @@ function BadgeHelp({ topic, padding = 'p-1', ...restProps }: BadgeHelpProps) {
);
}
-
-export default BadgeHelp;
diff --git a/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx b/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx
index 3f48bb82..32d50826 100644
--- a/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx
+++ b/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx
@@ -1,9 +1,9 @@
import clsx from 'clsx';
+import { describeCstClass, labelCstClass } from '@/features/rsform/labels';
import { CstClass } from '@/features/rsform/models/rsform';
import { colorBgCstClass } from '@/styling/color';
import { prefixes } from '@/utils/constants';
-import { describeCstClass, labelCstClass } from '@/utils/labels';
interface InfoCstClassProps {
header?: string;
diff --git a/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx b/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx
index 12d29c99..ce406ed8 100644
--- a/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx
+++ b/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx
@@ -1,9 +1,9 @@
import clsx from 'clsx';
+import { describeExpressionStatus, labelExpressionStatus } from '@/features/rsform/labels';
import { ExpressionStatus } from '@/features/rsform/models/rsform';
import { colorBgCstStatus } from '@/styling/color';
import { prefixes } from '@/utils/constants';
-import { describeExpressionStatus, labelExpressionStatus } from '@/utils/labels';
interface InfoCstStatusProps {
title?: string;
diff --git a/rsconcept/frontend/src/features/help/components/Subtopics.tsx b/rsconcept/frontend/src/features/help/components/Subtopics.tsx
index 8779397c..38c3e06c 100644
--- a/rsconcept/frontend/src/features/help/components/Subtopics.tsx
+++ b/rsconcept/frontend/src/features/help/components/Subtopics.tsx
@@ -1,7 +1,6 @@
import { prefixes } from '@/utils/constants';
-import { topicParent } from '../models/helpTopic';
-import { HelpTopic } from '../models/helpTopic';
+import { HelpTopic, topicParent } from '../models/helpTopic';
import { TopicItem } from './TopicItem';
interface SubtopicsProps {
diff --git a/rsconcept/frontend/src/features/help/components/TopicItem.tsx b/rsconcept/frontend/src/features/help/components/TopicItem.tsx
index 20447751..650dc64e 100644
--- a/rsconcept/frontend/src/features/help/components/TopicItem.tsx
+++ b/rsconcept/frontend/src/features/help/components/TopicItem.tsx
@@ -1,6 +1,7 @@
-import { describeHelpTopic, labelHelpTopic, removeTags } from '@/utils/labels';
+import { removeTags } from '@/utils/utils';
import { LinkTopic } from '../components/LinkTopic';
+import { describeHelpTopic, labelHelpTopic } from '../labels';
import { HelpTopic } from '../models/helpTopic';
interface TopicItemProps {
diff --git a/rsconcept/frontend/src/features/help/labels.ts b/rsconcept/frontend/src/features/help/labels.ts
new file mode 100644
index 00000000..db5c62c6
--- /dev/null
+++ b/rsconcept/frontend/src/features/help/labels.ts
@@ -0,0 +1,109 @@
+import { HelpTopic } from './models/helpTopic';
+
+/**
+ * Retrieves label for {@link HelpTopic}.
+ */
+export function labelHelpTopic(topic: HelpTopic): string {
+ // prettier-ignore
+ switch (topic) {
+ case HelpTopic.MAIN: return 'π ΠΠΎΡΡΠ°Π»';
+
+ case HelpTopic.THESAURUS: return 'π Π’Π΅Π·Π°ΡΡΡΡ';
+
+ case HelpTopic.INTERFACE: return 'π ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ';
+ case HelpTopic.UI_LIBRARY: return 'ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°';
+ case HelpTopic.UI_RS_MENU: return 'ΠΠ΅Π½Ρ ΡΡ
Π΅ΠΌΡ';
+ case HelpTopic.UI_RS_CARD: return 'ΠΠ°ΡΡΠΎΡΠΊΠ° ΡΡ
Π΅ΠΌΡ';
+ case HelpTopic.UI_RS_LIST: return 'Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
+ case HelpTopic.UI_RS_EDITOR: return 'Π Π΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_GRAPH_TERM: return 'ΠΡΠ°Ρ ΡΠ΅ΡΠΌΠΎΠ²';
+ case HelpTopic.UI_FORMULA_TREE: return 'ΠΠ΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°';
+ case HelpTopic.UI_TYPE_GRAPH: return 'ΠΡΠ°Ρ ΡΡΡΠΏΠ΅Π½Π΅ΠΉ';
+ case HelpTopic.UI_CST_STATUS: return 'Π‘ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_CST_CLASS: return 'ΠΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_OSS_GRAPH: return 'ΠΡΠ°Ρ ΡΠΈΠ½ΡΠ΅Π·Π°';
+ case HelpTopic.UI_SUBSTITUTIONS: return 'ΠΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»Π΅Π½ΠΈΡ';
+ case HelpTopic.UI_RELOCATE_CST: return 'ΠΠ΅ΡΠ΅Π½ΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
+
+ case HelpTopic.CONCEPTUAL: return 'β¨οΈ ΠΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ';
+ case HelpTopic.CC_SYSTEM: return 'Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ';
+ case HelpTopic.CC_CONSTITUENTA: return 'ΠΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ°';
+ case HelpTopic.CC_RELATIONS: return 'Π‘Π²ΡΠ·ΠΈ ΠΏΠΎΠ½ΡΡΠΈΠΉ';
+ case HelpTopic.CC_SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π· ΡΡ
Π΅ΠΌ';
+ case HelpTopic.CC_OSS: return 'ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΡ
Π΅ΠΌΠ°';
+ case HelpTopic.CC_PROPAGATION: return 'Π‘ΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ';
+
+ case HelpTopic.RSLANG: return 'π ΠΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ';
+ case HelpTopic.RSL_TYPES: return 'Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ';
+ case HelpTopic.RSL_CORRECT: return 'ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ';
+ case HelpTopic.RSL_INTERPRET: return 'ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ';
+ case HelpTopic.RSL_OPERATIONS: return 'ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ';
+ case HelpTopic.RSL_TEMPLATES: return 'ΠΠ°Π½ΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ';
+
+ case HelpTopic.TERM_CONTROL: return 'πͺΈ Π’Π΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ·Π°ΡΠΈΡ';
+ case HelpTopic.ACCESS: return 'π ΠΠΎΡΡΡΠΏΡ';
+ case HelpTopic.VERSIONS: return 'πΊ ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅';
+
+ case HelpTopic.INFO: return 'π° ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ';
+ case HelpTopic.INFO_RULES: return 'ΠΡΠ°Π²ΠΈΠ»Π°';
+ case HelpTopic.INFO_CONTRIB: return 'Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ';
+ case HelpTopic.INFO_PRIVACY: return 'ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
';
+ case HelpTopic.INFO_API: return 'REST API';
+
+ case HelpTopic.EXTEOR: return 'π₯οΈ ΠΠΊΡΡΠ΅ΠΎΡ';
+ }
+}
+
+/**
+ * Retrieves description for {@link HelpTopic}.
+ */
+export function describeHelpTopic(topic: HelpTopic): string {
+ // prettier-ignore
+ switch (topic) {
+ case HelpTopic.MAIN: return 'ΠΎΠ±ΡΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΎ ΠΏΠΎΡΡΠ°Π»Ρ';
+
+ case HelpTopic.THESAURUS: return 'ΡΠ΅ΡΠΌΠΈΠ½Ρ ΠΠΎΡΡΠ°Π»Π°';
+
+ case HelpTopic.INTERFACE: return 'ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ';
+ case HelpTopic.UI_LIBRARY: return 'ΠΏΠΎΠΈΡΠΊ ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΡ
Π΅ΠΌ';
+ case HelpTopic.UI_RS_MENU: return 'ΠΌΠ΅Π½Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡ
Π΅ΠΌΡ';
+ case HelpTopic.UI_RS_CARD: return 'ΠΎΠ±ΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΡ
Π΅ΠΌΡ';
+ case HelpTopic.UI_RS_LIST: return 'ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡ
Π΅ΠΌΠ°
Π² ΡΠΎΡΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΡ';
+ case HelpTopic.UI_RS_EDITOR: return 'ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_GRAPH_TERM: return 'ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π³ΡΠ°ΡΠ° ΡΠ΅ΡΠΌΠΎΠ²';
+ case HelpTopic.UI_FORMULA_TREE: return 'ΠΏΡΠΎΡΠΌΠΎΡΡ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°Π·Π±ΠΎΡΠ°
ΡΠΎΠ΄ΠΎΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
+ case HelpTopic.UI_TYPE_GRAPH: return 'ΠΏΡΠΎΡΠΌΠΎΡΡ Π³ΡΠ°ΡΠ° ΡΡΡΠΏΠ΅Π½Π΅ΠΉ';
+ case HelpTopic.UI_CST_STATUS: return 'Π½ΠΎΡΠ°ΡΠΈΡ ΡΡΠ°ΡΡΡΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_CST_CLASS: return 'Π½ΠΎΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case HelpTopic.UI_OSS_GRAPH: return 'Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ°
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΡ
Π΅ΠΌΡ ΡΠΈΠ½ΡΠ΅Π·Π°';
+ case HelpTopic.UI_SUBSTITUTIONS: return 'ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
+ case HelpTopic.UI_RELOCATE_CST: return 'ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ
Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΠ‘Π‘';
+
+ case HelpTopic.CONCEPTUAL: return 'ΠΎΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ';
+ case HelpTopic.CC_SYSTEM: return 'ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡ
Π΅ΠΌΠ°
ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ½ΡΡΠΈΠΉ';
+ case HelpTopic.CC_CONSTITUENTA: return 'ΠΏΠΎΠ½ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΠΈ Π΅Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²';
+ case HelpTopic.CC_RELATIONS: return 'ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ°ΠΌΠΈ';
+ case HelpTopic.CC_SYNTHESIS: return 'ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΈΠ½ΡΠ΅Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
+ case HelpTopic.CC_OSS: return 'ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΡ
Π΅ΠΌΠ° ΡΠΈΠ½ΡΠ΅Π·Π°';
+ case HelpTopic.CC_PROPAGATION: return 'ΡΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΠ‘Π‘';
+
+ case HelpTopic.RSLANG: return 'ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΡΠ·ΡΠΊ ΡΠΎΠ΄ΠΎΠ² ΡΡΡΡΠΊΡΡΡ';
+ case HelpTopic.RSL_TYPES: return 'ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² Π²
ΡΠΎΠ΄ΠΎΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΉ ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ';
+ case HelpTopic.RSL_CORRECT: return 'Π±ΠΈΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ';
+ case HelpTopic.RSL_INTERPRET: return 'ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ
ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ';
+ case HelpTopic.RSL_OPERATIONS: return 'ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ';
+ case HelpTopic.RSL_TEMPLATES: return 'ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΠ°Π½ΠΊΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ';
+
+ case HelpTopic.TERM_CONTROL: return 'ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ² ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΠΎΡΡΡΠ»ΠΎΠΊ';
+ case HelpTopic.ACCESS: return 'ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠ² ΠΊ ΡΡ
Π΅ΠΌΠ°ΠΌ';
+ case HelpTopic.VERSIONS: return 'ΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΡΡ
Π΅ΠΌ';
+
+ case HelpTopic.INFO: return 'ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅, Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠ΅
ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ';
+ case HelpTopic.INFO_RULES: return 'ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΎΡΡΠ°Π»ΠΎΠΌ';
+ case HelpTopic.INFO_CONTRIB: return 'ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΠ΅ Π²ΠΊΠ»Π°Π΄Π°
Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΠΎΡΡΠ°Π»Π°';
+ case HelpTopic.INFO_PRIVACY: return 'ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
';
+ case HelpTopic.INFO_API: return 'ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²';
+
+ case HelpTopic.EXTEOR: return 'ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΎΡΠΈΠΉ
"ΠΠΊΡΡΠ΅ΠΎΡ" Π΄Π»Ρ Windows';
+ }
+}
diff --git a/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsDropdown.tsx b/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsDropdown.tsx
index ed1bbe4d..c65e6642 100644
--- a/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsDropdown.tsx
+++ b/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsDropdown.tsx
@@ -8,8 +8,9 @@ import { IconMenuFold, IconMenuUnfold } from '@/components/Icons';
import { SelectTree } from '@/components/Input';
import { useAppLayoutStore, useFitHeight } from '@/stores/appLayout';
import { PARAMETER, prefixes } from '@/utils/constants';
-import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';
+import { describeHelpTopic } from '../../labels';
+import { labelHelpTopic } from '../../labels';
import { topicParent } from '../../models/helpTopic';
import { HelpTopic } from '../../models/helpTopic';
diff --git a/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsStatic.tsx b/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsStatic.tsx
index d2799479..e812ef62 100644
--- a/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsStatic.tsx
+++ b/rsconcept/frontend/src/features/help/pages/ManualsPage/TopicsStatic.tsx
@@ -3,10 +3,9 @@ import clsx from 'clsx';
import { SelectTree } from '@/components/Input';
import { useFitHeight } from '@/stores/appLayout';
import { prefixes } from '@/utils/constants';
-import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';
-import { topicParent } from '../../models/helpTopic';
-import { HelpTopic } from '../../models/helpTopic';
+import { describeHelpTopic, labelHelpTopic } from '../../labels';
+import { HelpTopic, topicParent } from '../../models/helpTopic';
interface TopicsStaticProps {
activeTopic: HelpTopic;
diff --git a/rsconcept/frontend/src/features/library/backend/useFolders.tsx b/rsconcept/frontend/src/features/library/backend/useFolders.tsx
index 1b0a0632..399985cd 100644
--- a/rsconcept/frontend/src/features/library/backend/useFolders.tsx
+++ b/rsconcept/frontend/src/features/library/backend/useFolders.tsx
@@ -1,4 +1,4 @@
-import { FolderTree } from '@/models/FolderTree';
+import { FolderTree } from '@/features/library/models/FolderTree';
import { LocationHead } from '../models/library';
import { useLibrary } from './useLibrary';
diff --git a/rsconcept/frontend/src/features/library/components/SelectLocation.tsx b/rsconcept/frontend/src/features/library/components/SelectLocation.tsx
index f78ce4c5..21da62ef 100644
--- a/rsconcept/frontend/src/features/library/components/SelectLocation.tsx
+++ b/rsconcept/frontend/src/features/library/components/SelectLocation.tsx
@@ -6,10 +6,10 @@ import { useEffect, useState } from 'react';
import { MiniButton } from '@/components/Control';
import { IconFolder, IconFolderClosed, IconFolderEmpty, IconFolderOpened } from '@/components/Icons';
import { CProps } from '@/components/props';
-import { FolderNode } from '@/models/FolderTree';
-import { labelFolderNode } from '@/utils/labels';
+import { FolderNode } from '@/features/library/models/FolderTree';
import { useFolders } from '../backend/useFolders';
+import { labelFolderNode } from '../labels';
interface SelectLocationProps extends CProps.Styling {
value: string;
diff --git a/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx b/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx
index 425ec216..419ba58f 100644
--- a/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx
+++ b/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx
@@ -7,8 +7,8 @@ import { LocationIcon } from '@/components/DomainIcons';
import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown';
import { CProps } from '@/components/props';
import { prefixes } from '@/utils/constants';
-import { describeLocationHead, labelLocationHead } from '@/utils/labels';
+import { describeLocationHead, labelLocationHead } from '../labels';
import { LocationHead } from '../models/library';
interface SelectLocationHeadProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/features/library/labels.ts b/rsconcept/frontend/src/features/library/labels.ts
new file mode 100644
index 00000000..0b657a56
--- /dev/null
+++ b/rsconcept/frontend/src/features/library/labels.ts
@@ -0,0 +1,47 @@
+import { FolderNode } from './models/FolderTree';
+import { LocationHead } from './models/library';
+import { validateLocation } from './models/libraryAPI';
+
+/**
+ * Retrieves label for {@link LocationHead}.
+ */
+export function labelLocationHead(head: LocationHead): string {
+ // prettier-ignore
+ switch (head) {
+ case LocationHead.USER: return '/U : Π»ΠΈΡΠ½ΡΠ΅';
+ case LocationHead.COMMON: return '/S : ΠΎΠ±ΡΠΈΠ΅';
+ case LocationHead.LIBRARY: return '/L : ΠΏΡΠΈΠΌΠ΅ΡΡ';
+ case LocationHead.PROJECTS: return '/P : ΠΏΡΠΎΠ΅ΠΊΡΡ';
+ }
+}
+
+/**
+ * Retrieves description for {@link LocationHead}.
+ */
+export function describeLocationHead(head: LocationHead): string {
+ // prettier-ignore
+ switch (head) {
+ case LocationHead.USER: return 'ΠΠΈΡΠ½ΡΠ΅ ΡΡ
Π΅ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ';
+ case LocationHead.COMMON: return 'Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
+ case LocationHead.LIBRARY: return 'ΠΠ°ΡΠ°Π»ΠΎΠ³ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΡ
ΡΡ
Π΅ΠΌ-ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²';
+ case LocationHead.PROJECTS: return 'Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
+ }
+}
+
+/**
+ * Retrieves label for {@link FolderNode}.
+ */
+export function labelFolderNode(node: FolderNode): string {
+ if (node.parent || !validateLocation('/' + node.text)) {
+ return node.text;
+ } else {
+ return labelLocationHead(('/' + node.text) as LocationHead);
+ }
+}
+
+/**
+ * Retrieves description for {@link FolderNode}.
+ */
+export function describeFolderNode(node: FolderNode): string {
+ return `${node.filesInside} | ${node.filesTotal}`;
+}
diff --git a/rsconcept/frontend/src/models/FolderTree.test.ts b/rsconcept/frontend/src/features/library/models/FolderTree.test.ts
similarity index 100%
rename from rsconcept/frontend/src/models/FolderTree.test.ts
rename to rsconcept/frontend/src/features/library/models/FolderTree.test.ts
diff --git a/rsconcept/frontend/src/models/FolderTree.ts b/rsconcept/frontend/src/features/library/models/FolderTree.ts
similarity index 100%
rename from rsconcept/frontend/src/models/FolderTree.ts
rename to rsconcept/frontend/src/features/library/models/FolderTree.ts
diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx
index b38d262d..0ece9fbd 100644
--- a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx
+++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx
@@ -16,11 +16,11 @@ import {
} from '@/components/Icons';
import { CProps } from '@/components/props';
import { SearchBar } from '@/components/shared/SearchBar';
-import SelectUser from '@/features/users/components/SelectUser';
+import { SelectUser } from '@/features/users/components/SelectUser';
import { prefixes } from '@/utils/constants';
-import { describeLocationHead, labelLocationHead } from '@/utils/labels';
import { tripleToggleColor } from '@/utils/utils';
+import { describeLocationHead, labelLocationHead } from '../../labels';
import { LocationHead } from '../../models/library';
import { useHasCustomFilter, useLibrarySearchStore } from '../../stores/librarySearch';
diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx
index fb86edba..df575c6b 100644
--- a/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx
+++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx
@@ -5,11 +5,11 @@ import { MiniButton } from '@/components/Control';
import { SubfoldersIcon } from '@/components/DomainIcons';
import { IconFolderEdit, IconFolderTree } from '@/components/Icons';
import { CProps } from '@/components/props';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { useAuthSuspense } from '@/features/auth/backend/useAuth';
import { HelpTopic } from '@/features/help/models/helpTopic';
+import { FolderNode } from '@/features/library/models/FolderTree';
import useWindowSize from '@/hooks/useWindowSize';
-import { FolderNode } from '@/models/FolderTree';
import { useFitHeight } from '@/stores/appLayout';
import { PARAMETER, prefixes } from '@/utils/constants';
import { information } from '@/utils/labels';
diff --git a/rsconcept/frontend/src/features/oss/components/TooltipOperation.tsx b/rsconcept/frontend/src/features/oss/components/TooltipOperation.tsx
index 64671040..45c8eeae 100644
--- a/rsconcept/frontend/src/features/oss/components/TooltipOperation.tsx
+++ b/rsconcept/frontend/src/features/oss/components/TooltipOperation.tsx
@@ -5,8 +5,8 @@ import { createColumnHelper } from '@tanstack/react-table';
import { Tooltip } from '@/components/Container';
import DataTable from '@/components/DataTable';
import { IconPageRight } from '@/components/Icons';
-import { labelOperationType } from '@/utils/labels';
+import { labelOperationType } from '../labels';
import { ICstSubstituteEx, OperationType } from '../models/oss';
import { OssNodeInternal } from '../models/ossLayout';
diff --git a/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/DlgCreateOperation.tsx b/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
index 11fc84fa..9fab219f 100644
--- a/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
+++ b/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/DlgCreateOperation.tsx
@@ -9,10 +9,10 @@ import { ModalForm } from '@/components/Modal';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/Tabs';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useDialogsStore } from '@/stores/dialogs';
-import { describeOperationType, labelOperationType } from '@/utils/labels';
import { IOperationCreateDTO, IOperationPosition, schemaOperationCreate } from '../../backend/api';
import { useOperationCreate } from '../../backend/useOperationCreate';
+import { describeOperationType, labelOperationType } from '../../labels';
import { IOperationSchema, OperationID, OperationType } from '../../models/oss';
import { calculateInsertPosition } from '../../models/ossAPI';
import TabInputOperation from './TabInputOperation';
diff --git a/rsconcept/frontend/src/features/oss/labels.ts b/rsconcept/frontend/src/features/oss/labels.ts
new file mode 100644
index 00000000..03ef4a3e
--- /dev/null
+++ b/rsconcept/frontend/src/features/oss/labels.ts
@@ -0,0 +1,54 @@
+import { ISubstitutionErrorDescription, OperationType, SubstitutionErrorType } from './models/oss';
+
+/**
+ * Retrieves label for {@link OperationType}.
+ */
+export function labelOperationType(itemType: OperationType): string {
+ // prettier-ignore
+ switch (itemType) {
+ case OperationType.INPUT: return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ°';
+ case OperationType.SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π·';
+ }
+}
+
+/**
+ * Retrieves description for {@link OperationType}.
+ */
+export function describeOperationType(itemType: OperationType): string {
+ // prettier-ignore
+ switch (itemType) {
+ case OperationType.INPUT: return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡ
Π΅ΠΌΡ Π² ΠΠ‘Π‘';
+ case OperationType.SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
+ }
+}
+
+/**
+ * Generates error description for {@link ISubstitutionErrorDescription}.
+ */
+export function describeSubstitutionError(error: ISubstitutionErrorDescription): string {
+ switch (error.errorType) {
+ case SubstitutionErrorType.invalidIDs:
+ return 'ΠΡΠΈΠ±ΠΊΠ° Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ
ΡΡ
Π΅ΠΌ';
+ case SubstitutionErrorType.incorrectCst:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ`;
+ case SubstitutionErrorType.invalidBasic:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: Π·Π°ΠΌΠ΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ Π±Π°Π·ΠΈΡΠ½ΡΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ`;
+ case SubstitutionErrorType.invalidConstant:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ`;
+ case SubstitutionErrorType.invalidClasses:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ`;
+ case SubstitutionErrorType.typificationCycle:
+ return `ΠΡΠΈΠ±ΠΊΠ°: ΡΠΈΠΊΠ» ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π² ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡΡ
${error.params[0]}`;
+ case SubstitutionErrorType.baseSubstitutionNotSet:
+ return `ΠΡΠΈΠ±ΠΊΠ°: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ${error.params[0]} β ${error.params[1]}`;
+ case SubstitutionErrorType.unequalTypification:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
+ case SubstitutionErrorType.unequalArgsCount:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
+ case SubstitutionErrorType.unequalArgs:
+ return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
+ case SubstitutionErrorType.unequalExpressions:
+ return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ${error.params[0]} -> ${error.params[1]}: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ`;
+ }
+ return 'UNKNOWN ERROR';
+}
diff --git a/rsconcept/frontend/src/features/oss/models/ossAPI.ts b/rsconcept/frontend/src/features/oss/models/ossAPI.ts
index 401f2727..ee231831 100644
--- a/rsconcept/frontend/src/features/oss/models/ossAPI.ts
+++ b/rsconcept/frontend/src/features/oss/models/ossAPI.ts
@@ -12,11 +12,12 @@ import {
isSetTypification
} from '@/features/rsform/models/rslangAPI';
import { limits, PARAMETER } from '@/utils/constants';
-import { describeSubstitutionError, information } from '@/utils/labels';
+import { information } from '@/utils/labels';
import { TextMatcher } from '@/utils/utils';
import { Graph } from '../../../models/Graph';
import { IOperationPosition } from '../backend/api';
+import { describeSubstitutionError } from '../labels';
import { ICstSubstitute, IOperation, IOperationSchema, OperationID, OperationType, SubstitutionErrorType } from './oss';
import { Position2D } from './ossLayout';
diff --git a/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx b/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
index bf2ec50a..d340b704 100644
--- a/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/NodeContextMenu.tsx
@@ -16,7 +16,7 @@ import { useMutatingOss } from '@/features/oss/backend/useMutatingOss';
import { IOperation, OperationID, OperationType } from '@/features/oss/models/oss';
import useClickedOutside from '@/hooks/useClickedOutside';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { useOssEdit } from '../OssEditContext';
diff --git a/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx b/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
index bd29b624..5b48e9ed 100644
--- a/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/OssPage/EditorOssGraph/ToolbarOssGraph.tsx
@@ -18,11 +18,11 @@ import {
IconReset,
IconSave
} from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useModificationStore } from '@/stores/modification';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { useMutatingOss } from '../../../backend/useMutatingOss';
import { OperationType } from '../../../models/oss';
diff --git a/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx b/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx
index 8ac7034d..d2b9ae85 100644
--- a/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx
@@ -168,7 +168,7 @@ export const OssEditState = ({ itemID, children }: React.PropsWithChildren {
data.positions = positions;
- operationUpdate({ itemID: schema.id, data });
+ void operationUpdate({ itemID: schema.id, data });
}
});
}
diff --git a/rsconcept/frontend/src/features/rsform/components/BadgeGrammeme.tsx b/rsconcept/frontend/src/features/rsform/components/BadgeGrammeme.tsx
index 665fedbf..f3a8d079 100644
--- a/rsconcept/frontend/src/features/rsform/components/BadgeGrammeme.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/BadgeGrammeme.tsx
@@ -1,8 +1,8 @@
import clsx from 'clsx';
import { APP_COLORS, colorFgGrammeme } from '@/styling/color';
-import { labelGrammeme } from '@/utils/labels';
+import { labelGrammeme } from '../labels';
import { GramData } from '../models/language';
interface BadgeGrammemeProps {
diff --git a/rsconcept/frontend/src/features/rsform/components/InfoConstituenta.tsx b/rsconcept/frontend/src/features/rsform/components/InfoConstituenta.tsx
index 385ade72..046673c5 100644
--- a/rsconcept/frontend/src/features/rsform/components/InfoConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/InfoConstituenta.tsx
@@ -2,8 +2,8 @@ import clsx from 'clsx';
import { IconChild } from '@/components/Icons';
import { CProps } from '@/components/props';
-import { labelCstTypification } from '@/utils/labels';
+import { labelCstTypification } from '../labels';
import { IConstituenta } from '../models/rsform';
import { isBasicConcept } from '../models/rsformAPI';
diff --git a/rsconcept/frontend/src/features/rsform/components/PickConstituenta.tsx b/rsconcept/frontend/src/features/rsform/components/PickConstituenta.tsx
index 3b57040d..3b08436f 100644
--- a/rsconcept/frontend/src/features/rsform/components/PickConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/PickConstituenta.tsx
@@ -8,8 +8,8 @@ import { CProps } from '@/components/props';
import { SearchBar } from '@/components/shared/SearchBar';
import { NoData } from '@/components/View';
import { APP_COLORS } from '@/styling/color';
-import { describeConstituenta } from '@/utils/labels';
+import { describeConstituenta } from '../labels';
import { IConstituenta } from '../models/rsform';
import { matchConstituenta } from '../models/rsformAPI';
import { CstMatchMode } from '../stores/cstSearch';
diff --git a/rsconcept/frontend/src/features/rsform/components/PickMultiConstituenta.tsx b/rsconcept/frontend/src/features/rsform/components/PickMultiConstituenta.tsx
index 12828812..f0c01907 100644
--- a/rsconcept/frontend/src/features/rsform/components/PickMultiConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/PickMultiConstituenta.tsx
@@ -8,8 +8,8 @@ import { CProps } from '@/components/props';
import { SearchBar } from '@/components/shared/SearchBar';
import { NoData } from '@/components/View';
import { Graph } from '@/models/Graph';
-import { describeConstituenta } from '@/utils/labels';
+import { describeConstituenta } from '../labels';
import { ConstituentaID, IConstituenta, IRSForm } from '../models/rsform';
import { isBasicConcept, matchConstituenta } from '../models/rsformAPI';
import { CstMatchMode } from '../stores/cstSearch';
diff --git a/rsconcept/frontend/src/features/rsform/components/RSInput/tooltip.ts b/rsconcept/frontend/src/features/rsform/components/RSInput/tooltip.ts
index 07e5e76d..ca7b5943 100644
--- a/rsconcept/frontend/src/features/rsform/components/RSInput/tooltip.ts
+++ b/rsconcept/frontend/src/features/rsform/components/RSInput/tooltip.ts
@@ -3,8 +3,8 @@ import { hoverTooltip, TooltipView } from '@codemirror/view';
import clsx from 'clsx';
import { findAliasAt } from '@/utils/codemirror';
-import { labelCstTypification } from '@/utils/labels';
+import { labelCstTypification } from '../../labels';
import { IConstituenta, IRSForm } from '../../models/rsform';
import { isBasicConcept } from '../../models/rsformAPI';
diff --git a/rsconcept/frontend/src/features/rsform/components/RefsInput/tooltip.ts b/rsconcept/frontend/src/features/rsform/components/RefsInput/tooltip.ts
index 845fae9e..684f0403 100644
--- a/rsconcept/frontend/src/features/rsform/components/RefsInput/tooltip.ts
+++ b/rsconcept/frontend/src/features/rsform/components/RefsInput/tooltip.ts
@@ -5,8 +5,9 @@ import clsx from 'clsx';
import { APP_COLORS, colorFgGrammeme } from '@/styling/color';
import { findContainedNodes, findReferenceAt } from '@/utils/codemirror';
-import { describeConstituentaTerm, labelGrammeme } from '@/utils/labels';
+import { labelGrammeme } from '../../labels';
+import { describeConstituentaTerm } from '../../labels';
import { IEntityReference, ISyntacticReference } from '../../models/language';
import { parseGrammemes } from '../../models/languageAPI';
import { IConstituenta, IRSForm } from '../../models/rsform';
diff --git a/rsconcept/frontend/src/features/rsform/components/SelectConstituenta.tsx b/rsconcept/frontend/src/features/rsform/components/SelectConstituenta.tsx
index 0abf5fb5..53d27c0d 100644
--- a/rsconcept/frontend/src/features/rsform/components/SelectConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/SelectConstituenta.tsx
@@ -4,8 +4,9 @@ import clsx from 'clsx';
import { SelectSingle } from '@/components/Input';
import { CProps } from '@/components/props';
-import { describeConstituenta, describeConstituentaTerm } from '@/utils/labels';
+import { describeConstituentaTerm } from '../labels';
+import { describeConstituenta } from '../labels';
import { ConstituentaID, IConstituenta } from '../models/rsform';
import { matchConstituenta } from '../models/rsformAPI';
import { CstMatchMode } from '../stores/cstSearch';
diff --git a/rsconcept/frontend/src/features/rsform/components/SelectCstType.tsx b/rsconcept/frontend/src/features/rsform/components/SelectCstType.tsx
index 030e6b62..e7142e02 100644
--- a/rsconcept/frontend/src/features/rsform/components/SelectCstType.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/SelectCstType.tsx
@@ -1,7 +1,7 @@
import { SelectSingle } from '@/components/Input';
import { CProps } from '@/components/props';
-import { labelCstType } from '@/utils/labels';
+import { labelCstType } from '../labels';
import { CstType } from '../models/rsform';
const SelectorCstType = Object.values(CstType).map(typeStr => ({
diff --git a/rsconcept/frontend/src/features/rsform/components/SelectVersion.tsx b/rsconcept/frontend/src/features/rsform/components/SelectVersion.tsx
index 010fb8b7..a1bbc623 100644
--- a/rsconcept/frontend/src/features/rsform/components/SelectVersion.tsx
+++ b/rsconcept/frontend/src/features/rsform/components/SelectVersion.tsx
@@ -5,7 +5,8 @@ import clsx from 'clsx';
import { SelectSingle } from '@/components/Input';
import { CProps } from '@/components/props';
import { IVersionInfo, VersionID } from '@/features/library/models/library';
-import { labelVersion } from '@/utils/labels';
+
+import { labelVersion } from '../labels';
interface SelectVersionProps extends CProps.Styling {
id?: string;
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx
index cfb218dc..e93ad01b 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx
@@ -4,7 +4,7 @@ import clsx from 'clsx';
import { useEffect, useState } from 'react';
import { TextArea, TextInput } from '@/components/Input';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { PARAMETER } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgDeleteCst/ListConstituents.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgDeleteCst/ListConstituents.tsx
index 8c717121..7bbccd29 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgDeleteCst/ListConstituents.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgDeleteCst/ListConstituents.tsx
@@ -1,7 +1,6 @@
import clsx from 'clsx';
-import { labelConstituenta } from '@/utils/labels';
-
+import { labelConstituenta } from '../../labels';
import { ConstituentaID, IRSForm } from '../../models/rsform';
interface ListConstituentsProps {
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgEditEditors/DlgEditEditors.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgEditEditors/DlgEditEditors.tsx
index 13f2e113..350466c0 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgEditEditors/DlgEditEditors.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgEditEditors/DlgEditEditors.tsx
@@ -8,7 +8,7 @@ import { IconRemove } from '@/components/Icons';
import { Label } from '@/components/Input';
import { ModalForm } from '@/components/Modal';
import { useUsers } from '@/features/users/backend/useUsers';
-import SelectUser from '@/features/users/components/SelectUser';
+import { SelectUser } from '@/features/users/components/SelectUser';
import { UserID } from '@/features/users/models/user';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgEditReference/DlgEditReference.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgEditReference/DlgEditReference.tsx
index 149d94cd..ac0c4f30 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgEditReference/DlgEditReference.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgEditReference/DlgEditReference.tsx
@@ -7,8 +7,8 @@ import { ModalForm } from '@/components/Modal';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/Tabs';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useDialogsStore } from '@/stores/dialogs';
-import { labelReferenceType } from '@/utils/labels';
+import { labelReferenceType } from '../../labels';
import { ReferenceType } from '../../models/language';
import { IRSForm } from '../../models/rsform';
import TabEntityReference from './TabEntityReference';
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgGraphParams.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgGraphParams.tsx
index 279e204c..85cff672 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgGraphParams.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgGraphParams.tsx
@@ -4,8 +4,8 @@ import { Controller, useForm } from 'react-hook-form';
import { Checkbox } from '@/components/Input';
import { ModalForm } from '@/components/Modal';
-import { labelCstType } from '@/utils/labels';
+import { labelCstType } from '../labels';
import { CstType } from '../models/rsform';
import { GraphFilterParams, useTermGraphStore } from '../stores/termGraph';
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgRenameCst.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgRenameCst.tsx
index e771ccf9..0c6162a7 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgRenameCst.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgRenameCst.tsx
@@ -37,7 +37,7 @@ function DlgRenameCst() {
const isValid = alias !== target.alias && validateNewAlias(alias, cst_type, schema);
function onSubmit(data: ICstRenameDTO) {
- cstRename({ itemID: schema.id, data: data });
+ return cstRename({ itemID: schema.id, data: data });
}
function handleChangeType(newType: CstType) {
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgShowAST/graph/ASTNode.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgShowAST/graph/ASTNode.tsx
index 56ecde16..2bd06cf9 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgShowAST/graph/ASTNode.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgShowAST/graph/ASTNode.tsx
@@ -3,8 +3,8 @@
import { Handle, Position } from 'reactflow';
import { APP_COLORS, colorBgSyntaxTree } from '@/styling/color';
-import { labelSyntaxTree } from '@/utils/labels';
+import { labelSyntaxTree } from '../../../labels';
import { ISyntaxTreeNode } from '../../../models/rslang';
const FONT_SIZE_MAX = 14;
diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgUploadRSForm.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgUploadRSForm.tsx
index 4b5c5e48..0f2c39df 100644
--- a/rsconcept/frontend/src/features/rsform/dialogs/DlgUploadRSForm.tsx
+++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgUploadRSForm.tsx
@@ -21,7 +21,7 @@ function DlgUploadRSForm() {
const handleSubmit = () => {
if (file) {
- upload({
+ void upload({
itemID: itemID,
load_metadata: loadMetadata,
file: file,
diff --git a/rsconcept/frontend/src/features/rsform/labels.ts b/rsconcept/frontend/src/features/rsform/labels.ts
new file mode 100644
index 00000000..53b08204
--- /dev/null
+++ b/rsconcept/frontend/src/features/rsform/labels.ts
@@ -0,0 +1,641 @@
+/**
+ * Generates description for {@link IConstituenta}.
+ */
+
+import { PARAMETER } from '@/utils/constants';
+import { prepareTooltip } from '@/utils/utils';
+
+import { GramData, Grammeme, ReferenceType } from './models/language';
+import { CstClass, CstType, ExpressionStatus, IConstituenta, IRSForm } from './models/rsform';
+import {
+ IArgumentInfo,
+ IRSErrorDescription,
+ ISyntaxTreeNode,
+ ParsingStatus,
+ RSErrorType,
+ TokenID
+} from './models/rslang';
+import { CstMatchMode, DependencyMode } from './stores/cstSearch';
+import { GraphColoring } from './stores/termGraph';
+
+/**
+ * Generates description for {@link IConstituenta}.
+ */
+export function describeConstituenta(cst: IConstituenta): string {
+ if (cst.cst_type === CstType.STRUCTURED) {
+ return (
+ cst.term_resolved ||
+ cst.term_raw ||
+ cst.definition_resolved ||
+ cst.definition_raw ||
+ cst.convention ||
+ cst.definition_formal
+ );
+ } else {
+ return (
+ cst.term_resolved ||
+ cst.term_raw ||
+ cst.definition_resolved ||
+ cst.definition_raw ||
+ cst.definition_formal ||
+ cst.convention
+ );
+ }
+}
+
+/**
+ * Generates description for term of a given {@link IConstituenta}.
+ */
+export function describeConstituentaTerm(cst?: IConstituenta): string {
+ if (!cst) {
+ return '!ΠΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ!';
+ }
+ if (!cst.term_resolved) {
+ return '!ΠΡΡΡΠΎΠΉ ΡΠ΅ΡΠΌΠΈΠ½!';
+ } else {
+ return cst.term_resolved;
+ }
+}
+
+/**
+ * Generates label for {@link IConstituenta}.
+ */
+export function labelConstituenta(cst: IConstituenta) {
+ return `${cst.alias}: ${describeConstituenta(cst)}`;
+}
+
+/**
+ * Generates label for {@link IVersionInfo} of {@link IRSForm}.
+ */
+export function labelVersion(schema?: IRSForm) {
+ const version = schema?.versions.find(ver => ver.id === schema?.version);
+ return version ? version.version : 'Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ';
+}
+
+/**
+ * Retrieves label for {@link TokenID}.
+ */
+export function labelToken(id: TokenID): string {
+ // prettier-ignore
+ switch (id) {
+ case TokenID.BOOLEAN: return 'β¬()';
+ case TokenID.DECART: return 'Γ';
+ case TokenID.PUNCTUATION_PL: return '( )';
+ case TokenID.PUNCTUATION_SL: return '[ ]';
+ case TokenID.QUANTOR_UNIVERSAL: return 'β';
+ case TokenID.QUANTOR_EXISTS: return 'β';
+ case TokenID.LOGIC_NOT: return 'Β¬';
+ case TokenID.LOGIC_AND: return '&';
+ case TokenID.LOGIC_OR: return 'β¨';
+ case TokenID.LOGIC_IMPLICATION: return 'β';
+ case TokenID.LOGIC_EQUIVALENT: return 'β';
+ case TokenID.LIT_EMPTYSET: return 'β
';
+ case TokenID.LIT_WHOLE_NUMBERS: return 'Z';
+ case TokenID.MULTIPLY: return '*';
+ case TokenID.EQUAL: return '=';
+ case TokenID.NOTEQUAL: return 'β ';
+ case TokenID.GREATER_OR_EQ: return 'β₯';
+ case TokenID.LESSER_OR_EQ: return 'β€';
+ case TokenID.SET_IN: return 'β';
+ case TokenID.SET_NOT_IN: return 'β';
+ case TokenID.SUBSET_OR_EQ: return 'β';
+ case TokenID.SUBSET: return 'β';
+ case TokenID.NOT_SUBSET: return 'β';
+ case TokenID.SET_INTERSECTION: return 'β©';
+ case TokenID.SET_UNION: return 'βͺ';
+ case TokenID.SET_MINUS: return '\\';
+ case TokenID.SET_SYMMETRIC_MINUS: return 'β';
+ case TokenID.NT_DECLARATIVE_EXPR: return 'D{}';
+ case TokenID.NT_IMPERATIVE_EXPR: return 'I{}';
+ case TokenID.NT_RECURSIVE_FULL: return 'R{}';
+ case TokenID.BIGPR: return 'Pr1()';
+ case TokenID.SMALLPR: return 'pr1()';
+ case TokenID.FILTER: return 'Fi1[]()';
+ case TokenID.REDUCE: return 'red()';
+ case TokenID.CARD: return 'card()';
+ case TokenID.BOOL: return 'bool()';
+ case TokenID.DEBOOL: return 'debool()';
+ case TokenID.ASSIGN: return ':=';
+ case TokenID.ITERATE: return ':β';
+ }
+ return `no label: ${id}`;
+}
+
+/**
+ * Return shortcut description for {@link CstType}.
+ */
+export function getCstTypeShortcut(type: CstType) {
+ const prefix = labelCstType(type) + ' [Alt + ';
+ // prettier-ignore
+ switch (type) {
+ case CstType.BASE: return prefix + '1]';
+ case CstType.STRUCTURED: return prefix + '2]';
+ case CstType.TERM: return prefix + '3]';
+ case CstType.AXIOM: return prefix + '4]';
+ case CstType.FUNCTION: return prefix + 'Q]';
+ case CstType.PREDICATE: return prefix + 'W]';
+ case CstType.CONSTANT: return prefix + '5]';
+ case CstType.THEOREM: return prefix + '6]';
+ }
+}
+
+/**
+ * Generates description for {@link TokenID}.
+ */
+export function describeToken(id: TokenID): string {
+ // prettier-ignore
+ switch (id) {
+ case TokenID.BOOLEAN: return prepareTooltip('ΠΡΠ»Π΅Π°Π½', 'Alt + E / Shift + B');
+ case TokenID.DECART: return prepareTooltip('ΠΠ΅ΠΊΠ°ΡΡΠΎΠ²ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅', 'Alt + Shift + E / Shift + 8');
+ case TokenID.PUNCTUATION_PL: return prepareTooltip('Π‘ΠΊΠΎΠ±ΠΊΠΈ () Π²ΠΎΠΊΡΡΠ³ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ', 'Alt + Shift + 9');
+ case TokenID.PUNCTUATION_SL: return prepareTooltip('Π‘ΠΊΠΎΠ±ΠΊΠΈ [] Π²ΠΎΠΊΡΡΠ³ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ', 'Alt + [');
+ case TokenID.QUANTOR_UNIVERSAL: return prepareTooltip('ΠΠ²Π°Π½ΡΠΎΡ Π²ΡΠ΅ΠΎΠ±ΡΠ½ΠΎΡΡΠΈ', '`');
+ case TokenID.QUANTOR_EXISTS: return prepareTooltip('ΠΠ²Π°Π½ΡΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ', 'Shift + `');
+ case TokenID.LOGIC_NOT: return prepareTooltip('ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅', 'Alt + `');
+ case TokenID.LOGIC_AND: return prepareTooltip('ΠΠΎΠ½ΡΡΠ½ΠΊΡΠΈΡ', 'Alt + 3 ~ Shift + 7');
+ case TokenID.LOGIC_OR: return prepareTooltip('ΠΠΈΠ·ΡΡΠ½ΠΊΡΠΈΡ', 'Alt + Shift + 3');
+ case TokenID.LOGIC_IMPLICATION: return prepareTooltip('ΠΠΌΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ', 'Alt + 4');
+ case TokenID.LOGIC_EQUIVALENT: return prepareTooltip('ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ', 'Alt + Shift + 4');
+ case TokenID.LIT_EMPTYSET: return prepareTooltip('ΠΡΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + X');
+ case TokenID.LIT_WHOLE_NUMBERS: return prepareTooltip('Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°', 'Alt + Z');
+ case TokenID.EQUAL: return prepareTooltip('Π Π°Π²Π΅Π½ΡΡΠ²ΠΎ');
+ case TokenID.MULTIPLY: return prepareTooltip('Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π»', 'Alt + 8');
+ case TokenID.NOTEQUAL: return prepareTooltip('ΠΠ΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ', 'Alt + Shift + `');
+ case TokenID.GREATER_OR_EQ: return prepareTooltip('ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ', 'Alt + Shift + 7');
+ case TokenID.LESSER_OR_EQ: return prepareTooltip('ΠΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ', 'Alt + Shift + 8');
+ case TokenID.SET_IN: return prepareTooltip('ΠΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ (ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ)', 'Alt + 1');
+ case TokenID.SET_NOT_IN: return prepareTooltip('ΠΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ', 'Alt + Shift + 1');
+ case TokenID.SUBSET_OR_EQ: return prepareTooltip('ΠΡΡΡ ΡΠ°ΡΡΡΡ (Π½Π΅ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ)', 'Alt + 2');
+ case TokenID.SUBSET: return prepareTooltip('Π‘ΡΡΠΎΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + 7');
+ case TokenID.NOT_SUBSET: return prepareTooltip('ΠΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + Shift + 2');
+ case TokenID.SET_INTERSECTION: return prepareTooltip('ΠΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅', 'Alt + A');
+ case TokenID.SET_UNION: return prepareTooltip('ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅', 'Alt + S');
+ case TokenID.SET_MINUS: return prepareTooltip('Π Π°Π·Π½ΠΎΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²', 'Alt + 5');
+ case TokenID.SET_SYMMETRIC_MINUS: return prepareTooltip('Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°Π·Π½ΠΎΡΡΡ', 'Alt + Shift + 5');
+ case TokenID.NT_DECLARATIVE_EXPR: return prepareTooltip('ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅', 'Alt + D');
+ case TokenID.NT_IMPERATIVE_EXPR: return prepareTooltip('ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅', 'Alt + G');
+ case TokenID.NT_RECURSIVE_FULL: return prepareTooltip('Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (ΡΠΈΠΊΠ»)', 'Alt + T');
+ case TokenID.BIGPR: return prepareTooltip('ΠΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ', 'Alt + Q');
+ case TokenID.SMALLPR: return prepareTooltip('ΠΠ°Π»Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ', 'Alt + W');
+ case TokenID.FILTER: return prepareTooltip('Π€ΠΈΠ»ΡΡΡ', 'Alt + F');
+ case TokenID.REDUCE: return prepareTooltip('ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ-ΡΡΠΌΠΌΠ°', 'Alt + R');
+ case TokenID.CARD: return prepareTooltip('ΠΠΎΡΠ½ΠΎΡΡΡ', 'Alt + C');
+ case TokenID.BOOL: return prepareTooltip('Π‘ΠΈΠ½Π³Π»Π΅ΡΠΎΠ½', 'Alt + B');
+ case TokenID.DEBOOL: return prepareTooltip('ΠΠ΅ΡΠΈΠ½Π³Π»Π΅ΡΠΎΠ½', 'Alt + V');
+ case TokenID.ASSIGN: return prepareTooltip('ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅', 'Alt + Shift + 6');
+ case TokenID.ITERATE: return prepareTooltip('ΠΠ΅ΡΠ΅Π±ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°', 'Alt + 6');
+ }
+ return `no description: ${id}`;
+}
+
+/**
+ * Retrieves label for {@link CstMatchMode}.
+ */
+export function labelCstMatchMode(mode: CstMatchMode): string {
+ // prettier-ignore
+ switch (mode) {
+ case CstMatchMode.ALL: return 'ΠΎΠ±ΡΠΈΠΉ';
+ case CstMatchMode.EXPR: return 'Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅';
+ case CstMatchMode.TERM: return 'ΡΠ΅ΡΠΌΠΈΠ½';
+ case CstMatchMode.TEXT: return 'ΡΠ΅ΠΊΡΡ';
+ case CstMatchMode.NAME: return 'ΠΈΠΌΡ';
+ }
+}
+
+/**
+ * Retrieves description for {@link CstMatchMode}.
+ */
+export function describeCstMatchMode(mode: CstMatchMode): string {
+ // prettier-ignore
+ switch (mode) {
+ case CstMatchMode.ALL: return 'Π²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ';
+ case CstMatchMode.EXPR: return 'ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅';
+ case CstMatchMode.TERM: return 'ΡΠ΅ΡΠΌΠΈΠ½';
+ case CstMatchMode.TEXT: return 'ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ';
+ case CstMatchMode.NAME: return 'ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π°';
+ }
+}
+
+/**
+ * Retrieves label for {@link DependencyMode}.
+ */
+export function labelCstSource(mode: DependencyMode): string {
+ // prettier-ignore
+ switch (mode) {
+ case DependencyMode.ALL: return 'Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½';
+ case DependencyMode.OUTPUTS: return 'ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ';
+ case DependencyMode.INPUTS: return 'ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ';
+ case DependencyMode.EXPAND_OUTPUTS: return 'Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅';
+ case DependencyMode.EXPAND_INPUTS: return 'Π²Π»ΠΈΡΡΡΠΈΠ΅';
+ }
+}
+
+/**
+ * Retrieves description for {@link DependencyMode}.
+ */
+export function describeCstSource(mode: DependencyMode): string {
+ // prettier-ignore
+ switch (mode) {
+ case DependencyMode.ALL: return 'Π²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case DependencyMode.OUTPUTS: return 'ΠΏΡΡΠΌΡΠ΅ ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠ΅';
+ case DependencyMode.INPUTS: return 'ΠΏΡΡΠΌΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅';
+ case DependencyMode.EXPAND_OUTPUTS: return 'ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
';
+ case DependencyMode.EXPAND_INPUTS: return 'ΡΠ΅ΠΏΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
';
+ }
+}
+
+/**
+ * Retrieves label for {@link GraphColoring}.
+ */
+export const mapLabelColoring = new Map([
+ ['none', 'Π¦Π²Π΅Ρ: ΠΠΎΠ½ΠΎ'],
+ ['status', 'Π¦Π²Π΅Ρ: Π‘ΡΠ°ΡΡΡ'],
+ ['type', 'Π¦Π²Π΅Ρ: ΠΠ»Π°ΡΡ'],
+ ['schemas', 'Π¦Π²Π΅Ρ: Π‘Ρ
Π΅ΠΌΡ']
+]);
+
+/**
+ * Retrieves label for {@link ExpressionStatus}.
+ */
+export function labelExpressionStatus(status: ExpressionStatus): string {
+ // prettier-ignore
+ switch (status) {
+ case ExpressionStatus.VERIFIED: return 'ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ';
+ case ExpressionStatus.INCORRECT: return 'ΠΎΡΠΈΠ±ΠΊΠ°';
+ case ExpressionStatus.INCALCULABLE: return 'Π½Π΅Π²ΡΡΠΈΡΠ»ΠΈΠΌΠΎ';
+ case ExpressionStatus.PROPERTY: return 'Π½Π΅ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅';
+ case ExpressionStatus.UNKNOWN: return 'Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ';
+ case ExpressionStatus.UNDEFINED: return 'N/A';
+ }
+}
+
+/**
+ * Retrieves description for {@link ExpressionStatus}.
+ */
+export function describeExpressionStatus(status: ExpressionStatus): string {
+ // prettier-ignore
+ switch (status) {
+ case ExpressionStatus.VERIFIED: return 'Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ Π²ΡΡΠΈΡΠ»ΠΈΠΌΠΎ';
+ case ExpressionStatus.INCORRECT: return 'ΠΎΡΠΈΠ±ΠΊΠ° Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ';
+ case ExpressionStatus.INCALCULABLE: return 'ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ';
+ case ExpressionStatus.PROPERTY: return 'ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ';
+ case ExpressionStatus.UNKNOWN: return 'ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
+ case ExpressionStatus.UNDEFINED: return 'ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅';
+ }
+}
+
+/**
+ * Retrieves label for {@link CstType}.
+ */
+export function labelCstType(target: CstType): string {
+ // prettier-ignore
+ switch (target) {
+ case CstType.BASE: return 'ΠΠ°Π·ΠΈΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ';
+ case CstType.CONSTANT: return 'ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ';
+ case CstType.STRUCTURED: return 'Π ΠΎΠ΄ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°';
+ case CstType.AXIOM: return 'ΠΠΊΡΠΈΠΎΠΌΠ°';
+ case CstType.TERM: return 'Π’Π΅ΡΠΌ';
+ case CstType.FUNCTION: return 'Π’Π΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΡ';
+ case CstType.PREDICATE: return 'ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ-ΡΡΠ½ΠΊΡΠΈΡ';
+ case CstType.THEOREM: return 'Π’Π΅ΠΎΡΠ΅ΠΌΠ°';
+ }
+}
+
+/**
+ * Retrieves label for {@link ReferenceType}.
+ */
+export function labelReferenceType(target: ReferenceType): string {
+ // prettier-ignore
+ switch (target) {
+ case ReferenceType.ENTITY: return 'ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°';
+ case ReferenceType.SYNTACTIC: return 'Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²';
+ }
+}
+
+/**
+ * Retrieves label for {@link CstClass}.
+ */
+export function labelCstClass(target: CstClass): string {
+ // prettier-ignore
+ switch (target) {
+ case CstClass.BASIC: return 'Π±Π°Π·ΠΎΠ²ΡΠΉ';
+ case CstClass.DERIVED: return 'ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ';
+ case CstClass.STATEMENT: return 'ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅';
+ case CstClass.TEMPLATE: return 'ΡΠ°Π±Π»ΠΎΠ½';
+ }
+}
+
+/**
+ * Retrieves description for {@link CstClass}.
+ */
+export function describeCstClass(target: CstClass): string {
+ // prettier-ignore
+ switch (target) {
+ case CstClass.BASIC: return 'Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅';
+ case CstClass.DERIVED: return 'ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅';
+ case CstClass.STATEMENT: return 'Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅';
+ case CstClass.TEMPLATE: return 'ΡΠ°Π±Π»ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ';
+ }
+}
+
+/**
+ * Generates label for typification.
+ */
+export function labelTypification({
+ isValid,
+ resultType,
+ args
+}: {
+ isValid: boolean;
+ resultType: string;
+ args: IArgumentInfo[];
+}): string {
+ if (!isValid) {
+ return 'N/A';
+ }
+ if (resultType === '' || resultType === PARAMETER.logicLabel) {
+ resultType = 'Logical';
+ }
+ if (args.length === 0) {
+ return resultType;
+ }
+ const argsText = args.map(arg => arg.typification).join(', ');
+ return `${resultType} π [${argsText}]`;
+}
+
+/**
+ * Generates label for {@link IConstituenta} typification.
+ */
+export function labelCstTypification(cst: IConstituenta): string {
+ return labelTypification({
+ isValid: cst.parse.status === ParsingStatus.VERIFIED,
+ resultType: cst.parse.typification,
+ args: cst.parse.args
+ });
+}
+
+/**
+ * Generates label for {@link ISyntaxTreeNode}.
+ */
+export function labelSyntaxTree(node: ISyntaxTreeNode): string {
+ // prettier-ignore
+ switch (node.typeID) {
+ case TokenID.ID_LOCAL:
+ case TokenID.ID_GLOBAL:
+ case TokenID.ID_FUNCTION:
+ case TokenID.ID_PREDICATE:
+ case TokenID.ID_RADICAL:
+ return node.data.value as string;
+
+ case TokenID.LIT_INTEGER: return String(node.data.value as number);
+
+ case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();
+ case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();
+ case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();
+
+ case TokenID.PLUS: return '+';
+ case TokenID.MINUS: return '-';
+ case TokenID.MULTIPLY: return '*';
+ case TokenID.GREATER: return '>';
+ case TokenID.LESSER: return '<';
+
+ case TokenID.NT_TUPLE: return 'TUPLE';
+ case TokenID.NT_ENUMERATION: return 'ENUM';
+
+ case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';
+ case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';
+ case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';
+ case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';
+
+ case TokenID.NT_ARG_DECL: return 'ARG';
+ case TokenID.NT_FUNC_CALL: return 'CALL';
+ case TokenID.NT_ARGUMENTS: return 'ARGS';
+
+ case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';
+
+ case TokenID.NT_RECURSIVE_SHORT: return labelToken(TokenID.NT_RECURSIVE_FULL);
+
+ case TokenID.BOOLEAN:
+ case TokenID.DECART:
+ case TokenID.QUANTOR_UNIVERSAL:
+ case TokenID.QUANTOR_EXISTS:
+ case TokenID.LOGIC_NOT:
+ case TokenID.LOGIC_AND:
+ case TokenID.LOGIC_OR:
+ case TokenID.LOGIC_IMPLICATION:
+ case TokenID.LOGIC_EQUIVALENT:
+ case TokenID.LIT_EMPTYSET:
+ case TokenID.LIT_WHOLE_NUMBERS:
+ case TokenID.EQUAL:
+ case TokenID.NOTEQUAL:
+ case TokenID.GREATER_OR_EQ:
+ case TokenID.LESSER_OR_EQ:
+ case TokenID.SET_IN:
+ case TokenID.SET_NOT_IN:
+ case TokenID.SUBSET_OR_EQ:
+ case TokenID.SUBSET:
+ case TokenID.NOT_SUBSET:
+ case TokenID.SET_INTERSECTION:
+ case TokenID.SET_UNION:
+ case TokenID.SET_MINUS:
+ case TokenID.SET_SYMMETRIC_MINUS:
+ case TokenID.NT_DECLARATIVE_EXPR:
+ case TokenID.NT_IMPERATIVE_EXPR:
+ case TokenID.NT_RECURSIVE_FULL:
+ case TokenID.REDUCE:
+ case TokenID.CARD:
+ case TokenID.BOOL:
+ case TokenID.DEBOOL:
+ case TokenID.ASSIGN:
+ case TokenID.ITERATE:
+ return labelToken(node.typeID);
+ }
+ // node
+ if (node.data.value) {
+ return node.data.value as string;
+ }
+ return 'UNKNOWN ' + String(node.typeID);
+}
+
+/**
+ * Generates label for grammeme.
+ */
+export function labelGrammeme(gram: GramData): string {
+ // prettier-ignore
+ switch (gram as Grammeme) {
+ default: return `ΠΠ΅ΠΈΠ·Π²: ${gram}`;
+
+ case Grammeme.NOUN: return 'Π§Π : ΡΡΡ';
+ case Grammeme.VERB: return 'Π§Π : Π³Π»Π°Π³ΠΎΠ»';
+ case Grammeme.INFN: return 'Π§Π : Π³Π»Π°Π³ΠΎΠ» ΠΈΠ½Ρ';
+ case Grammeme.ADJF: return 'Π§Π : ΠΏΡΠΈΠ»';
+ case Grammeme.PRTF: return 'Π§Π : ΠΏΡΠΈΡ';
+ case Grammeme.ADJS: return 'Π§Π : ΠΊΡ ΠΏΡΠΈΠ»';
+ case Grammeme.PRTS: return 'Π§Π : ΠΊΡ ΠΏΡΠΈΡ';
+ case Grammeme.COMP: return 'Π§Π : ΠΊΠΎΠΌΠΏΠ°ΡΠ°ΡΠΈΠ²';
+ case Grammeme.GRND: return 'Π§Π : Π΄Π΅Π΅ΠΏΡΠΈΡΠ°ΡΡΠΈΠ΅';
+ case Grammeme.NUMR: return 'Π§Π : ΡΠΈΡΠ»ΠΎ';
+ case Grammeme.ADVB: return 'Π§Π : Π½Π°ΡΠ΅ΡΠΈΠ΅';
+ case Grammeme.NPRO: return 'Π§Π : ΠΌΠ΅ΡΡΠΎΠΈΠΌΠ΅Π½ΠΈΠ΅';
+ case Grammeme.PRED: return 'Π§Π : ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΈΠ²';
+ case Grammeme.PREP: return 'Π§Π : ΠΏΡΠ΅Π΄Π»ΠΎΠ³';
+ case Grammeme.CONJ: return 'Π§Π : ΡΠΎΡΠ·';
+ case Grammeme.PRCL: return 'Π§Π : ΡΠ°ΡΡΠΈΡΠ°';
+ case Grammeme.INTJ: return 'Π§Π : ΠΌΠ΅ΠΆΠ΄ΠΎΠΌΠ΅ΡΠΈΠ΅';
+ case Grammeme.Abbr: return 'Π§Π : Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ°';
+
+ case Grammeme.sing: return 'Π§ΠΈΡΠ»ΠΎ: Π΅Π΄ΠΈΠ½';
+ case Grammeme.plur: return 'Π§ΠΈΡΠ»ΠΎ: ΠΌΠ½ΠΎΠΆ';
+
+ case Grammeme.nomn: return 'ΠΠ°Π΄Π΅ΠΆ: ΠΈΠΌΠ΅Π½';
+ case Grammeme.gent: return 'ΠΠ°Π΄Π΅ΠΆ: ΡΠΎΠ΄';
+ case Grammeme.datv: return 'ΠΠ°Π΄Π΅ΠΆ: Π΄Π°Ρ';
+ case Grammeme.accs: return 'ΠΠ°Π΄Π΅ΠΆ: Π²ΠΈΠ½';
+ case Grammeme.ablt: return 'ΠΠ°Π΄Π΅ΠΆ: ΡΠ²ΠΎΡ';
+ case Grammeme.loct: return 'ΠΠ°Π΄Π΅ΠΆ: ΠΏΡΠ΅Π΄';
+
+ case Grammeme.masc: return 'Π ΠΎΠ΄: ΠΌΡΠΆ';
+ case Grammeme.femn: return 'Π ΠΎΠ΄: ΠΆΠ΅Π½';
+ case Grammeme.neut: return 'Π ΠΎΠ΄: ΡΡ';
+
+ case Grammeme.perf: return 'Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ: Π΄Π°';
+ case Grammeme.impf: return 'Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.tran: return 'ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π½ΡΠΉ: Π΄Π°';
+ case Grammeme.intr: return 'ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π½ΡΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.pres: return 'ΠΡΠ΅ΠΌΡ: Π½Π°ΡΡΠΎΡΡΠ΅Π΅';
+ case Grammeme.past: return 'ΠΡΠ΅ΠΌΡ: ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅Π΅';
+ case Grammeme.futr: return 'ΠΡΠ΅ΠΌΡ: Π±ΡΠ΄ΡΡΠ΅Π΅';
+
+ case Grammeme.per1: return 'ΠΠΈΡΠΎ: 1';
+ case Grammeme.per2: return 'ΠΠΈΡΠΎ: 2';
+ case Grammeme.per3: return 'ΠΠΈΡΠΎ: 3';
+
+ case Grammeme.impr: return 'ΠΠΎΠ²Π΅Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ: Π΄Π°';
+ case Grammeme.indc: return 'ΠΠΎΠ²Π΅Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.incl: return 'ΠΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ: Π΄Π°';
+ case Grammeme.excl: return 'ΠΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.pssv: return 'Π‘ΡΡΠ°Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΉ: Π΄Π°';
+ case Grammeme.actv: return 'Π‘ΡΡΠ°Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.anim: return 'ΠΠ΄ΡΡΠ΅Π²Π»Π΅Π½Π½ΡΠΉ: Π΄Π°';
+ case Grammeme.inan: return 'ΠΠ΄ΡΡΠ΅Π²Π»Π΅Π½Π½ΡΠΉ: Π½Π΅Ρ';
+
+ case Grammeme.Infr: return 'Π‘ΡΠΈΠ»Ρ: Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ';
+ case Grammeme.Slng: return 'Π‘ΡΠΈΠ»Ρ: ΠΆΠ°ΡΠ³ΠΎΠ½';
+ case Grammeme.Arch: return 'Π‘ΡΠΈΠ»Ρ: ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ';
+ case Grammeme.Litr: return 'Π‘ΡΠΈΠ»Ρ: Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ½ΡΠΉ';
+ }
+}
+
+/**
+ * Generates error description for {@link IRSErrorDescription}.
+ */
+export function describeRSError(error: IRSErrorDescription): string {
+ // prettier-ignore
+ switch (error.errorType) {
+ case RSErrorType.unknownSymbol:
+ return `ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»: ${error.params[0]}`;
+ case RSErrorType.syntax:
+ return 'ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°';
+ case RSErrorType.missingParenthesis:
+ return 'ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° ΡΠΎΠ΄ΠΎΠ² ΡΡΡΡΠΊΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
+ case RSErrorType.missingCurlyBrace:
+ return "ΠΡΠΎΠΏΡΡΠ΅Π½ ΡΠΈΠΌΠ²ΠΎΠ» '}'";
+ case RSErrorType.invalidQuantifier:
+ return 'ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΊΠ²Π°Π½ΡΠΎΡΠ½Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ';
+ case RSErrorType.invalidImperative:
+ return 'ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π²Π½Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°';
+ case RSErrorType.expectedArgDeclaration:
+ return 'ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ';
+ case RSErrorType.expectedLocal:
+ return 'ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ ΠΈΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ';
+
+ case RSErrorType.localDoubleDeclare:
+ return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ${error.params[0]}`;
+ case RSErrorType.localNotUsed:
+ return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π°: ${error.params[0]}`;
+ case RSErrorType.localUndeclared:
+ return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: ${error.params[0]}`;
+ case RSErrorType.localShadowing:
+ return `ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: ${error.params[0]}`;
+
+ case RSErrorType.typesNotEqual:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ! ${error.params[0]} != ${error.params[1]}`;
+ case RSErrorType.globalNotTyped:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°: ${error.params[0]}`;
+ case RSErrorType.invalidDecart:
+ return `Ο(Ξ±Γb) = B(DΟ(Ξ±)ΓDΟ(b)). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
+ case RSErrorType.invalidBoolean:
+ return `Ο(B(a)) = BBDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
+ case RSErrorType.invalidTypeOperation:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°: ${error.params[0]}`;
+ case RSErrorType.invalidCard:
+ return `ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ: ${error.params[0]}`;
+ case RSErrorType.invalidDebool:
+ return `Ο(debool(a)) = DΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
+ case RSErrorType.globalFuncMissing:
+ return `ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]}`;
+ case RSErrorType.globalFuncWithoutArgs:
+ return `ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²: ${error.params[0]}`;
+ case RSErrorType.invalidReduce:
+ return `Ο(red(a)) = BDDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
+ case RSErrorType.invalidProjectionTuple:
+ return `ΠΡΠΎΠ΅ΠΊΡΠΈΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°: ${error.params[0]} -> ${error.params[1]}`;
+ case RSErrorType.invalidProjectionSet:
+ return `Ο(Pri(a)) = BCiDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]} -> ${error.params[1]}`;
+ case RSErrorType.invalidEnumeration:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ: ${error.params[0]} != ${error.params[1]}`;
+ case RSErrorType.invalidBinding:
+ return `ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΠΊΠΎΡΡΠ΅ΠΆΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ`;
+ case RSErrorType.localOutOfScope:
+ return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: ${error.params[0]}`;
+ case RSErrorType.invalidElementPredicate:
+ return `ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°: ${error.params[0]}${error.params[1]}${error.params[2]}`;
+ case RSErrorType.invalidEmptySetUsage:
+ return 'ΠΠ΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°';
+ case RSErrorType.invalidArgsArity:
+ return `ΠΠ΅Π²Π΅ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]} != ${error.params[1]}`;
+ case RSErrorType.invalidArgumentType:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ: ${error.params[0]} != ${error.params[1]}`;
+ case RSErrorType.globalStructure:
+ return `ΠΠ±Π»Π°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°`;
+ case RSErrorType.radicalUsage:
+ return `Π Π°Π΄ΠΈΠΊΠ°Π»Ρ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ Π²Π½Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]}`;
+ case RSErrorType.invalidFilterArgumentType:
+ return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠΈΠ»ΡΡΡΠ° Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°: ${error.params[0]}(${error.params[1]})`;
+ case RSErrorType.invalidFilterArity:
+ return `ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠ»ΡΡΡΠ° Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²`;
+ case RSErrorType.arithmeticNotSupported:
+ return `Π’ΠΈΠΏ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ: ${error.params[0]}`;
+ case RSErrorType.typesNotCompatible:
+ return `Π’ΠΈΠΏΡ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Π΄Π»Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ${error.params[0]} ΠΈ ${error.params[1]}`;
+ case RSErrorType.orderingNotSupported:
+ return `Π’ΠΈΠΏ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°: ${error.params[0]}`;
+ case RSErrorType.globalNoValue:
+ return `ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ: ${error.params[0]}`;
+ case RSErrorType.invalidPropertyUsage:
+ return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ`;
+ case RSErrorType.globalMissingAST:
+ return `ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: ${error.params[0]}`;
+ case RSErrorType.globalFuncNoInterpretation:
+ return 'Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²';
+
+ case RSErrorType.cstNonemptyBase:
+ return 'ΠΠ΅ΠΏΡΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π°Π·ΠΈΡΠ½ΠΎΠ³ΠΎ/ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°';
+ case RSErrorType.cstEmptyDerived:
+ return 'ΠΡΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ';
+ case RSErrorType.cstCallableNoArgs:
+ return 'ΠΡΡΡΡΡΡΠ²ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case RSErrorType.cstNonCallableHasArgs:
+ return 'ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
+ case RSErrorType.cstExpectedLogical:
+ return 'ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
+ case RSErrorType.cstExpectedTyped:
+ return 'ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
+ }
+ return 'UNKNOWN ERROR';
+}
diff --git a/rsconcept/frontend/src/features/rsform/models/languageAPI.ts b/rsconcept/frontend/src/features/rsform/models/languageAPI.ts
index ae592a9d..2ec9de7b 100644
--- a/rsconcept/frontend/src/features/rsform/models/languageAPI.ts
+++ b/rsconcept/frontend/src/features/rsform/models/languageAPI.ts
@@ -2,8 +2,7 @@
* Module: Natural language model API.
*/
-import { labelGrammeme } from '@/utils/labels';
-
+import { labelGrammeme } from '../labels';
import {
GramData,
Grammeme,
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/EditorConstituenta.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/EditorConstituenta.tsx
index ac4df471..087a8fef 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/EditorConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/EditorConstituenta.tsx
@@ -68,7 +68,7 @@ function EditorConstituenta() {
showEditTerm({
target: activeCst,
onSave: forms =>
- cstUpdate({
+ void cstUpdate({
itemID: schema.id,
data: {
target: activeCst.id,
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
index 12d928dc..ebc383cc 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx
@@ -14,12 +14,13 @@ import { CProps } from '@/components/props';
import { Indicator } from '@/components/View';
import { useDialogsStore } from '@/stores/dialogs';
import { useModificationStore } from '@/stores/modification';
-import { errors, labelCstTypification, labelTypification } from '@/utils/labels';
+import { errors } from '@/utils/labels';
import { ICstUpdateDTO, schemaCstUpdate } from '../../../backend/api';
import { useCstUpdate } from '../../../backend/useCstUpdate';
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
import RefsInput from '../../../components/RefsInput';
+import { labelCstTypification, labelTypification } from '../../../labels';
import { ConstituentaID, CstType, IConstituenta, IRSForm } from '../../../models/rsform';
import { isBaseSet, isBasicConcept, isFunctional } from '../../../models/rsformAPI';
import { IExpressionParse, ParsingStatus } from '../../../models/rslang';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
index 21fe0a1d..f6519fc3 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx
@@ -17,13 +17,14 @@ import {
IconReset,
IconSave
} from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useFindPredecessor } from '@/features/oss/backend/useFindPredecessor';
import { useModificationStore } from '@/stores/modification';
import { usePreferencesStore } from '@/stores/preferences';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip, tooltips } from '@/utils/labels';
+import { tooltips } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
index b1a757c0..d47ea5d3 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx
@@ -7,7 +7,7 @@ import { toast } from 'react-toastify';
import { DataCallback } from '@/backend/apiTransport';
import { Overlay } from '@/components/Container';
import { CProps } from '@/components/props';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useDialogsStore } from '@/stores/dialogs';
import { usePreferencesStore } from '@/stores/preferences';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/ParsingResult.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/ParsingResult.tsx
index 64dcfe3d..e4c24d96 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/ParsingResult.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/ParsingResult.tsx
@@ -1,5 +1,4 @@
-import { describeRSError } from '@/utils/labels';
-
+import { describeRSError } from '../../../labels';
import { IExpressionParse, IRSErrorDescription } from '../../../models/rslang';
import { getRSErrorPrefix } from '../../../models/rslangAPI';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/RSTokenButton.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/RSTokenButton.tsx
index d9c51eee..b2c29978 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/RSTokenButton.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/RSTokenButton.tsx
@@ -1,8 +1,8 @@
import clsx from 'clsx';
import { globals } from '@/utils/constants';
-import { describeToken, labelToken } from '@/utils/labels';
+import { describeToken, labelToken } from '../../../labels';
import { TokenID } from '../../../models/rslang';
interface RSTokenButtonProps {
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx
index 5943afa2..44f024f8 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx
@@ -6,8 +6,9 @@ import { StatusIcon } from '@/components/DomainIcons';
import { Loader } from '@/components/Loader';
import { APP_COLORS, colorStatusBar } from '@/styling/color';
import { globals } from '@/utils/constants';
-import { labelExpressionStatus, prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
+import { labelExpressionStatus } from '../../../labels';
import { ExpressionStatus, IConstituenta } from '../../../models/rsform';
import { inferStatus } from '../../../models/rsformAPI';
import { IExpressionParse, ParsingStatus } from '../../../models/rslang';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
index ca0bac1f..dcc064ed 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem.tsx
@@ -23,7 +23,7 @@ import { useSetOwner } from '@/features/library/backend/useSetOwner';
import { ILibraryItemEditor } from '@/features/library/models/library';
import { useLibrarySearchStore } from '@/features/library/stores/librarySearch';
import { useLabelUser } from '@/features/users/backend/useLabelUser';
-import SelectUser from '@/features/users/components/SelectUser';
+import { SelectUser } from '@/features/users/components/SelectUser';
import { UserID, UserRole } from '@/features/users/models/user';
import { useDialogsStore } from '@/stores/dialogs';
import { useModificationStore } from '@/stores/modification';
@@ -63,7 +63,7 @@ function EditorLibraryItem({ controller }: EditorLibraryItemProps) {
if (!window.confirm(prompts.ownerChange)) {
return;
}
- setOwner({ itemID: controller.schema.id, owner: newValue });
+ void setOwner({ itemID: controller.schema.id, owner: newValue });
};
function handleOpenLibrary(event: CProps.EventMouse) {
@@ -74,14 +74,14 @@ function EditorLibraryItem({ controller }: EditorLibraryItemProps) {
function handleEditLocation() {
showEditLocation({
initial: controller.schema.location,
- onChangeLocation: newLocation => setLocation({ itemID: controller.schema.id, location: newLocation })
+ onChangeLocation: newLocation => void setLocation({ itemID: controller.schema.id, location: newLocation })
});
}
function handleEditEditors() {
showEditEditors({
editors: controller.schema.editors,
- onChangeEditors: newEditors => setEditors({ itemID: controller.schema.id, editors: newEditors })
+ onChangeEditors: newEditors => void setEditors({ itemID: controller.schema.id, editors: newEditors })
});
}
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
index 89db08fc..75408010 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx
@@ -3,7 +3,7 @@ import { MiniButton } from '@/components/Control';
import { VisibilityIcon } from '@/components/DomainIcons';
import { IconImmutable, IconMutable } from '@/components/Icons';
import { Label } from '@/components/Input';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary';
import { useSetAccessPolicy } from '@/features/library/backend/useSetAccessPolicy';
@@ -28,7 +28,7 @@ function ToolbarItemAccess({ visible, toggleVisible, readOnly, toggleReadOnly, c
const { setAccessPolicy } = useSetAccessPolicy();
function handleSetAccessPolicy(newPolicy: AccessPolicy) {
- setAccessPolicy({ itemID: controller.schema.id, policy: newPolicy });
+ void setAccessPolicy({ itemID: controller.schema.id, policy: newPolicy });
}
return (
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
index e4cc1fd1..82fa95bb 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx
@@ -3,7 +3,7 @@
import { Overlay } from '@/components/Container';
import { MiniButton } from '@/components/Control';
import { IconDestroy, IconSave, IconShare } from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary';
import { AccessPolicy, ILibraryItemEditor, LibraryItemType } from '@/features/library/models/library';
@@ -11,7 +11,8 @@ import { UserRole } from '@/features/users/models/user';
import { useModificationStore } from '@/stores/modification';
import { useRoleStore } from '@/stores/role';
import { PARAMETER } from '@/utils/constants';
-import { prepareTooltip, tooltips } from '@/utils/labels';
+import { tooltips } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { sharePage } from '@/utils/utils';
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
index 5efd4ca3..e48128d3 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx
@@ -3,7 +3,7 @@
import { Overlay } from '@/components/Container';
import { MiniButton } from '@/components/Control';
import { IconNewVersion, IconUpload, IconVersions } from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useVersionRestore } from '@/features/library/backend/useVersionRestore';
import { useDialogsStore } from '@/stores/dialogs';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/TableRSList.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/TableRSList.tsx
index f3d0d2d0..cc88a306 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/TableRSList.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/TableRSList.tsx
@@ -9,10 +9,10 @@ import { CProps } from '@/components/props';
import { NoData, TextContent } from '@/components/View';
import useWindowSize from '@/hooks/useWindowSize';
import { PARAMETER, prefixes } from '@/utils/constants';
-import { labelCstTypification } from '@/utils/labels';
import { truncateToSymbol } from '@/utils/utils';
import BadgeConstituenta from '../../../components/BadgeConstituenta';
+import { labelCstTypification } from '../../../labels';
import { ConstituentaID, IConstituenta } from '../../../models/rsform';
interface TableRSListProps {
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
index 0bf510d9..5e1ed9e9 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx
@@ -11,13 +11,14 @@ import {
IconOpenList,
IconReset
} from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { prefixes } from '@/utils/constants';
-import { getCstTypeShortcut, labelCstType, prepareTooltip } from '@/utils/labels';
+import { prepareTooltip } from '@/utils/utils';
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
+import { getCstTypeShortcut, labelCstType } from '../../../labels';
import { CstType } from '../../../models/rsform';
import { useRSEdit } from '../RSEditContext';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
index 9d820291..a028c11a 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx
@@ -1,9 +1,9 @@
import { Overlay } from '@/components/Container';
import { SelectSingle } from '@/components/Input';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
-import { mapLabelColoring } from '@/utils/labels';
+import { mapLabelColoring } from '../../../labels';
import { IRSForm } from '../../../models/rsform';
import { GraphColoring } from '../../../stores/termGraph';
import SchemasGuide from './SchemasGuide';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
index 6a3614aa..026730b3 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx
@@ -13,7 +13,7 @@ import {
IconTextOff,
IconTypeGraph
} from '@/components/Icons';
-import BadgeHelp from '@/components/shared/BadgeHelp';
+import { BadgeHelp } from '@/components/shared/BadgeHelp';
import { HelpTopic } from '@/features/help/models/helpTopic';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSTabs.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSTabs.tsx
index c04272c7..01438d6b 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSTabs.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSTabs.tsx
@@ -8,8 +8,8 @@ import { Overlay } from '@/components/Container';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/Tabs';
import { useAppLayoutStore } from '@/stores/appLayout';
import { useModificationStore } from '@/stores/modification';
-import { labelVersion } from '@/utils/labels';
+import { labelVersion } from '../../labels';
import { ConstituentaID } from '../../models/rsform';
import EditorConstituenta from './EditorConstituenta';
import EditorRSForm from './EditorRSFormCard';
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx
index c1bab7e0..15dc12e4 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx
@@ -6,8 +6,8 @@ import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown';
import { CProps } from '@/components/props';
import useWindowSize from '@/hooks/useWindowSize';
import { prefixes } from '@/utils/constants';
-import { describeCstSource, labelCstSource } from '@/utils/labels';
+import { describeCstSource, labelCstSource } from '../../../labels';
import { DependencyMode } from '../../../stores/cstSearch';
interface SelectGraphFilterProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx
index f7859156..81b4bd7f 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx
@@ -6,8 +6,8 @@ import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown';
import { CProps } from '@/components/props';
import useWindowSize from '@/hooks/useWindowSize';
import { prefixes } from '@/utils/constants';
-import { describeCstMatchMode, labelCstMatchMode } from '@/utils/labels';
+import { describeCstMatchMode, labelCstMatchMode } from '../../../labels';
import { CstMatchMode } from '../../../stores/cstSearch';
interface SelectMatchModeProps extends CProps.Styling {
diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
index e9084beb..9546a173 100644
--- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
+++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/TableSideConstituents.tsx
@@ -6,9 +6,9 @@ import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/D
import { NoData, TextContent } from '@/components/View';
import { APP_COLORS } from '@/styling/color';
import { PARAMETER, prefixes } from '@/utils/constants';
-import { describeConstituenta } from '@/utils/labels';
import BadgeConstituenta from '../../../components/BadgeConstituenta';
+import { describeConstituenta } from '../../../labels';
import { ConstituentaID, IConstituenta } from '../../../models/rsform';
const DESCRIPTION_MAX_SYMBOLS = 280;
diff --git a/rsconcept/frontend/src/features/users/components/SelectUser.tsx b/rsconcept/frontend/src/features/users/components/SelectUser.tsx
index b888b062..8919f244 100644
--- a/rsconcept/frontend/src/features/users/components/SelectUser.tsx
+++ b/rsconcept/frontend/src/features/users/components/SelectUser.tsx
@@ -19,7 +19,7 @@ interface SelectUserProps extends CProps.Styling {
noBorder?: boolean;
}
-function SelectUser({
+export function SelectUser({
className,
filter,
value,
@@ -56,5 +56,3 @@ function SelectUser({
/>
);
}
-
-export default SelectUser;
diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts
index 32cb06f0..d544b0c5 100644
--- a/rsconcept/frontend/src/utils/labels.ts
+++ b/rsconcept/frontend/src/utils/labels.ts
@@ -4,824 +4,8 @@
* Label is a short text used to represent an entity.
* Description is a long description used in tooltips.
*/
-import { HelpTopic } from '@/features/help/models/helpTopic';
-import { AccessPolicy, LibraryItemType, LocationHead } from '@/features/library/models/library';
-import { validateLocation } from '@/features/library/models/libraryAPI';
-import { ISubstitutionErrorDescription, OperationType, SubstitutionErrorType } from '@/features/oss/models/oss';
-import { GramData, Grammeme, ReferenceType } from '@/features/rsform/models/language';
-import { CstClass, CstType, ExpressionStatus, IConstituenta, IRSForm } from '@/features/rsform/models/rsform';
-import {
- IArgumentInfo,
- IRSErrorDescription,
- ISyntaxTreeNode,
- ParsingStatus,
- RSErrorType,
- TokenID
-} from '@/features/rsform/models/rslang';
-import { CstMatchMode, DependencyMode } from '@/features/rsform/stores/cstSearch';
-import { GraphColoring } from '@/features/rsform/stores/termGraph';
+import { AccessPolicy, LibraryItemType } from '@/features/library/models/library';
import { UserRole } from '@/features/users/models/user';
-import { FolderNode } from '@/models/FolderTree';
-
-import { PARAMETER } from './constants';
-
-/**
- * Remove html tags from target string.
- */
-export function removeTags(target?: string): string {
- if (!target) {
- return '';
- }
- return target.toString().replace(/(<([^>]+)>)/gi, '');
-}
-
-/**
- * Generates description for {@link IConstituenta}.
- */
-export function describeConstituenta(cst: IConstituenta): string {
- if (cst.cst_type === CstType.STRUCTURED) {
- return (
- cst.term_resolved ||
- cst.term_raw ||
- cst.definition_resolved ||
- cst.definition_raw ||
- cst.convention ||
- cst.definition_formal
- );
- } else {
- return (
- cst.term_resolved ||
- cst.term_raw ||
- cst.definition_resolved ||
- cst.definition_raw ||
- cst.definition_formal ||
- cst.convention
- );
- }
-}
-
-/**
- * Generates description for term of a given {@link IConstituenta}.
- */
-export function describeConstituentaTerm(cst?: IConstituenta): string {
- if (!cst) {
- return '!ΠΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ!';
- }
- if (!cst.term_resolved) {
- return '!ΠΡΡΡΠΎΠΉ ΡΠ΅ΡΠΌΠΈΠ½!';
- } else {
- return cst.term_resolved;
- }
-}
-
-/**
- * Generates label for {@link IConstituenta}.
- */
-export function labelConstituenta(cst: IConstituenta) {
- return `${cst.alias}: ${describeConstituenta(cst)}`;
-}
-
-/**
- * Generate HTML wrapper for control description including hotkey.
- */
-export function prepareTooltip(text: string, hotkey?: string) {
- return hotkey ? `[${hotkey}]
${text}` : text;
-}
-
-/**
- * Generates label for {@link IVersionInfo} of {@link IRSForm}.
- */
-export function labelVersion(schema?: IRSForm) {
- const version = schema?.versions.find(ver => ver.id === schema?.version);
- return version ? version.version : 'Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ';
-}
-
-/**
- * Retrieves label for {@link TokenID}.
- */
-export function labelToken(id: TokenID): string {
- // prettier-ignore
- switch (id) {
- case TokenID.BOOLEAN: return 'β¬()';
- case TokenID.DECART: return 'Γ';
- case TokenID.PUNCTUATION_PL: return '( )';
- case TokenID.PUNCTUATION_SL: return '[ ]';
- case TokenID.QUANTOR_UNIVERSAL: return 'β';
- case TokenID.QUANTOR_EXISTS: return 'β';
- case TokenID.LOGIC_NOT: return 'Β¬';
- case TokenID.LOGIC_AND: return '&';
- case TokenID.LOGIC_OR: return 'β¨';
- case TokenID.LOGIC_IMPLICATION: return 'β';
- case TokenID.LOGIC_EQUIVALENT: return 'β';
- case TokenID.LIT_EMPTYSET: return 'β
';
- case TokenID.LIT_WHOLE_NUMBERS: return 'Z';
- case TokenID.MULTIPLY: return '*';
- case TokenID.EQUAL: return '=';
- case TokenID.NOTEQUAL: return 'β ';
- case TokenID.GREATER_OR_EQ: return 'β₯';
- case TokenID.LESSER_OR_EQ: return 'β€';
- case TokenID.SET_IN: return 'β';
- case TokenID.SET_NOT_IN: return 'β';
- case TokenID.SUBSET_OR_EQ: return 'β';
- case TokenID.SUBSET: return 'β';
- case TokenID.NOT_SUBSET: return 'β';
- case TokenID.SET_INTERSECTION: return 'β©';
- case TokenID.SET_UNION: return 'βͺ';
- case TokenID.SET_MINUS: return '\\';
- case TokenID.SET_SYMMETRIC_MINUS: return 'β';
- case TokenID.NT_DECLARATIVE_EXPR: return 'D{}';
- case TokenID.NT_IMPERATIVE_EXPR: return 'I{}';
- case TokenID.NT_RECURSIVE_FULL: return 'R{}';
- case TokenID.BIGPR: return 'Pr1()';
- case TokenID.SMALLPR: return 'pr1()';
- case TokenID.FILTER: return 'Fi1[]()';
- case TokenID.REDUCE: return 'red()';
- case TokenID.CARD: return 'card()';
- case TokenID.BOOL: return 'bool()';
- case TokenID.DEBOOL: return 'debool()';
- case TokenID.ASSIGN: return ':=';
- case TokenID.ITERATE: return ':β';
- }
- return `no label: ${id}`;
-}
-
-/**
- * Return shortcut description for {@link CstType}.
- */
-export function getCstTypeShortcut(type: CstType) {
- const prefix = labelCstType(type) + ' [Alt + ';
- // prettier-ignore
- switch (type) {
- case CstType.BASE: return prefix + '1]';
- case CstType.STRUCTURED: return prefix + '2]';
- case CstType.TERM: return prefix + '3]';
- case CstType.AXIOM: return prefix + '4]';
- case CstType.FUNCTION: return prefix + 'Q]';
- case CstType.PREDICATE: return prefix + 'W]';
- case CstType.CONSTANT: return prefix + '5]';
- case CstType.THEOREM: return prefix + '6]';
- }
-}
-
-/**
- * Generates description for {@link TokenID}.
- */
-export function describeToken(id: TokenID): string {
- // prettier-ignore
- switch (id) {
- case TokenID.BOOLEAN: return prepareTooltip('ΠΡΠ»Π΅Π°Π½', 'Alt + E / Shift + B');
- case TokenID.DECART: return prepareTooltip('ΠΠ΅ΠΊΠ°ΡΡΠΎΠ²ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅', 'Alt + Shift + E / Shift + 8');
- case TokenID.PUNCTUATION_PL: return prepareTooltip('Π‘ΠΊΠΎΠ±ΠΊΠΈ () Π²ΠΎΠΊΡΡΠ³ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ', 'Alt + Shift + 9');
- case TokenID.PUNCTUATION_SL: return prepareTooltip('Π‘ΠΊΠΎΠ±ΠΊΠΈ [] Π²ΠΎΠΊΡΡΠ³ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ', 'Alt + [');
- case TokenID.QUANTOR_UNIVERSAL: return prepareTooltip('ΠΠ²Π°Π½ΡΠΎΡ Π²ΡΠ΅ΠΎΠ±ΡΠ½ΠΎΡΡΠΈ', '`');
- case TokenID.QUANTOR_EXISTS: return prepareTooltip('ΠΠ²Π°Π½ΡΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ', 'Shift + `');
- case TokenID.LOGIC_NOT: return prepareTooltip('ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅', 'Alt + `');
- case TokenID.LOGIC_AND: return prepareTooltip('ΠΠΎΠ½ΡΡΠ½ΠΊΡΠΈΡ', 'Alt + 3 ~ Shift + 7');
- case TokenID.LOGIC_OR: return prepareTooltip('ΠΠΈΠ·ΡΡΠ½ΠΊΡΠΈΡ', 'Alt + Shift + 3');
- case TokenID.LOGIC_IMPLICATION: return prepareTooltip('ΠΠΌΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ', 'Alt + 4');
- case TokenID.LOGIC_EQUIVALENT: return prepareTooltip('ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ', 'Alt + Shift + 4');
- case TokenID.LIT_EMPTYSET: return prepareTooltip('ΠΡΡΡΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + X');
- case TokenID.LIT_WHOLE_NUMBERS: return prepareTooltip('Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°', 'Alt + Z');
- case TokenID.EQUAL: return prepareTooltip('Π Π°Π²Π΅Π½ΡΡΠ²ΠΎ');
- case TokenID.MULTIPLY: return prepareTooltip('Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π»', 'Alt + 8');
- case TokenID.NOTEQUAL: return prepareTooltip('ΠΠ΅ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ', 'Alt + Shift + `');
- case TokenID.GREATER_OR_EQ: return prepareTooltip('ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ', 'Alt + Shift + 7');
- case TokenID.LESSER_OR_EQ: return prepareTooltip('ΠΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ', 'Alt + Shift + 8');
- case TokenID.SET_IN: return prepareTooltip('ΠΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ (ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ)', 'Alt + 1');
- case TokenID.SET_NOT_IN: return prepareTooltip('ΠΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ', 'Alt + Shift + 1');
- case TokenID.SUBSET_OR_EQ: return prepareTooltip('ΠΡΡΡ ΡΠ°ΡΡΡΡ (Π½Π΅ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ)', 'Alt + 2');
- case TokenID.SUBSET: return prepareTooltip('Π‘ΡΡΠΎΠ³ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + 7');
- case TokenID.NOT_SUBSET: return prepareTooltip('ΠΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ', 'Alt + Shift + 2');
- case TokenID.SET_INTERSECTION: return prepareTooltip('ΠΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅', 'Alt + A');
- case TokenID.SET_UNION: return prepareTooltip('ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅', 'Alt + S');
- case TokenID.SET_MINUS: return prepareTooltip('Π Π°Π·Π½ΠΎΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²', 'Alt + 5');
- case TokenID.SET_SYMMETRIC_MINUS: return prepareTooltip('Π‘ΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°Π·Π½ΠΎΡΡΡ', 'Alt + Shift + 5');
- case TokenID.NT_DECLARATIVE_EXPR: return prepareTooltip('ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅', 'Alt + D');
- case TokenID.NT_IMPERATIVE_EXPR: return prepareTooltip('ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅', 'Alt + G');
- case TokenID.NT_RECURSIVE_FULL: return prepareTooltip('Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (ΡΠΈΠΊΠ»)', 'Alt + T');
- case TokenID.BIGPR: return prepareTooltip('ΠΠΎΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ', 'Alt + Q');
- case TokenID.SMALLPR: return prepareTooltip('ΠΠ°Π»Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ', 'Alt + W');
- case TokenID.FILTER: return prepareTooltip('Π€ΠΈΠ»ΡΡΡ', 'Alt + F');
- case TokenID.REDUCE: return prepareTooltip('ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ-ΡΡΠΌΠΌΠ°', 'Alt + R');
- case TokenID.CARD: return prepareTooltip('ΠΠΎΡΠ½ΠΎΡΡΡ', 'Alt + C');
- case TokenID.BOOL: return prepareTooltip('Π‘ΠΈΠ½Π³Π»Π΅ΡΠΎΠ½', 'Alt + B');
- case TokenID.DEBOOL: return prepareTooltip('ΠΠ΅ΡΠΈΠ½Π³Π»Π΅ΡΠΎΠ½', 'Alt + V');
- case TokenID.ASSIGN: return prepareTooltip('ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅', 'Alt + Shift + 6');
- case TokenID.ITERATE: return prepareTooltip('ΠΠ΅ΡΠ΅Π±ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°', 'Alt + 6');
- }
- return `no description: ${id}`;
-}
-
-/**
- * Retrieves label for {@link CstMatchMode}.
- */
-export function labelCstMatchMode(mode: CstMatchMode): string {
- // prettier-ignore
- switch (mode) {
- case CstMatchMode.ALL: return 'ΠΎΠ±ΡΠΈΠΉ';
- case CstMatchMode.EXPR: return 'Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅';
- case CstMatchMode.TERM: return 'ΡΠ΅ΡΠΌΠΈΠ½';
- case CstMatchMode.TEXT: return 'ΡΠ΅ΠΊΡΡ';
- case CstMatchMode.NAME: return 'ΠΈΠΌΡ';
- }
-}
-
-/**
- * Retrieves description for {@link CstMatchMode}.
- */
-export function describeCstMatchMode(mode: CstMatchMode): string {
- // prettier-ignore
- switch (mode) {
- case CstMatchMode.ALL: return 'Π²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ';
- case CstMatchMode.EXPR: return 'ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅';
- case CstMatchMode.TERM: return 'ΡΠ΅ΡΠΌΠΈΠ½';
- case CstMatchMode.TEXT: return 'ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ';
- case CstMatchMode.NAME: return 'ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π°';
- }
-}
-
-/**
- * Retrieves label for {@link DependencyMode}.
- */
-export function labelCstSource(mode: DependencyMode): string {
- // prettier-ignore
- switch (mode) {
- case DependencyMode.ALL: return 'Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½';
- case DependencyMode.OUTPUTS: return 'ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ';
- case DependencyMode.INPUTS: return 'ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ';
- case DependencyMode.EXPAND_OUTPUTS: return 'Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅';
- case DependencyMode.EXPAND_INPUTS: return 'Π²Π»ΠΈΡΡΡΠΈΠ΅';
- }
-}
-
-/**
- * Retrieves description for {@link DependencyMode}.
- */
-export function describeCstSource(mode: DependencyMode): string {
- // prettier-ignore
- switch (mode) {
- case DependencyMode.ALL: return 'Π²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case DependencyMode.OUTPUTS: return 'ΠΏΡΡΠΌΡΠ΅ ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΠ΅';
- case DependencyMode.INPUTS: return 'ΠΏΡΡΠΌΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅';
- case DependencyMode.EXPAND_OUTPUTS: return 'ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
';
- case DependencyMode.EXPAND_INPUTS: return 'ΡΠ΅ΠΏΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
';
- }
-}
-
-/**
- * Retrieves label for {@link LocationHead}.
- */
-export function labelLocationHead(head: LocationHead): string {
- // prettier-ignore
- switch (head) {
- case LocationHead.USER: return '/U : Π»ΠΈΡΠ½ΡΠ΅';
- case LocationHead.COMMON: return '/S : ΠΎΠ±ΡΠΈΠ΅';
- case LocationHead.LIBRARY: return '/L : ΠΏΡΠΈΠΌΠ΅ΡΡ';
- case LocationHead.PROJECTS: return '/P : ΠΏΡΠΎΠ΅ΠΊΡΡ';
- }
-}
-
-/**
- * Retrieves description for {@link LocationHead}.
- */
-export function describeLocationHead(head: LocationHead): string {
- // prettier-ignore
- switch (head) {
- case LocationHead.USER: return 'ΠΠΈΡΠ½ΡΠ΅ ΡΡ
Π΅ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ';
- case LocationHead.COMMON: return 'Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
- case LocationHead.LIBRARY: return 'ΠΠ°ΡΠ°Π»ΠΎΠ³ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΡ
ΡΡ
Π΅ΠΌ-ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²';
- case LocationHead.PROJECTS: return 'Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
- }
-}
-
-/**
- * Retrieves label for {@link GraphColoring}.
- */
-export const mapLabelColoring = new Map([
- ['none', 'Π¦Π²Π΅Ρ: ΠΠΎΠ½ΠΎ'],
- ['status', 'Π¦Π²Π΅Ρ: Π‘ΡΠ°ΡΡΡ'],
- ['type', 'Π¦Π²Π΅Ρ: ΠΠ»Π°ΡΡ'],
- ['schemas', 'Π¦Π²Π΅Ρ: Π‘Ρ
Π΅ΠΌΡ']
-]);
-
-/**
- * Retrieves label for {@link ExpressionStatus}.
- */
-export function labelExpressionStatus(status: ExpressionStatus): string {
- // prettier-ignore
- switch (status) {
- case ExpressionStatus.VERIFIED: return 'ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ';
- case ExpressionStatus.INCORRECT: return 'ΠΎΡΠΈΠ±ΠΊΠ°';
- case ExpressionStatus.INCALCULABLE: return 'Π½Π΅Π²ΡΡΠΈΡΠ»ΠΈΠΌΠΎ';
- case ExpressionStatus.PROPERTY: return 'Π½Π΅ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅';
- case ExpressionStatus.UNKNOWN: return 'Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ';
- case ExpressionStatus.UNDEFINED: return 'N/A';
- }
-}
-
-/**
- * Retrieves description for {@link ExpressionStatus}.
- */
-export function describeExpressionStatus(status: ExpressionStatus): string {
- // prettier-ignore
- switch (status) {
- case ExpressionStatus.VERIFIED: return 'Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ Π²ΡΡΠΈΡΠ»ΠΈΠΌΠΎ';
- case ExpressionStatus.INCORRECT: return 'ΠΎΡΠΈΠ±ΠΊΠ° Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ';
- case ExpressionStatus.INCALCULABLE: return 'ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ';
- case ExpressionStatus.PROPERTY: return 'ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ';
- case ExpressionStatus.UNKNOWN: return 'ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
- case ExpressionStatus.UNDEFINED: return 'ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅';
- }
-}
-
-/**
- * Retrieves label for {@link HelpTopic}.
- */
-export function labelHelpTopic(topic: HelpTopic): string {
- // prettier-ignore
- switch (topic) {
- case HelpTopic.MAIN: return 'π ΠΠΎΡΡΠ°Π»';
-
- case HelpTopic.THESAURUS: return 'π Π’Π΅Π·Π°ΡΡΡΡ';
-
- case HelpTopic.INTERFACE: return 'π ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ';
- case HelpTopic.UI_LIBRARY: return 'ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°';
- case HelpTopic.UI_RS_MENU: return 'ΠΠ΅Π½Ρ ΡΡ
Π΅ΠΌΡ';
- case HelpTopic.UI_RS_CARD: return 'ΠΠ°ΡΡΠΎΡΠΊΠ° ΡΡ
Π΅ΠΌΡ';
- case HelpTopic.UI_RS_LIST: return 'Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
- case HelpTopic.UI_RS_EDITOR: return 'Π Π΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_GRAPH_TERM: return 'ΠΡΠ°Ρ ΡΠ΅ΡΠΌΠΎΠ²';
- case HelpTopic.UI_FORMULA_TREE: return 'ΠΠ΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°';
- case HelpTopic.UI_TYPE_GRAPH: return 'ΠΡΠ°Ρ ΡΡΡΠΏΠ΅Π½Π΅ΠΉ';
- case HelpTopic.UI_CST_STATUS: return 'Π‘ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_CST_CLASS: return 'ΠΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_OSS_GRAPH: return 'ΠΡΠ°Ρ ΡΠΈΠ½ΡΠ΅Π·Π°';
- case HelpTopic.UI_SUBSTITUTIONS:return 'ΠΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»Π΅Π½ΠΈΡ';
- case HelpTopic.UI_RELOCATE_CST: return 'ΠΠ΅ΡΠ΅Π½ΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
-
- case HelpTopic.CONCEPTUAL: return 'β¨οΈ ΠΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ';
- case HelpTopic.CC_SYSTEM: return 'Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ';
- case HelpTopic.CC_CONSTITUENTA: return 'ΠΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ°';
- case HelpTopic.CC_RELATIONS: return 'Π‘Π²ΡΠ·ΠΈ ΠΏΠΎΠ½ΡΡΠΈΠΉ';
- case HelpTopic.CC_SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π· ΡΡ
Π΅ΠΌ';
- case HelpTopic.CC_OSS: return 'ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΡ
Π΅ΠΌΠ°';
- case HelpTopic.CC_PROPAGATION: return 'Π‘ΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ';
-
- case HelpTopic.RSLANG: return 'π ΠΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ';
- case HelpTopic.RSL_TYPES: return 'Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ';
- case HelpTopic.RSL_CORRECT: return 'ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ';
- case HelpTopic.RSL_INTERPRET: return 'ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ';
- case HelpTopic.RSL_OPERATIONS: return 'ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ';
- case HelpTopic.RSL_TEMPLATES: return 'ΠΠ°Π½ΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ';
-
- case HelpTopic.TERM_CONTROL: return 'πͺΈ Π’Π΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ·Π°ΡΠΈΡ';
- case HelpTopic.ACCESS: return 'π ΠΠΎΡΡΡΠΏΡ';
- case HelpTopic.VERSIONS: return 'πΊ ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅';
-
- case HelpTopic.INFO: return 'π° ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ';
- case HelpTopic.INFO_RULES: return 'ΠΡΠ°Π²ΠΈΠ»Π°';
- case HelpTopic.INFO_CONTRIB: return 'Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ';
- case HelpTopic.INFO_PRIVACY: return 'ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
';
- case HelpTopic.INFO_API: return 'REST API';
-
- case HelpTopic.EXTEOR: return 'π₯οΈ ΠΠΊΡΡΠ΅ΠΎΡ';
- }
-}
-
-/**
- * Retrieves description for {@link HelpTopic}.
- */
-export function describeHelpTopic(topic: HelpTopic): string {
- // prettier-ignore
- switch (topic) {
- case HelpTopic.MAIN: return 'ΠΎΠ±ΡΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΎ ΠΏΠΎΡΡΠ°Π»Ρ';
-
- case HelpTopic.THESAURUS: return 'ΡΠ΅ΡΠΌΠΈΠ½Ρ ΠΠΎΡΡΠ°Π»Π°';
-
- case HelpTopic.INTERFACE: return 'ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ';
- case HelpTopic.UI_LIBRARY: return 'ΠΏΠΎΠΈΡΠΊ ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΡ
Π΅ΠΌ';
- case HelpTopic.UI_RS_MENU: return 'ΠΌΠ΅Π½Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡ
Π΅ΠΌΡ';
- case HelpTopic.UI_RS_CARD: return 'ΠΎΠ±ΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΡ
Π΅ΠΌΡ';
- case HelpTopic.UI_RS_LIST: return 'ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡ
Π΅ΠΌΠ°
Π² ΡΠΎΡΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΡ';
- case HelpTopic.UI_RS_EDITOR: return 'ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_GRAPH_TERM: return 'ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π³ΡΠ°ΡΠ° ΡΠ΅ΡΠΌΠΎΠ²';
- case HelpTopic.UI_FORMULA_TREE: return 'ΠΏΡΠΎΡΠΌΠΎΡΡ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°Π·Π±ΠΎΡΠ°
ΡΠΎΠ΄ΠΎΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
- case HelpTopic.UI_TYPE_GRAPH: return 'ΠΏΡΠΎΡΠΌΠΎΡΡ Π³ΡΠ°ΡΠ° ΡΡΡΠΏΠ΅Π½Π΅ΠΉ';
- case HelpTopic.UI_CST_STATUS: return 'Π½ΠΎΡΠ°ΡΠΈΡ ΡΡΠ°ΡΡΡΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_CST_CLASS: return 'Π½ΠΎΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case HelpTopic.UI_OSS_GRAPH: return 'Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ°
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΡ
Π΅ΠΌΡ ΡΠΈΠ½ΡΠ΅Π·Π°';
- case HelpTopic.UI_SUBSTITUTIONS:return 'ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ';
- case HelpTopic.UI_RELOCATE_CST: return 'ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ
Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΠ‘Π‘';
-
- case HelpTopic.CONCEPTUAL: return 'ΠΎΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ';
- case HelpTopic.CC_SYSTEM: return 'ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡ
Π΅ΠΌΠ°
ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ½ΡΡΠΈΠΉ';
- case HelpTopic.CC_CONSTITUENTA: return 'ΠΏΠΎΠ½ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΠΈ Π΅Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²';
- case HelpTopic.CC_RELATIONS: return 'ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΠ°ΠΌΠΈ';
- case HelpTopic.CC_SYNTHESIS: return 'ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΈΠ½ΡΠ΅Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
- case HelpTopic.CC_OSS: return 'ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΡ
Π΅ΠΌΠ° ΡΠΈΠ½ΡΠ΅Π·Π°';
- case HelpTopic.CC_PROPAGATION: return 'ΡΠΊΠ²ΠΎΠ·Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΠ‘Π‘';
-
- case HelpTopic.RSLANG: return 'ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΡΠ·ΡΠΊ ΡΠΎΠ΄ΠΎΠ² ΡΡΡΡΠΊΡΡΡ';
- case HelpTopic.RSL_TYPES: return 'ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² Π²
ΡΠΎΠ΄ΠΎΡΡΡΡΠΊΡΡΡΠ½ΠΎΠΉ ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ';
- case HelpTopic.RSL_CORRECT: return 'Π±ΠΈΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ';
- case HelpTopic.RSL_INTERPRET: return 'ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ
ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ';
- case HelpTopic.RSL_OPERATIONS: return 'ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ';
- case HelpTopic.RSL_TEMPLATES: return 'ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΠ°Π½ΠΊΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ';
-
- case HelpTopic.TERM_CONTROL: return 'ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ² ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΠΎΡΡΡΠ»ΠΎΠΊ';
- case HelpTopic.ACCESS: return 'ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠ² ΠΊ ΡΡ
Π΅ΠΌΠ°ΠΌ';
- case HelpTopic.VERSIONS: return 'ΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΡΡ
Π΅ΠΌ';
-
- case HelpTopic.INFO: return 'ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅, Π½ΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠ΅
ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ';
- case HelpTopic.INFO_RULES: return 'ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΎΡΡΠ°Π»ΠΎΠΌ';
- case HelpTopic.INFO_CONTRIB: return 'ΠΏΡΠΈΠ·Π½Π°Π½ΠΈΠ΅ Π²ΠΊΠ»Π°Π΄Π°
Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΠΎΡΡΠ°Π»Π°';
- case HelpTopic.INFO_PRIVACY: return 'ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
';
- case HelpTopic.INFO_API: return 'ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²';
-
- case HelpTopic.EXTEOR: return 'ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΊΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΠΎΡΠΈΠΉ
"ΠΠΊΡΡΠ΅ΠΎΡ" Π΄Π»Ρ Windows';
- }
-}
-
-/**
- * Retrieves label for {@link CstType}.
- */
-export function labelCstType(target: CstType): string {
- // prettier-ignore
- switch (target) {
- case CstType.BASE: return 'ΠΠ°Π·ΠΈΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ';
- case CstType.CONSTANT: return 'ΠΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ';
- case CstType.STRUCTURED: return 'Π ΠΎΠ΄ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°';
- case CstType.AXIOM: return 'ΠΠΊΡΠΈΠΎΠΌΠ°';
- case CstType.TERM: return 'Π’Π΅ΡΠΌ';
- case CstType.FUNCTION: return 'Π’Π΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΡ';
- case CstType.PREDICATE: return 'ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ-ΡΡΠ½ΠΊΡΠΈΡ';
- case CstType.THEOREM: return 'Π’Π΅ΠΎΡΠ΅ΠΌΠ°';
- }
-}
-
-/**
- * Retrieves label for {@link ReferenceType}.
- */
-export function labelReferenceType(target: ReferenceType): string {
- // prettier-ignore
- switch(target) {
- case ReferenceType.ENTITY: return 'ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°';
- case ReferenceType.SYNTACTIC: return 'Π‘Π²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²';
- }
-}
-
-/**
- * Retrieves label for {@link CstClass}.
- */
-export function labelCstClass(target: CstClass): string {
- // prettier-ignore
- switch (target) {
- case CstClass.BASIC: return 'Π±Π°Π·ΠΎΠ²ΡΠΉ';
- case CstClass.DERIVED: return 'ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ';
- case CstClass.STATEMENT: return 'ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅';
- case CstClass.TEMPLATE: return 'ΡΠ°Π±Π»ΠΎΠ½';
- }
-}
-
-/**
- * Retrieves description for {@link CstClass}.
- */
-export function describeCstClass(target: CstClass): string {
- // prettier-ignore
- switch (target) {
- case CstClass.BASIC: return 'Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅';
- case CstClass.DERIVED: return 'ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅';
- case CstClass.STATEMENT: return 'Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅';
- case CstClass.TEMPLATE: return 'ΡΠ°Π±Π»ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ';
- }
-}
-
-/**
- * Generates label for typification.
- */
-export function labelTypification({
- isValid,
- resultType,
- args
-}: {
- isValid: boolean;
- resultType: string;
- args: IArgumentInfo[];
-}): string {
- if (!isValid) {
- return 'N/A';
- }
- if (resultType === '' || resultType === PARAMETER.logicLabel) {
- resultType = 'Logical';
- }
- if (args.length === 0) {
- return resultType;
- }
- const argsText = args.map(arg => arg.typification).join(', ');
- return `${resultType} π [${argsText}]`;
-}
-
-export function labelCstTypification(cst: IConstituenta): string {
- return labelTypification({
- isValid: cst.parse.status === ParsingStatus.VERIFIED,
- resultType: cst.parse.typification,
- args: cst.parse.args
- });
-}
-
-/**
- * Generates label for {@link ISyntaxTreeNode}.
- */
-export function labelSyntaxTree(node: ISyntaxTreeNode): string {
- // prettier-ignore
- switch (node.typeID) {
- case TokenID.ID_LOCAL:
- case TokenID.ID_GLOBAL:
- case TokenID.ID_FUNCTION:
- case TokenID.ID_PREDICATE:
- case TokenID.ID_RADICAL:
- return node.data.value as string;
-
- case TokenID.LIT_INTEGER: return String(node.data.value as number);
-
- case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();
- case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();
- case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();
-
- case TokenID.PLUS: return '+';
- case TokenID.MINUS: return '-';
- case TokenID.MULTIPLY: return '*';
- case TokenID.GREATER: return '>';
- case TokenID.LESSER: return '<';
-
- case TokenID.NT_TUPLE: return 'TUPLE';
- case TokenID.NT_ENUMERATION: return 'ENUM';
-
- case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';
- case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';
- case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';
- case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';
-
- case TokenID.NT_ARG_DECL: return 'ARG';
- case TokenID.NT_FUNC_CALL: return 'CALL';
- case TokenID.NT_ARGUMENTS: return 'ARGS';
-
- case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';
-
- case TokenID.NT_RECURSIVE_SHORT: return labelToken(TokenID.NT_RECURSIVE_FULL);
-
- case TokenID.BOOLEAN:
- case TokenID.DECART:
- case TokenID.QUANTOR_UNIVERSAL:
- case TokenID.QUANTOR_EXISTS:
- case TokenID.LOGIC_NOT:
- case TokenID.LOGIC_AND:
- case TokenID.LOGIC_OR:
- case TokenID.LOGIC_IMPLICATION:
- case TokenID.LOGIC_EQUIVALENT:
- case TokenID.LIT_EMPTYSET:
- case TokenID.LIT_WHOLE_NUMBERS:
- case TokenID.EQUAL:
- case TokenID.NOTEQUAL:
- case TokenID.GREATER_OR_EQ:
- case TokenID.LESSER_OR_EQ:
- case TokenID.SET_IN:
- case TokenID.SET_NOT_IN:
- case TokenID.SUBSET_OR_EQ:
- case TokenID.SUBSET:
- case TokenID.NOT_SUBSET:
- case TokenID.SET_INTERSECTION:
- case TokenID.SET_UNION:
- case TokenID.SET_MINUS:
- case TokenID.SET_SYMMETRIC_MINUS:
- case TokenID.NT_DECLARATIVE_EXPR:
- case TokenID.NT_IMPERATIVE_EXPR:
- case TokenID.NT_RECURSIVE_FULL:
- case TokenID.REDUCE:
- case TokenID.CARD:
- case TokenID.BOOL:
- case TokenID.DEBOOL:
- case TokenID.ASSIGN:
- case TokenID.ITERATE:
- return labelToken(node.typeID);
- }
- // node
- if (node.data.value) {
- return node.data.value as string;
- }
- return 'UNKNOWN ' + String(node.typeID);
-}
-
-export function labelGrammeme(gram: GramData): string {
- // prettier-ignore
- switch (gram as Grammeme) {
- default: return `ΠΠ΅ΠΈΠ·Π²: ${gram}`;
-
- case Grammeme.NOUN: return 'Π§Π : ΡΡΡ';
- case Grammeme.VERB: return 'Π§Π : Π³Π»Π°Π³ΠΎΠ»';
- case Grammeme.INFN: return 'Π§Π : Π³Π»Π°Π³ΠΎΠ» ΠΈΠ½Ρ';
- case Grammeme.ADJF: return 'Π§Π : ΠΏΡΠΈΠ»';
- case Grammeme.PRTF: return 'Π§Π : ΠΏΡΠΈΡ';
- case Grammeme.ADJS: return 'Π§Π : ΠΊΡ ΠΏΡΠΈΠ»';
- case Grammeme.PRTS: return 'Π§Π : ΠΊΡ ΠΏΡΠΈΡ';
- case Grammeme.COMP: return 'Π§Π : ΠΊΠΎΠΌΠΏΠ°ΡΠ°ΡΠΈΠ²';
- case Grammeme.GRND: return 'Π§Π : Π΄Π΅Π΅ΠΏΡΠΈΡΠ°ΡΡΠΈΠ΅';
- case Grammeme.NUMR: return 'Π§Π : ΡΠΈΡΠ»ΠΎ';
- case Grammeme.ADVB: return 'Π§Π : Π½Π°ΡΠ΅ΡΠΈΠ΅';
- case Grammeme.NPRO: return 'Π§Π : ΠΌΠ΅ΡΡΠΎΠΈΠΌΠ΅Π½ΠΈΠ΅';
- case Grammeme.PRED: return 'Π§Π : ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΈΠ²';
- case Grammeme.PREP: return 'Π§Π : ΠΏΡΠ΅Π΄Π»ΠΎΠ³';
- case Grammeme.CONJ: return 'Π§Π : ΡΠΎΡΠ·';
- case Grammeme.PRCL: return 'Π§Π : ΡΠ°ΡΡΠΈΡΠ°';
- case Grammeme.INTJ: return 'Π§Π : ΠΌΠ΅ΠΆΠ΄ΠΎΠΌΠ΅ΡΠΈΠ΅';
- case Grammeme.Abbr: return 'Π§Π : Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ°';
-
- case Grammeme.sing: return 'Π§ΠΈΡΠ»ΠΎ: Π΅Π΄ΠΈΠ½';
- case Grammeme.plur: return 'Π§ΠΈΡΠ»ΠΎ: ΠΌΠ½ΠΎΠΆ';
-
- case Grammeme.nomn: return 'ΠΠ°Π΄Π΅ΠΆ: ΠΈΠΌΠ΅Π½';
- case Grammeme.gent: return 'ΠΠ°Π΄Π΅ΠΆ: ΡΠΎΠ΄';
- case Grammeme.datv: return 'ΠΠ°Π΄Π΅ΠΆ: Π΄Π°Ρ';
- case Grammeme.accs: return 'ΠΠ°Π΄Π΅ΠΆ: Π²ΠΈΠ½';
- case Grammeme.ablt: return 'ΠΠ°Π΄Π΅ΠΆ: ΡΠ²ΠΎΡ';
- case Grammeme.loct: return 'ΠΠ°Π΄Π΅ΠΆ: ΠΏΡΠ΅Π΄';
-
- case Grammeme.masc: return 'Π ΠΎΠ΄: ΠΌΡΠΆ';
- case Grammeme.femn: return 'Π ΠΎΠ΄: ΠΆΠ΅Π½';
- case Grammeme.neut: return 'Π ΠΎΠ΄: ΡΡ';
-
- case Grammeme.perf: return 'Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ: Π΄Π°';
- case Grammeme.impf: return 'Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΡΠΉ: Π½Π΅Ρ';
-
- case Grammeme.tran: return 'ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π½ΡΠΉ: Π΄Π°';
- case Grammeme.intr: return 'ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π½ΡΠΉ: Π½Π΅Ρ';
-
- case Grammeme.pres: return 'ΠΡΠ΅ΠΌΡ: Π½Π°ΡΡΠΎΡΡΠ΅Π΅';
- case Grammeme.past: return 'ΠΡΠ΅ΠΌΡ: ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅Π΅';
- case Grammeme.futr: return 'ΠΡΠ΅ΠΌΡ: Π±ΡΠ΄ΡΡΠ΅Π΅';
-
- case Grammeme.per1: return 'ΠΠΈΡΠΎ: 1';
- case Grammeme.per2: return 'ΠΠΈΡΠΎ: 2';
- case Grammeme.per3: return 'ΠΠΈΡΠΎ: 3';
-
- case Grammeme.impr: return 'ΠΠΎΠ²Π΅Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ: Π΄Π°';
- case Grammeme.indc: return 'ΠΠΎΠ²Π΅Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ: Π½Π΅Ρ';
-
- case Grammeme.incl: return 'ΠΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ: Π΄Π°';
- case Grammeme.excl: return 'ΠΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ: Π½Π΅Ρ';
-
- case Grammeme.pssv: return 'Π‘ΡΡΠ°Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΉ: Π΄Π°';
- case Grammeme.actv: return 'Π‘ΡΡΠ°Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΉ: Π½Π΅Ρ';
-
- case Grammeme.anim: return 'ΠΠ΄ΡΡΠ΅Π²Π»Π΅Π½Π½ΡΠΉ: Π΄Π°';
- case Grammeme.inan: return 'ΠΠ΄ΡΡΠ΅Π²Π»Π΅Π½Π½ΡΠΉ: Π½Π΅Ρ';
-
- case Grammeme.Infr: return 'Π‘ΡΠΈΠ»Ρ: Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ';
- case Grammeme.Slng: return 'Π‘ΡΠΈΠ»Ρ: ΠΆΠ°ΡΠ³ΠΎΠ½';
- case Grammeme.Arch: return 'Π‘ΡΠΈΠ»Ρ: ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ';
- case Grammeme.Litr: return 'Π‘ΡΠΈΠ»Ρ: Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ½ΡΠΉ';
- }
-}
-
-/**
- * Generates error description for {@link IRSErrorDescription}.
- */
-export function describeRSError(error: IRSErrorDescription): string {
- // prettier-ignore
- switch (error.errorType) {
- case RSErrorType.unknownSymbol:
- return `ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»: ${error.params[0]}`;
- case RSErrorType.syntax:
- return 'ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°';
- case RSErrorType.missingParenthesis:
- return 'ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° ΡΠΎΠ΄ΠΎΠ² ΡΡΡΡΠΊΡΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
- case RSErrorType.missingCurlyBrace:
- return "ΠΡΠΎΠΏΡΡΠ΅Π½ ΡΠΈΠΌΠ²ΠΎΠ» '}'";
- case RSErrorType.invalidQuantifier:
- return 'ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΊΠ²Π°Π½ΡΠΎΡΠ½Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ';
- case RSErrorType.invalidImperative:
- return 'ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π²Π½Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°';
- case RSErrorType.expectedArgDeclaration:
- return 'ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ';
- case RSErrorType.expectedLocal:
- return 'ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ ΠΈΠΌΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ';
-
- case RSErrorType.localDoubleDeclare:
- return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ${error.params[0]}`;
- case RSErrorType.localNotUsed:
- return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π°: ${error.params[0]}`;
- case RSErrorType.localUndeclared:
- return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: ${error.params[0]}`;
- case RSErrorType.localShadowing:
- return `ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ: ${error.params[0]}`;
-
- case RSErrorType.typesNotEqual:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ! ${error.params[0]} != ${error.params[1]}`;
- case RSErrorType.globalNotTyped:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°: ${error.params[0]}`;
- case RSErrorType.invalidDecart:
- return `Ο(Ξ±Γb) = B(DΟ(Ξ±)ΓDΟ(b)). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
- case RSErrorType.invalidBoolean:
- return `Ο(B(a)) = BBDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
- case RSErrorType.invalidTypeOperation:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°: ${error.params[0]}`;
- case RSErrorType.invalidCard:
- return `ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ: ${error.params[0]}`;
- case RSErrorType.invalidDebool:
- return `Ο(debool(a)) = DΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
- case RSErrorType.globalFuncMissing:
- return `ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]}`;
- case RSErrorType.globalFuncWithoutArgs:
- return `ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²: ${error.params[0]}`;
- case RSErrorType.invalidReduce:
- return `Ο(red(a)) = BDDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]}`;
- case RSErrorType.invalidProjectionTuple:
- return `ΠΡΠΎΠ΅ΠΊΡΠΈΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°: ${error.params[0]} -> ${error.params[1]}`;
- case RSErrorType.invalidProjectionSet:
- return `Ο(Pri(a)) = BCiDΟ(a). ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ${error.params[0]} -> ${error.params[1]}`;
- case RSErrorType.invalidEnumeration:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ: ${error.params[0]} != ${error.params[1]}`;
- case RSErrorType.invalidBinding:
- return `ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΠΊΠΎΡΡΠ΅ΠΆΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ`;
- case RSErrorType.localOutOfScope:
- return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: ${error.params[0]}`;
- case RSErrorType.invalidElementPredicate:
- return `ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°: ${error.params[0]}${error.params[1]}${error.params[2]}`;
- case RSErrorType.invalidEmptySetUsage:
- return 'ΠΠ΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°';
- case RSErrorType.invalidArgsArity:
- return `ΠΠ΅Π²Π΅ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]} != ${error.params[1]}`;
- case RSErrorType.invalidArgumentType:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ: ${error.params[0]} != ${error.params[1]}`;
- case RSErrorType.globalStructure:
- return `ΠΠ±Π»Π°ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°`;
- case RSErrorType.radicalUsage:
- return `Π Π°Π΄ΠΈΠΊΠ°Π»Ρ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ Π²Π½Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠΌ-ΡΡΠ½ΠΊΡΠΈΠΈ: ${error.params[0]}`;
- case RSErrorType.invalidFilterArgumentType:
- return `Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠΈΠ»ΡΡΡΠ° Π½Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°: ${error.params[0]}(${error.params[1]})`;
- case RSErrorType.invalidFilterArity:
- return `ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠ»ΡΡΡΠ° Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²`;
- case RSErrorType.arithmeticNotSupported:
- return `Π’ΠΈΠΏ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ: ${error.params[0]}`;
- case RSErrorType.typesNotCompatible:
- return `Π’ΠΈΠΏΡ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Π΄Π»Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ${error.params[0]} ΠΈ ${error.params[1]}`;
- case RSErrorType.orderingNotSupported:
- return `Π’ΠΈΠΏ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°: ${error.params[0]}`;
- case RSErrorType.globalNoValue:
- return `ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ: ${error.params[0]}`;
- case RSErrorType.invalidPropertyUsage:
- return `ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ`;
- case RSErrorType.globalMissingAST:
- return `ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° Π΄Π»Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°: ${error.params[0]}`;
- case RSErrorType.globalFuncNoInterpretation:
- return 'Π€ΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²';
-
- case RSErrorType.cstNonemptyBase:
- return 'ΠΠ΅ΠΏΡΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π°Π·ΠΈΡΠ½ΠΎΠ³ΠΎ/ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°';
- case RSErrorType.cstEmptyDerived:
- return 'ΠΡΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ';
- case RSErrorType.cstCallableNoArgs:
- return 'ΠΡΡΡΡΡΡΠ²ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case RSErrorType.cstNonCallableHasArgs:
- return 'ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ';
- case RSErrorType.cstExpectedLogical:
- return 'ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
- case RSErrorType.cstExpectedTyped:
- return 'ΠΠ°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΎ-ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ';
- }
- return 'UNKNOWN ERROR';
-}
-
-/**
- * Generates error description for {@link ISubstitutionErrorDescription}.
- */
-export function describeSubstitutionError(error: ISubstitutionErrorDescription): string {
- switch (error.errorType) {
- case SubstitutionErrorType.invalidIDs:
- return 'ΠΡΠΈΠ±ΠΊΠ° Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°Ρ
ΡΡ
Π΅ΠΌ';
- case SubstitutionErrorType.incorrectCst:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½ΡΡ`;
- case SubstitutionErrorType.invalidBasic:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: Π·Π°ΠΌΠ΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ Π±Π°Π·ΠΈΡΠ½ΡΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ`;
- case SubstitutionErrorType.invalidConstant:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ`;
- case SubstitutionErrorType.invalidClasses:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΠ½ΡΡΠΈΡΡΠ΅Π½Ρ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ`;
- case SubstitutionErrorType.typificationCycle:
- return `ΠΡΠΈΠ±ΠΊΠ°: ΡΠΈΠΊΠ» ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π² ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡΡ
${error.params[0]}`;
- case SubstitutionErrorType.baseSubstitutionNotSet:
- return `ΠΡΠΈΠ±ΠΊΠ°: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ${error.params[0]} β ${error.params[1]}`;
- case SubstitutionErrorType.unequalTypification:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
- case SubstitutionErrorType.unequalArgsCount:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
- case SubstitutionErrorType.unequalArgs:
- return `ΠΡΠΈΠ±ΠΊΠ° ${error.params[0]} -> ${error.params[1]}: ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ`;
- case SubstitutionErrorType.unequalExpressions:
- return `ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ${error.params[0]} -> ${error.params[1]}: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ`;
- }
- return 'UNKNOWN ERROR';
-}
/**
* Retrieves label for {@link UserRole}.
@@ -853,24 +37,6 @@ export function describeAccessMode(mode: UserRole): string {
}
}
-/**
- * Retrieves label for {@link FolderNode}.
- */
-export function labelFolderNode(node: FolderNode): string {
- if (node.parent || !validateLocation('/' + node.text)) {
- return node.text;
- } else {
- return labelLocationHead(('/' + node.text) as LocationHead);
- }
-}
-
-/**
- * Retrieves description for {@link FolderNode}.
- */
-export function describeFolderNode(node: FolderNode): string {
- return `${node.filesInside} | ${node.filesTotal}`;
-}
-
/**
* Retrieves label for {@link AccessPolicy}.
*/
@@ -920,28 +86,6 @@ export function describeLibraryItemType(itemType: LibraryItemType): string {
}
}
-/**
- * Retrieves label for {@link OperationType}.
- */
-export function labelOperationType(itemType: OperationType): string {
- // prettier-ignore
- switch (itemType) {
- case OperationType.INPUT: return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ°';
- case OperationType.SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π·';
- }
-}
-
-/**
- * Retrieves description for {@link OperationType}.
- */
-export function describeOperationType(itemType: OperationType): string {
- // prettier-ignore
- switch (itemType) {
- case OperationType.INPUT: return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡ
Π΅ΠΌΡ Π² ΠΠ‘Π‘';
- case OperationType.SYNTHESIS: return 'Π‘ΠΈΠ½ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ';
- }
-}
-
/**
* UI info descriptors.
*/
diff --git a/rsconcept/frontend/src/utils/utils.ts b/rsconcept/frontend/src/utils/utils.ts
index b479a8c7..695b617d 100644
--- a/rsconcept/frontend/src/utils/utils.ts
+++ b/rsconcept/frontend/src/utils/utils.ts
@@ -198,3 +198,20 @@ export function sharePage() {
.then(() => toast.success(information.linkReady))
.catch(console.error);
}
+
+/**
+ * Remove html tags from target string.
+ */
+export function removeTags(target?: string): string {
+ if (!target) {
+ return '';
+ }
+ return target.toString().replace(/(<([^>]+)>)/gi, '');
+}
+
+/**
+ * Generate HTML wrapper for control description including hotkey.
+ */
+export function prepareTooltip(text: string, hotkey?: string) {
+ return hotkey ? `[${hotkey}]
${text}` : text;
+}