MCPcopy Create free account
hub / github.com/TruthHun/BookStack / insertLineContent

Function insertLineContent

static/editor.md/lib/codemirror/lib/codemirror.js:6874–6932  ·  view source on GitHub ↗
(line, builder, styles)

Source from the content-addressed store, hash-verified

6872 // Outputs a number of spans to make up a line, taking highlighting
6873 // and marked text into account.
6874 function insertLineContent(line, builder, styles) {
6875 var spans = line.markedSpans, allText = line.text, at = 0;
6876 if (!spans) {
6877 for (var i = 1; i < styles.length; i+=2)
6878 builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options));
6879 return;
6880 }
6881
6882 var len = allText.length, pos = 0, i = 1, text = "", style, css;
6883 var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
6884 for (;;) {
6885 if (nextChange == pos) { // Update current marker set
6886 spanStyle = spanEndStyle = spanStartStyle = title = css = "";
6887 collapsed = null; nextChange = Infinity;
6888 var foundBookmarks = [];
6889 for (var j = 0; j < spans.length; ++j) {
6890 var sp = spans[j], m = sp.marker;
6891 if (sp.from <= pos && (sp.to == null || sp.to > pos)) {
6892 if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; }
6893 if (m.className) spanStyle += " " + m.className;
6894 if (m.css) css = m.css;
6895 if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
6896 if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle;
6897 if (m.title && !title) title = m.title;
6898 if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
6899 collapsed = sp;
6900 } else if (sp.from > pos && nextChange > sp.from) {
6901 nextChange = sp.from;
6902 }
6903 if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m);
6904 }
6905 if (collapsed && (collapsed.from || 0) == pos) {
6906 buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
6907 collapsed.marker, collapsed.from == null);
6908 if (collapsed.to == null) return;
6909 }
6910 if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j)
6911 buildCollapsedSpan(builder, 0, foundBookmarks[j]);
6912 }
6913 if (pos >= len) break;
6914
6915 var upto = Math.min(len, nextChange);
6916 while (true) {
6917 if (text) {
6918 var end = pos + text.length;
6919 if (!collapsed) {
6920 var tokenText = end > upto ? text.slice(0, upto - pos) : text;
6921 builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
6922 spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css);
6923 }
6924 if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
6925 pos = end;
6926 spanStartStyle = "";
6927 }
6928 text = allText.slice(at, at = styles[i++]);
6929 style = interpretTokenStyle(styles[i++], builder.cm.options);
6930 }
6931 }

Callers 1

buildLineContentFunction · 0.70

Calls 3

interpretTokenStyleFunction · 0.70
compareCollapsedMarkersFunction · 0.70
buildCollapsedSpanFunction · 0.70

Tested by

no test coverage detected