Re: Surrogate pair error

Chris Bowditch <[email protected]>
Newsgroups gmane.text.xml.fop.user
Message-ID <AM6PR0402MB3541BF609B1A8DB393CE8B44FBE70@AM6PR0402MB3541.eurprd04.prod.outlook.com>
Hi Jan,

Indeed this should work since FOP 2.3 thanks to FOP-1969. I suggest you 
log a new bug if you are able to share your XSL-FO and supporting Font 
files.

Thanks,

Chris

On 24/02/2020 14:05, Jan Driesen wrote:
>
> 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]
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.