46 lines
956 B
JavaScript
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
|