M: Small bug fixes

This commit is contained in:
Ivan 2024-08-27 23:59:43 +03:00
parent d8286e6339
commit 49ff1c8f6c
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 = [
['', ''],
@ -47,3 +47,24 @@ describe('Testing split template', () => {
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.
*/
export function applyTypificationMapping(target: string, mapping: AliasMapping): string {
const result = applyAliasMapping(target, mapping);
if (result === target) {
const modified = applyAliasMapping(target, mapping);
if (modified === target) {
return target;
}
// remove double parentheses
// deal with ()
const deleteBrackets: number[] = [];
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;
}

View File

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

View File

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