Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 1x 1x 1x 1612x 1x 1x 1x 1x 1611x 1612x 1612x 1612x 1612x 1612x 7x | import { ensureParagraph } from '../../modelApi/common/ensureParagraph';
import { stackFormat } from '../utils/stackFormat';
import type {
ContentModelBlockGroup,
ContentModelText,
DomToModelContext,
ElementProcessor,
} from 'roosterjs-content-model-types';
/**
* @internal
*/
export const textProcessor: ElementProcessor<Text> = (
group: ContentModelBlockGroup,
textNode: Text,
context: DomToModelContext
) => {
if (context.formatParsers.text.length > 0) {
stackFormat(context, { segment: 'shallowClone' }, () => {
context.formatParsers.text.forEach(parser => {
parser(context.segmentFormat, textNode, context);
internalTextProcessor(group, textNode, context);
});
});
} else {
internalTextProcessor(group, textNode, context);
}
};
function internalTextProcessor(
group: ContentModelBlockGroup,
textNode: Text,
context: DomToModelContext
) {
const paragraph = ensureParagraph(group, context.blockFormat);
const segmentCount = paragraph.segments.length;
context.elementProcessors.textWithSelection(group, textNode, context);
const newSegments = paragraph.segments.slice(segmentCount);
context.domIndexer?.onSegment(
textNode,
paragraph,
newSegments.filter((x): x is ContentModelText => x?.segmentType == 'Text')
);
}
|