RE: Surrogate pair error

Jan Driesen <[email protected]>
Newsgroups gmane.text.xml.fop.user
Message-ID <DB8PR05MB6122BE20E45F08568850FA93F7EC0@DB8PR05MB6122.eurprd05.prod.outlook.com>
Hi,

If we set the MPH 2b Damas font (https://fedoraproject.org/wiki/MPH_2B_Damase_fonts), we get the exception from my initial email. Using fontforge, I could verify that this font has a glyph for the character.
If we set Segoe UI Historic (https://docs.microsoft.com/en-us/typography/font-list/segoe_ui_historic) as a font (it also has a glyph for this), we get a different exception.
Both fonts are referred to in fop.xconf
A version of the FO for each font is attached to this mail.

INFO: Default page-height set to: 297mm
feb 24, 2020 2:59:28 PM org.apache.fop.apps.FopConfParser configure
INFO: Default page-width set to: 210mm
feb 24, 2020 2:59:29 PM org.apache.fop.cli.Main startFOP
SEVERE: Exception
org.apache.fop.apps.FOPException: ill-formed UTF-16 sequence, contains isolated high surrogate at end of sequence
java.lang.IllegalArgumentException: ill-formed UTF-16 sequence, contains isolated high surrogate at end of sequence
        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:296)
        at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:116)
        at org.apache.fop.cli.Main.startFOP(Main.java:183)
        at org.apache.fop.cli.Main.main(Main.java:214)
Caused by: java.lang.IllegalArgumentException: ill-formed UTF-16 sequence, contains isolated high surrogate at end of sequence
        at org.apache.fop.fonts.MultiByteFont.mapCharsToGlyphs(MultiByteFont.java:666)
        at org.apache.fop.fonts.MultiByteFont.charSequenceToGlyphSequence(MultiByteFont.java:570)
        at org.apache.fop.fonts.MultiByteFont.performSubstitution(MultiByteFont.java:551)
        at org.apache.fop.fonts.LazyFont.performSubstitution(LazyFont.java:424)
        at org.apache.fop.fonts.Font.performSubstitution(Font.java:471)
        at org.apache.fop.fonts.GlyphMapping.processWordMapping(GlyphMapping.java:141)
        at org.apache.fop.fonts.GlyphMapping.doGlyphMapping(GlyphMapping.java:92)
        at org.apache.fop.layoutmgr.inline.TextLayoutManager.processWord(TextLayoutManager.java:960)
        at org.apache.fop.layoutmgr.inline.TextLayoutManager.getNextKnuthElements(TextLayoutManager.java:819)
        at org.apache.fop.layoutmgr.inline.LineLayoutManager.collectInlineKnuthElements(LineLayoutManager.java:698)
        at org.apache.fop.layoutmgr.inline.LineLayoutManager.getNextKnuthElements(LineLayoutManager.java:627)
        at org.apache.fop.layoutmgr.BlockLayoutManager.getNextChildElements(BlockLayoutManager.java:141)
        at org.apache.fop.layoutmgr.BlockStackingLayoutManager.getNextKnuthElements(BlockStackingLayoutManager.java:290)
        at org.apache.fop.layoutmgr.BlockLayoutManager.getNextKnuthElements(BlockLayoutManager.java:113)
        at org.apache.fop.layoutmgr.BlockLayoutManager.getNextKnuthElements(BlockLayoutManager.java:105)
        at org.apache.fop.layoutmgr.FlowLayoutManager.getNextChildElements(FlowLayoutManager.java:223)
        at org.apache.fop.layoutmgr.FlowLayoutManager.addChildElements(FlowLayoutManager.java:147)
        at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:116)
        at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:69)
        at org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.java:251)
        at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:770)
        at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:178)
        at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:158)
        at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:389)
        at org.apache.fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:112)
        at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:143)
        at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:267)
        at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:139)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:362)
        at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:190)
        at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1102)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
        at org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:485)
        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:293)
        ... 3 more



Jan Driesen
IT Office
Brepols Publishers NV

From: Simon Steiner <[email protected]>
Sent: maandag 24 februari 2020 12:39
To: [email protected]
Subject: RE: Surrogate pair error

HI,

Can you set the font-family in the fo file and add a font to the fop.xconf?

Thanks

