M: Small bug fixes
Some checks are pending
Frontend CI / build (22.x) (push) Waiting to run

This commit is contained in:
Ivan 2024-08-28 00:00:04 +03:00
parent bf72ea3d54
commit 25b577233b
4 changed files with 78 additions and 13 deletions

View File

@ -1,4 +1,4 @@
import { extractGlobals, isSimpleExpression, splitTemplateDefinition } from './rslangAPI'; import { applyTypificationMapping, extractGlobals, isSimpleExpression, splitTemplateDefinition } from './rslangAPI';
const globalsData = [ const globalsData = [
['', ''], ['', ''],
@ -47,3 +47,24 @@ describe('Testing split template', () => {
expect(`${result.head}||${result.body}`).toBe(expected); expect(`${result.head}||${result.body}`).toBe(expected);
}); });
}); });
const typificationMappingData = [
['', '', '', ''],
['X1', 'X2', 'X1', 'X2'],
['X1', 'X2', '(X1)', '(X2)'],
['X1', 'X2', 'X1×X3', 'X2×X3'],
['X1', '(X1×X1)', 'X1', 'X1×X1'],
['X1', '(X1×X1)', '(X1)', '(X1×X1)'],
['X1', '(X1×X1)', '(X1×X2)', '((X1×X1)×X2)'],
['X1', '(X3)', '(X1)', '(X3)'],
['X1', '(X3)', '(X1×X1)', '((X3)×(X3))']
];
describe('Testing typification mapping', () => {
it.each(typificationMappingData)(
'Apply typification mapping %p',
(original: string, replacement: string, input: string, expected: string) => {
const result = applyTypificationMapping(input, { [original]: replacement });
expect(result).toBe(expected);
}
);
});

View File

@ -164,13 +164,55 @@ export function applyAliasMapping(target: string, mapping: AliasMapping): string
* Apply alias typification mapping. * Apply alias typification mapping.
*/ */
export function applyTypificationMapping(target: string, mapping: AliasMapping): string { export function applyTypificationMapping(target: string, mapping: AliasMapping): string {
const result = applyAliasMapping(target, mapping); const modified = applyAliasMapping(target, mapping);
if (result === target) { if (modified === target) {
return target; return target;
} }
// remove double parentheses const deleteBrackets: number[] = [];
// deal with () const positions: number[] = [];
const booleans: number[] = [];
let boolCount: number = 0;
let stackSize: number = 0;
for (let i = 0; i < modified.length; i++) {
const char = modified[i];
if (char === '') {
boolCount++;
continue;
}
if (char === '(') {
stackSize++;
positions.push(i);
booleans.push(boolCount);
}
boolCount = 0;
if (char === ')') {
if (
i < modified.length - 1 &&
modified[i + 1] === ')' &&
stackSize > 1 &&
positions[stackSize - 2] + booleans[stackSize - 1] + 1 === positions[stackSize - 1]
) {
deleteBrackets.push(i);
deleteBrackets.push(positions[stackSize - 2]);
}
if (i === modified.length - 1 && stackSize === 1 && positions[0] === 0) {
deleteBrackets.push(i);
deleteBrackets.push(positions[0]);
}
stackSize--;
positions.pop();
booleans.pop();
}
}
let result = '';
for (let i = 0; i < modified.length; i++) {
if (!deleteBrackets.includes(i)) {
result += modified[i];
}
}
return result; return result;
} }

View File

@ -9,16 +9,17 @@ import TopicItem from '../TopicItem';
function HelpMain() { function HelpMain() {
return ( return (
<div> <div className='text-justify'>
<h1>Портал</h1> <h1>Портал</h1>
<p> <p>
Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с Портал позволяет анализировать предметные области, формально записывать системы определений и синтезировать их с
помощью математического аппарата <LinkTopic text='Родов структур' topic={HelpTopic.RSLANG} /> помощью математического аппарата <LinkTopic text='Родов структур' topic={HelpTopic.RSLANG} />
</p> </p>
<p> <p>
Такие системы называются <b>Концептуальными схемами</b> и состоят из отдельных{' '} Такие системы называются <LinkTopic text='Концептуальными схемами' topic={HelpTopic.CC_SYSTEM} /> и состоят из
<LinkTopic text='Конституент' topic={HelpTopic.CC_CONSTITUENTA} />, обладающих уникальными обозначениями и отдельных <LinkTopic text='Конституент' topic={HelpTopic.CC_CONSTITUENTA} />, обладающих уникальными
формальными определениями обозначениями и формальными определениями. Концептуальные схемы могут быть получены в рамках операций синтеза в{' '}
<LinkTopic text='Операционной схеме синтеза' topic={HelpTopic.CC_OSS} />.
</p> </p>
<h2>Разделы Портала</h2> <h2>Разделы Портала</h2>
@ -69,8 +70,9 @@ function HelpMain() {
Портал разрабатывается <TextURL text='Центром Концепт' href={external_urls.concept} /> Портал разрабатывается <TextURL text='Центром Концепт' href={external_urls.concept} />
</p> </p>
<p> <p>
Портал поддерживает актуальные версии браузеров Chrome, Firefox, Safari. Убедитесь, что используете последнюю Портал поддерживает актуальные версии браузеров Chrome, Firefox, Safari, включая мобильные устройства.
версию браузера в случае возникновения визуальных ошибок или проблем с производительностью. Убедитесь, что используете последнюю версию браузера в случае возникновения визуальных ошибок или проблем с
производительностью.
</p> </p>
<p> <p>
Ваши пожелания по доработке, найденные ошибки и иные предложения можно направлять на email:{' '} Ваши пожелания по доработке, найденные ошибки и иные предложения можно направлять на email:{' '}

View File

@ -181,7 +181,7 @@ function HelpThesaurus() {
</li> </li>
<li>основа данного понятия понятие, на котором основано порождающее выражение данной конституенты;</li> <li>основа данного понятия понятие, на котором основано порождающее выражение данной конституенты;</li>
<li> <li>
порожденное понятие данным понятием понятие, определение которого является порождающим выражением, порожденное понятие данным понятием понятие, определением которого является порождающим выражением,
основанным на данном понятии. основанным на данном понятии.
</li> </li>
</ul> </ul>
@ -267,7 +267,7 @@ function HelpThesaurus() {
</li> </li>
<li> <li>
<IconSynthesis size='1rem' className='inline-icon' /> <IconSynthesis size='1rem' className='inline-icon' />
{'\u2009'}синтез концептуальных схем.ыф {'\u2009'}синтез концептуальных схем.
</li> </li>
</ul> </ul>