public String buildClipboard() {
		// Data collection
		Map<String, Map<String, String>> data = new LinkedHashMap<>();

		// Current section title/map
		String currentSection = null;
		Map<String, String> currentMap = null;

		// Current section key
		boolean labelIsKey = true;
		String currentKey = null;
		for (Node node : getChildren()) {
			// header
			if (node.getClass() == SubLabeled.class) {
				if (currentMap != null) {
					data.put(currentSection, currentMap);
				}
				SubLabeled header = (SubLabeled) node;
				currentSection = header.getPrimaryText();
				currentMap = new LinkedHashMap<>();
			}
			// items (key:value), one follows the other
			else if (node.getClass() == Label.class) {
				String text = ((Label) node).getText();
				if (labelIsKey) {
					currentKey = text;
				} else {
					currentMap.put(currentKey, text);
				}
				// Swap since we do KEY -> VALUE, KEY -> VALUE
				labelIsKey = !labelIsKey;
			}
		}
		data.put(currentSection, currentMap); // Add dangling map

		// Put to string
		StringBuilder sb = new StringBuilder();
		data.forEach((section, map) -> {
			sb.append("**").append(section).append("**\n")
					.append("| ").append(String.join(" | ", map.keySet())).append(" |\n")
					.append("| ").append(map.keySet().stream()
							.map(s -> "--------").collect(Collectors.joining(" | "))).append(" |\n")
					.append("| `").append(String.join("` | `", map.values())).append("` |\n\n");
		});
		return sb.toString();
	}
Converts the UI to markdown text.
Section headers are declared with {@link SubLabeled}.
Section Key/Value pairs are declared with two consecutive {@link Label}.

@return Markdown string containing all UI elements.
recaf-ui/src/main/java/software/coley/recaf/ui/pane/SystemInformationPane.java