const boundaries = new Set<number>();
boundaries.add(0);
boundaries.add(text.length);
const startsAt = new Map<number, MarkdownStyleSpan[]>(); for (const span of styled) { if (span.start === span.end) { continue;
}
boundaries.add(span.start);
boundaries.add(span.end); const bucket = startsAt.get(span.start); if (bucket) {
bucket.push(span);
} else {
startsAt.set(span.start, [span]);
}
} for (const spans of startsAt.values()) {
spans.sort((a, b) => { if (a.end !== b.end) { return b.end - a.end;
} return (STYLE_RANK.get(a.style) ?? 0) - (STYLE_RANK.get(b.style) ?? 0);
});
}
const linkStarts = new Map<number, RenderLink[]>(); if (options.buildLink) { for (const link of ir.links) { if (link.start === link.end) { continue;
} const rendered = options.buildLink(link, text); if (!rendered) { continue;
}
boundaries.add(rendered.start);
boundaries.add(rendered.end); const openBucket = linkStarts.get(rendered.start); if (openBucket) {
openBucket.push(rendered);
} else {
linkStarts.set(rendered.start, [rendered]);
}
}
}
const points = [...boundaries].toSorted((a, b) => a - b); // Unified stack for both styles and links, tracking close string and end position const stack: { close: string; end: number }[] = [];
type OpeningItem =
| { end: number; open: string; close: string; kind: "link"; index: number }
| {
end: number;
open: string;
close: string;
kind: "style";
style: MarkdownStyle;
index: number;
};
let out = "";
for (let i = 0; i < points.length; i += 1) { const pos = points[i];
// Close ALL elements (styles and links) in LIFO order at this position while (stack.length && stack[stack.length - 1]?.end === pos) { const item = stack.pop(); if (item) {
out += item.close;
}
}
// Open outer spans first (larger end) so LIFO closes stay valid for same-start overlaps. for (const item of openingItems) {
out += item.open;
stack.push({ close: item.close, end: item.end });
}
}
const next = points[i + 1]; if (next === undefined) { break;
} if (next > pos) {
out += options.escapeText(text.slice(pos, next));
}
}
return out;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-06-09)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.