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; +}