mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
This commit is contained in:
parent
bf72ea3d54
commit
25b577233b
|
@ -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);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:{' '}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user