From: Jan Driesen <[email protected]<mailto:[email protected]>>
Sent: 24 February 2020 11:34
To: [email protected]<mailto:[email protected]>
Subject: Surrogate pair error

Hi everybody,


We have a document containing the following character: Unicode Character 'CYPRIOT SYLLABLE RO' (U+10826)
When running fop (2.4) to render a pdf, it fails with the exception pasted below. Attached you can find a sample fo file that contains the character and produces the error.
I understand that fop 2.3 introduced support for surrogate pairs.

feb 24, 2020 12:24:00 PM org.apache.fop.apps.FopConfParser configure
INFO: Default page-height set to: 11.00in
feb 24, 2020 12:24:00 PM org.apache.fop.apps.FopConfParser configure
INFO: Default page-width set to: 8.50in
feb 24, 2020 12:24:02 PM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Glyph "?" (0xd802) not available in font "Helvetica".
feb 24, 2020 12:24:02 PM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Glyph "?" (0xdc26) not available in font "Helvetica".
feb 24, 2020 12:24:02 PM org.apache.fop.area.RenderPagesModel addPage
SEVERE: Error while rendering page 1
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
        at java.lang.String.charAt(String.java:658)
        at org.apache.fop.util.CharUtilities.containsSurrogatePairAt(CharUtilities.java:417)
        at org.apache.fop.render.pdf.PDFPainter.drawTextWithDX(PDFPainter.java:494)
        at org.apache.fop.render.pdf.PDFPainter.drawText(PDFPainter.java:436)
        at org.apache.fop.render.pdf.PDFPainter.drawText(PDFPainter.java:449)
        at org.apache.fop.render.intermediate.IFRenderer$TextUtil.flush(IFRenderer.java:1237)
        at org.apache.fop.render.intermediate.IFRenderer.renderText(IFRenderer.java:1063)
        at org.apache.fop.render.AbstractRenderer.renderInlineArea(AbstractRenderer.java:861)
        at org.apache.fop.render.intermediate.IFRenderer.renderInlineArea(IFRenderer.java:926)
        at org.apache.fop.render.AbstractRenderer.renderLineArea(AbstractRenderer.java:845)
        at org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:704)
        at org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:758)
        at org.apache.fop.render.intermediate.IFRenderer.renderBlock(IFRenderer.java:998)
        at org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:689)
        at org.apache.fop.render.AbstractRenderer.renderFlow(AbstractRenderer.java:591)
        at org.apache.fop.render.AbstractPathOrientedRenderer.renderFlow(AbstractPathOrientedRenderer.java:789)
        at org.apache.fop.render.AbstractRenderer.renderMainReference(AbstractRenderer.java:568)
        at org.apache.fop.render.AbstractRenderer.renderBodyRegion(AbstractRenderer.java:433)
        at org.apache.fop.render.AbstractRenderer.renderRegionViewport(AbstractRenderer.java:380)
        at org.apache.fop.render.intermediate.IFRenderer.renderRegionViewport(IFRenderer.java:737)
        at org.apache.fop.render.AbstractRenderer.renderPageAreas(AbstractRenderer.java:345)
        at org.apache.fop.render.AbstractRenderer.renderPage(AbstractRenderer.java:318)
        at org.apache.fop.render.intermediate.IFRenderer.renderPage(IFRenderer.java:587)
        at org.apache.fop.area.RenderPagesModel.addPage(RenderPagesModel.java:123)
        at org.apache.fop.layoutmgr.AbstractPageSequenceLayoutManager.finishPage(AbstractPageSequenceLayoutManager.java:316)
        at org.apache.fop.layoutmgr.PageSequenceLayoutManager.finishPage(PageSequenceLayoutManager.java:243)
        at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:147)
        at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:267)
        at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:139)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:362)
        at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:190)
        at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1102)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
        at org.apache.xerces.xinclude.XIncludeHandler.endElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:485)
        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:293)
        at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:116)
        at org.apache.fop.cli.Main.startFOP(Main.java:183)
        at org.apache.fop.cli.Main.main(Main.java:214)


Is this a bug, or are we missing something?


Thanks,


Jan Driesen
IT Office
Brepols Publishers NV


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
input_MPH.fo (application/octet-stream, 532 B) - not displayed
input_Segoe.fo (application/octet-stream, 536 B) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.