Files
2025-08-27 17:10:05 +08:00

46 lines
956 B
JavaScript

import util from '../util'
/*
* Attaches a text label to the specified root. Handles escape sequences.
*/
function addTextLabel (root, node) {
const domNode = root.append('text')
const lines = processEscapeSequences(node.label).split('\n')
for (let i = 0; i < lines.length; i += 1) {
domNode
.append('tspan')
.attr('xml:space', 'preserve')
.attr('dy', '1em')
.attr('x', '1')
.text(lines[i])
}
util.applyStyle(domNode, node.labelStyle)
return domNode
}
function processEscapeSequences (text) {
let newText = ''
let escaped = false
let ch = null
for (let i = 0; i < text.length; i += 1) {
ch = text[i]
if (escaped) {
switch (ch) {
case 'n': newText += '\n'; break
default: newText += ch
}
escaped = false
} else if (ch === '\\') {
escaped = true
} else {
newText += ch
}
}
return newText
}
export default addTextLabel