123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.shiftAnnotations = exports.findAnnotationsBetweenIndexes = exports.findAnnotationsAtIndex = exports.annotate = void 0;
- const object_1 = require("../object");
- const attr_1 = require("../dom/attr");
- function annotate(t, annotations, opt = {}) {
- const offset = opt.offset || 0;
- const compacted = [];
- const ret = [];
- let curr;
- let prev;
- let batch = null;
- for (let i = 0; i < t.length; i += 1) {
- curr = ret[i] = t[i];
- for (let j = 0, jj = annotations.length; j < jj; j += 1) {
- const annotation = annotations[j];
- const start = annotation.start + offset;
- const end = annotation.end + offset;
- if (i >= start && i < end) {
- if (typeof curr === 'string') {
- curr = ret[i] = {
- t: t[i],
- attrs: annotation.attrs,
- };
- }
- else {
- curr.attrs = (0, attr_1.mergeAttrs)((0, attr_1.mergeAttrs)({}, curr.attrs), annotation.attrs);
- }
- if (opt.includeAnnotationIndices) {
- if (curr.annotations == null) {
- curr.annotations = [];
- }
- curr.annotations.push(j);
- }
- }
- }
- prev = ret[i - 1];
- if (!prev) {
- batch = curr;
- }
- else if (object_1.ObjectExt.isObject(curr) && object_1.ObjectExt.isObject(prev)) {
- batch = batch;
- // Both previous item and the current one are annotations.
- // If the attributes didn't change, merge the text.
- if (JSON.stringify(curr.attrs) === JSON.stringify(prev.attrs)) {
- batch.t += curr.t;
- }
- else {
- compacted.push(batch);
- batch = curr;
- }
- }
- else if (object_1.ObjectExt.isObject(curr)) {
- // Previous item was a string, current item is an annotation.
- batch = batch;
- compacted.push(batch);
- batch = curr;
- }
- else if (object_1.ObjectExt.isObject(prev)) {
- // Previous item was an annotation, current item is a string.
- batch = batch;
- compacted.push(batch);
- batch = curr;
- }
- else {
- // Both previous and current item are strings.
- batch = (batch || '') + curr;
- }
- }
- if (batch != null) {
- compacted.push(batch);
- }
- return compacted;
- }
- exports.annotate = annotate;
- function findAnnotationsAtIndex(annotations, index) {
- return annotations
- ? annotations.filter((a) => a.start < index && index <= a.end)
- : [];
- }
- exports.findAnnotationsAtIndex = findAnnotationsAtIndex;
- function findAnnotationsBetweenIndexes(annotations, start, end) {
- return annotations
- ? annotations.filter((a) => (start >= a.start && start < a.end) ||
- (end > a.start && end <= a.end) ||
- (a.start >= start && a.end < end))
- : [];
- }
- exports.findAnnotationsBetweenIndexes = findAnnotationsBetweenIndexes;
- function shiftAnnotations(annotations, index, offset) {
- if (annotations) {
- annotations.forEach((a) => {
- if (a.start < index && a.end >= index) {
- a.end += offset;
- }
- else if (a.start >= index) {
- a.start += offset;
- a.end += offset;
- }
- });
- }
- return annotations;
- }
- exports.shiftAnnotations = shiftAnnotations;
- //# sourceMappingURL=annotate.js.map
|