public static Object [] splitStringWithFontstyleEscapes(String s) {
		int lastIndex = 0;
		int len = s.length();
		boolean fBold = false, fItalic = false, fUnderline = false, fStrikethrough = false;
		boolean stop = false;
		String [] strs = new String[len];
		Boolean [] bold = new Boolean[len];
		Boolean [] italic = new Boolean[len];
		Boolean [] underline = new Boolean[len];
		Boolean [] strikethrough = new Boolean[len];
		Boolean [] stops = new Boolean[len];
		int count = 0;
		while(lastIndex < len) {
			boolean last = false;
			int index = s.indexOf('\\', lastIndex);
			if (index == -1) {
				last = true;
				index = len;
			}
			String before = s.substring(lastIndex, index);
			if ((index - lastIndex) > 0) {
				strs[count] = before;
				bold[count] = fBold;
				italic[count] = fItalic;
				underline[count] = fUnderline;
				strikethrough[count] = fStrikethrough;
				stops[count] = stop;
				count++;
				stop = false;
			}
			if (last)
				break;

			if (index < len - 1) {
				Character c = s.charAt(index + 1);
				if (c == 'B')
					fBold = !fBold;
				else if (c == 'I')
					fItalic = !fItalic;
				else if (c == 'U')
					fUnderline = !fUnderline;
				else if (c == 'S')
					fStrikethrough = !fStrikethrough;
				else if (c == 'T')
					stop = true;
			}

			lastIndex = index + 2;
		}
		// FIXME put unterminated last one (from index

		String [] strsOut = new String[count];
		Boolean [] boldOut = new Boolean[count];
		Boolean [] italicOut = new Boolean[count];
		Boolean [] underlineOut = new Boolean[count];
		Boolean [] ssOut = new Boolean[count];
		Boolean [] stopsOut = new Boolean[count];
		System.arraycopy(strs, 0, strsOut, 0, count);
		System.arraycopy(bold, 0, boldOut, 0, count);
		System.arraycopy(italic, 0, italicOut, 0, count);
		System.arraycopy(underline, 0, underlineOut, 0, count);
		System.arraycopy(strikethrough, 0, ssOut, 0, count);
		System.arraycopy(stops, 0, stopsOut, 0, count);

		return new Object [] { strsOut, boldOut, italicOut, underlineOut, ssOut, stopsOut };
	}