private void writeRow(List<GlyphRun> row) throws SAXException {
        row = splitRow(row);
        sortRow(row);

        xhml.startElement(P);
        GlyphRun previous = null;
        for (GlyphRun run : row) {
            if (previous != null) {
                float distanceFromPrevious = run.left() - previous.right();
                float averageFontSize = (run.fontSize + previous.fontSize) / 2f;
                if (distanceFromPrevious > averageFontSize * WHITESPACE_THRESHOLD) {
                    xhml.ignorableWhitespace(SPACE, 0, SPACE.length);
                }
            }
            xhml.characters(run.unicodeString);
            previous = run;
        }
        xhml.endElement(P);
    }
Handles an individual page.  For now, this marks up
canvas entities in a &lt;div&gt; tag.  Based on the spec,
it currently relies on order within the xml for order of output
of text to xhtml.  We could do more complex processing of coordinates
for bidi-languages, but the spec implies that we should be able
to rely on storage order.
<p/>
As with our PDFParser, this currently dumps urls at the bottom of the page
and does not attempt to calculate the correct anchor text.
<p/>
TODO: integrate table markup
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSPageContentHandler.java