public void push() {
		final int prev = depth++;
		if (depth >= capacity) {
			capacity *= 2;
			levelIndent = ArrayCopy.copyOf(levelIndent, capacity);
			levelEOL = ArrayCopy.copyOf(levelEOL, capacity);
			levelEOLIndent = ArrayCopy.copyOf(levelEOLIndent, capacity);
			termEOLIndent = ArrayCopy.copyOf(termEOLIndent, capacity);
			ignoreTrAXEscapingPIs = ArrayCopy.copyOf(ignoreTrAXEscapingPIs, capacity);
			mode = ArrayCopy.copyOf(mode, capacity);
			escapeOutput = ArrayCopy.copyOf(escapeOutput, capacity);
		}
		
		ignoreTrAXEscapingPIs[depth] = ignoreTrAXEscapingPIs[prev];
		mode[depth] = mode[prev];
		escapeOutput[depth] = escapeOutput[prev];
		
		if (levelIndent[prev] == null || levelEOL[prev] == null) {
			levelIndent[depth] = null;
			levelEOL[depth] = null;
			levelEOLIndent[depth] = null;
			termEOLIndent[depth] = null;
		} else if (levelIndent[depth] == null) {
			// we need to build our level details ....
			// cannot reuse previous ones.
			levelEOL[depth] = levelEOL[prev];
			termEOLIndent[depth] = levelEOL[depth] + levelIndent[prev];
			levelIndent[depth] = levelIndent[prev] + indent;
			levelEOLIndent[depth] = levelEOL[depth] + levelIndent[depth];
		}
	}