Skip to content

Commit

Permalink
fdo#67370: Hyphens are not visible in tagged PDF
Browse files Browse the repository at this point in the history
One requirement of tagged PDF is to represent automatically inserted
hyphens using the soft hyphen (U+00AD) character, so we were doing this
by simply passing that character to text layout code when exporting a
tagged PDF (which is the literal suggestion of old PDF specification).

This is wrong, though, since the soft hyphen is a control character and
should not have a visible output by itself (and fonts might not even
have a visible glyph there), but this happened to work because non of
the layout engines we are using treated soft hyphen specially and was
just showing whatever glyph the font had there. This broke with the
switch to HarfBuzz since it will not show any visible glyph for Unicode
control characters (by default), which is the right thing to do.

Latest versions of PDF spec suggest using either ToUnicode mapping or an
ActualText text entry to encode the soft hyphen instead, I found it
easier to use ActualText since we already have code that handles
non-standard hyphenation using it already.

Change-Id: I88deadf3a806f69775b2e0ccff2f9b2f61a0f2e2
  • Loading branch information
khaledhosny committed Dec 21, 2013
1 parent 0591a98 commit 4dba6f5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
11 changes: 9 additions & 2 deletions sw/source/core/text/EnhancedPDFExportHelper.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,8 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType )
case vcl::PDFWriter::Span :
case vcl::PDFWriter::Quote :
case vcl::PDFWriter::Code :
if( POR_HYPHSTR == pPor->GetWhichPor() || POR_SOFTHYPHSTR == pPor->GetWhichPor() )
if( POR_HYPHSTR == pPor->GetWhichPor() || POR_SOFTHYPHSTR == pPor->GetWhichPor() ||
POR_HYPH == pPor->GetWhichPor() || POR_SOFTHYPH == pPor->GetWhichPor() )
bActualText = true;
else
{
Expand All @@ -783,7 +784,11 @@ void SwTaggedPDFHelper::SetAttributes( vcl::PDFWriter::StructElement eType )

if ( bActualText )
{
const OUString aActualTxt = rInf.GetTxt().copy( rInf.GetIdx(), pPor->GetLen() );
OUString aActualTxt;
if (pPor->GetWhichPor() == POR_SOFTHYPH || pPor->GetWhichPor() == POR_HYPH)
aActualTxt = OUString(0xad); // soft hyphen
else
aActualTxt = rInf.GetTxt().copy(rInf.GetIdx(), pPor->GetLen());
mpPDFExtOutDevData->SetActualText( aActualTxt );
}

Expand Down Expand Up @@ -1364,6 +1369,8 @@ void SwTaggedPDFHelper::BeginInlineStructureElements()

switch ( pPor->GetWhichPor() )
{
case POR_HYPH :
case POR_SOFTHYPH :
// Check for alternative spelling:
case POR_HYPHSTR :
case POR_SOFTHYPHSTR :
Expand Down
12 changes: 2 additions & 10 deletions sw/source/core/text/txthyph.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <hintids.hxx>
#include <editeng/unolingu.hxx>
#include <com/sun/star/i18n/WordType.hpp>
#include <EnhancedPDFExportHelper.hxx>
#include <viewopt.hxx>
#include <viewsh.hxx>
#include <SwPortionHandler.hxx>
Expand Down Expand Up @@ -370,16 +369,9 @@ sal_Bool SwTxtPortion::CreateHyphen( SwTxtFormatInfo &rInf, SwTxtGuess &rGuess )
* virtual SwHyphPortion::GetExpTxt()
*************************************************************************/

sal_Bool SwHyphPortion::GetExpTxt( const SwTxtSizeInfo &rInf, OUString &rTxt ) const
sal_Bool SwHyphPortion::GetExpTxt( const SwTxtSizeInfo &/*rInf*/, OUString &rTxt ) const
{
// #i16816# tagged pdf support
const sal_Unicode cChar = rInf.GetVsh() &&
rInf.GetVsh()->GetViewOptions()->IsPDFExport() &&
SwTaggedPDFHelper::IsExportTaggedPDF( *rInf.GetOut() ) ?
0xad :
'-';

rTxt = OUString(cChar);
rTxt = "-";
return sal_True;
}

Expand Down

0 comments on commit 4dba6f5

Please sign in to comment.