mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 04:50:36 +03:00
R: Split label resources into features
This commit is contained in:
parent
e53157aa31
commit
301f388788
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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) {
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default BadgeHelp;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
109
rsconcept/frontend/src/features/help/labels.ts
Normal file
109
rsconcept/frontend/src/features/help/labels.ts
Normal file
|
@ -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 'концептуальная схема <br/>в форме таблицы';
|
||||
case HelpTopic.UI_RS_EDITOR: return 'редактирование конституенты';
|
||||
case HelpTopic.UI_GRAPH_TERM: return 'интерфейс графа термов';
|
||||
case HelpTopic.UI_FORMULA_TREE: return 'просмотр дерева разбора <br/>родоструктурного выражения';
|
||||
case HelpTopic.UI_TYPE_GRAPH: return 'просмотр графа ступеней';
|
||||
case HelpTopic.UI_CST_STATUS: return 'нотация статуса конституенты';
|
||||
case HelpTopic.UI_CST_CLASS: return 'нотация класса конституенты';
|
||||
case HelpTopic.UI_OSS_GRAPH: return 'графическая форма <br/>операционной схемы синтеза';
|
||||
case HelpTopic.UI_SUBSTITUTIONS: return 'таблица отождествлений конституент';
|
||||
case HelpTopic.UI_RELOCATE_CST: return 'перенос конституент<br/>в рамках ОСС';
|
||||
|
||||
case HelpTopic.CONCEPTUAL: return 'основы концептуализации';
|
||||
case HelpTopic.CC_SYSTEM: return 'концептуальная схема <br/>как система понятий';
|
||||
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 'система типов в <br/>родоструктурной экспликации';
|
||||
case HelpTopic.RSL_CORRECT: return 'биективная переносимость';
|
||||
case HelpTopic.RSL_INTERPRET: return 'интерпретация определений <br/>и утверждений';
|
||||
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 'справочные, нормативные <br/>и технические документы';
|
||||
case HelpTopic.INFO_RULES: return 'правила пользования Порталом';
|
||||
case HelpTopic.INFO_CONTRIB: return 'признание вклада <br/>в создание Портала';
|
||||
case HelpTopic.INFO_PRIVACY: return 'политика обработки <br/>персональных данных';
|
||||
case HelpTopic.INFO_API: return 'интерфейс для разработчиков';
|
||||
|
||||
case HelpTopic.EXTEOR: return 'программа экспликации теорий <br/>"Экстеор" для Windows';
|
||||
}
|
||||
}
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
47
rsconcept/frontend/src/features/library/labels.ts
Normal file
47
rsconcept/frontend/src/features/library/labels.ts
Normal file
|
@ -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}`;
|
||||
}
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
54
rsconcept/frontend/src/features/oss/labels.ts
Normal file
54
rsconcept/frontend/src/features/oss/labels.ts
Normal file
|
@ -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';
|
||||
}
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -168,7 +168,7 @@ export const OssEditState = ({ itemID, children }: React.PropsWithChildren<OssEd
|
|||
target: operation,
|
||||
onSubmit: data => {
|
||||
data.positions = positions;
|
||||
operationUpdate({ itemID: schema.id, data });
|
||||
void operationUpdate({ itemID: schema.id, data });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 => ({
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -21,7 +21,7 @@ function DlgUploadRSForm() {
|
|||
|
||||
const handleSubmit = () => {
|
||||
if (file) {
|
||||
upload({
|
||||
void upload({
|
||||
itemID: itemID,
|
||||
load_metadata: loadMetadata,
|
||||
file: file,
|
||||
|
|
641
rsconcept/frontend/src/features/rsform/labels.ts
Normal file
641
rsconcept/frontend/src/features/rsform/labels.ts
Normal file
|
@ -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<GraphColoring, string>([
|
||||
['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';
|
||||
}
|
|
@ -2,8 +2,7 @@
|
|||
* Module: Natural language model API.
|
||||
*/
|
||||
|
||||
import { labelGrammeme } from '@/utils/labels';
|
||||
|
||||
import { labelGrammeme } from '../labels';
|
||||
import {
|
||||
GramData,
|
||||
Grammeme,
|
||||
|
|
|
@ -68,7 +68,7 @@ function EditorConstituenta() {
|
|||
showEditTerm({
|
||||
target: activeCst,
|
||||
onSave: forms =>
|
||||
cstUpdate({
|
||||
void cstUpdate({
|
||||
itemID: schema.id,
|
||||
data: {
|
||||
target: activeCst.id,
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { describeRSError } from '@/utils/labels';
|
||||
|
||||
import { describeRSError } from '../../../labels';
|
||||
import { IExpressionParse, IRSErrorDescription } from '../../../models/rslang';
|
||||
import { getRSErrorPrefix } from '../../../models/rslangAPI';
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 })
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ? `<b>[${hotkey}]</b><br/>${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]';
|
||||
}
|
||||
}
|
||||
|
||||
/** <b></b><br/>
|
||||
* 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<GraphColoring, string>([
|
||||
['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 'концептуальная схема <br/>в форме таблицы';
|
||||
case HelpTopic.UI_RS_EDITOR: return 'редактирование конституенты';
|
||||
case HelpTopic.UI_GRAPH_TERM: return 'интерфейс графа термов';
|
||||
case HelpTopic.UI_FORMULA_TREE: return 'просмотр дерева разбора <br/>родоструктурного выражения';
|
||||
case HelpTopic.UI_TYPE_GRAPH: return 'просмотр графа ступеней';
|
||||
case HelpTopic.UI_CST_STATUS: return 'нотация статуса конституенты';
|
||||
case HelpTopic.UI_CST_CLASS: return 'нотация класса конституенты';
|
||||
case HelpTopic.UI_OSS_GRAPH: return 'графическая форма <br/>операционной схемы синтеза';
|
||||
case HelpTopic.UI_SUBSTITUTIONS:return 'таблица отождествлений конституент';
|
||||
case HelpTopic.UI_RELOCATE_CST: return 'перенос конституент<br/>в рамках ОСС';
|
||||
|
||||
case HelpTopic.CONCEPTUAL: return 'основы концептуализации';
|
||||
case HelpTopic.CC_SYSTEM: return 'концептуальная схема <br/>как система понятий';
|
||||
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 'система типов в <br/>родоструктурной экспликации';
|
||||
case HelpTopic.RSL_CORRECT: return 'биективная переносимость';
|
||||
case HelpTopic.RSL_INTERPRET: return 'интерпретация определений <br/>и утверждений';
|
||||
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 'справочные, нормативные <br/>и технические документы';
|
||||
case HelpTopic.INFO_RULES: return 'правила пользования Порталом';
|
||||
case HelpTopic.INFO_CONTRIB: return 'признание вклада <br/>в создание Портала';
|
||||
case HelpTopic.INFO_PRIVACY: return 'политика обработки <br/>персональных данных';
|
||||
case HelpTopic.INFO_API: return 'интерфейс для разработчиков';
|
||||
|
||||
case HelpTopic.EXTEOR: return 'программа экспликации теорий <br/>"Экстеор" для 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.
|
||||
*/
|
||||
|
|
|
@ -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 ? `<b>[${hotkey}]</b><br/>${text}` : text;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user