(line, builder, styles)
| 5855 | // Outputs a number of spans to make up a line, taking highlighting |
| 5856 | // and marked text into account. |
| 5857 | function insertLineContent(line, builder, styles) { |
| 5858 | var spans = line.markedSpans, allText = line.text, at = 0; |
| 5859 | if (!spans) { |
| 5860 | for (var i = 1; i < styles.length; i+=2) |
| 5861 | builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); |
| 5862 | return; |
| 5863 | } |
| 5864 | |
| 5865 | var len = allText.length, pos = 0, i = 1, text = "", style; |
| 5866 | var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; |
| 5867 | for (;;) { |
| 5868 | if (nextChange == pos) { // Update current marker set |
| 5869 | spanStyle = spanEndStyle = spanStartStyle = title = ""; |
| 5870 | collapsed = null; nextChange = Infinity; |
| 5871 | var foundBookmarks = []; |
| 5872 | for (var j = 0; j < spans.length; ++j) { |
| 5873 | var sp = spans[j], m = sp.marker; |
| 5874 | if (sp.from <= pos && (sp.to == null || sp.to > pos)) { |
| 5875 | if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } |
| 5876 | if (m.className) spanStyle += " " + m.className; |
| 5877 | if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; |
| 5878 | if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; |
| 5879 | if (m.title && !title) title = m.title; |
| 5880 | if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) |
| 5881 | collapsed = sp; |
| 5882 | } else if (sp.from > pos && nextChange > sp.from) { |
| 5883 | nextChange = sp.from; |
| 5884 | } |
| 5885 | if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); |
| 5886 | } |
| 5887 | if (collapsed && (collapsed.from || 0) == pos) { |
| 5888 | buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, |
| 5889 | collapsed.marker, collapsed.from == null); |
| 5890 | if (collapsed.to == null) return; |
| 5891 | } |
| 5892 | if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) |
| 5893 | buildCollapsedSpan(builder, 0, foundBookmarks[j]); |
| 5894 | } |
| 5895 | if (pos >= len) break; |
| 5896 | |
| 5897 | var upto = Math.min(len, nextChange); |
| 5898 | while (true) { |
| 5899 | if (text) { |
| 5900 | var end = pos + text.length; |
| 5901 | if (!collapsed) { |
| 5902 | var tokenText = end > upto ? text.slice(0, upto - pos) : text; |
| 5903 | builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, |
| 5904 | spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title); |
| 5905 | } |
| 5906 | if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} |
| 5907 | pos = end; |
| 5908 | spanStartStyle = ""; |
| 5909 | } |
| 5910 | text = allText.slice(at, at = styles[i++]); |
| 5911 | style = interpretTokenStyle(styles[i++], builder.cm.options); |
| 5912 | } |
| 5913 | } |
| 5914 | } |
no test coverage detected
searching dependent graphs…