in editor/common/blockHelper.js [113:175]
module.exports.updateBlocksLevels = function (blocks, targetsMap) {
let topLevel = 0;
let topLevelHasPrefix = false;
let currentLevel = 0;
for (const block of blocks) {
switch (block.type) {
case 'header':
currentLevel = block.level;
if (topLevel === 0) {
topLevel = currentLevel;
// TODO Not all have prefix?
topLevelHasPrefix = !!block.prefixCode;
}
if (topLevelHasPrefix !== !!block.prefixCode) {
throw new Error(`[${block.propertyName}] Must all includes prefix or not`);
}
break;
// Content and use command following header has same level.
case 'content':
case 'if':
case 'elif':
case 'else':
case 'endif':
case 'for':
case 'endfor':
case 'uicontrol':
// Indent description content by default
block.level = currentLevel + 1;
break;
case 'use':
case 'import':
block.level = currentLevel;
if (targetsMap) {
const targetObj = targetsMap[block.target];
if (targetObj) {
const prefixParam = block.args && block.args.find(item => item[0] === 'prefix');
const prefixVal = prefixParam && prefixParam[1].replace(/['"]/g, '');
if (targetObj.topLevel === 0) {
// Target has no header if topLevel is 0.
// Assume it's only description
// Indent== by default.
block.level = currentLevel + 1;
}
else if (!targetObj.topLevelHasPrefix || (prefixVal && prefixVal.match(/#+/))) {
(block.level = targetObj.topLevel + module.exports.countLevel(prefixVal || ''));
}
}
else {
console.warn(`Block ${block.target} not exists`);
}
}
break;
}
}
return {
topLevel,
topLevelHasPrefix
};
};