Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Developers can write scripts to programmatically add macros and attachments with PlantUML diagrams.

Diagram markup is compressed using deflate algorithm. This JavaScript example uses pako implementation.

Code Block
encode64(pako.deflateRaw(markup, { to: 'string' }))
Code Block
encode64 = function(data) {
	r = "";
	for (i = 0; i < data.length; i += 3) {
		if (i + 2 == data.length) {
			r += Util.append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);
		} else if (i + 1 == data.length) {
			r += Util.append3bytes(data.charCodeAt(i), 0, 0);
		} else {
			r += Util.append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1),
				data.charCodeAt(i + 2));
		}
	}
	return r;
}

append3bytes = function(b1, b2, b3) {
	c1 = b1 >> 2;
	c2 = ((b1 & 0x3) << 4) | (b2 >> 4);
	c3 = ((b2 & 0xF) << 2) | (b3 >> 6);
	c4 = b3 & 0x3F;
	r = "";
	r += Util.encode6bit(c1 & 0x3F);
	r += Util.encode6bit(c2 & 0x3F);
	r += Util.encode6bit(c3 & 0x3F);
	r += Util.encode6bit(c4 & 0x3F);
	return r;
}

encode6bit = function(b) {
	if (b < 10) {
		return String.fromCharCode(48 + b);
	}
	b -= 10;
	if (b < 26) {
		return String.fromCharCode(65 + b);
	}
	b -= 26;
	if (b < 26) {
		return String.fromCharCode(97 + b);
	}
	b -= 26;
	if (b == 0) {
		return '-';
	}
	if (b == 1) {
		return '_';
	}
	return '?';
}

Code from the above example has been taken from official PlantUml page.

Adding a macro

In order to display the PlantUML diagram on a Confluence page, page needs to be parsed and plantumlcloud macroadded to it.

...

Code Block
languagejs
bytesToString = function(arr) {
	var result = new Array(arr.length);

	for (var i = 0; i < arr.length; i++) {
		result[i] = String.fromCharCode(arr[i]);
	}
	return result.join('');
}
btoa(Util.bytesToString(pako.deflateRaw(encodeURIComponent(data))))

...