vcl/inc/pdf/COSWriter.hxx         |    2 +
 vcl/source/gdi/pdfwriter_impl.cxx |   75 ++++++--------------------------------
 vcl/source/pdf/COSWriter.cxx      |   47 +++++++++++++++++++++++
 3 files changed, 61 insertions(+), 63 deletions(-)

New commits:
commit 4b071f537aa75c37137dd8f6674c57cbd3a86c0b
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Mon Dec 16 16:44:51 2024 +0900
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Tue Dec 17 11:44:43 2024 +0100

    pdf: move appendName implementations into COSWriter
    
    Change-Id: I5c6b5bf685479643b32363159e047621473ad65a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178592
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/vcl/inc/pdf/COSWriter.hxx b/vcl/inc/pdf/COSWriter.hxx
index d63a2198a2e7..277805e720fa 100644
--- a/vcl/inc/pdf/COSWriter.hxx
+++ b/vcl/inc/pdf/COSWriter.hxx
@@ -151,6 +151,8 @@ public:
     }
 
     static void appendUnicodeTextString(const OUString& rString, 
OStringBuffer& rBuffer);
+    static void appendName(std::u16string_view rString, OStringBuffer& 
rBuffer);
+    static void appendName(const char* pString, OStringBuffer& rBuffer);
 };
 }
 
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx 
b/vcl/source/gdi/pdfwriter_impl.cxx
index 60b25f1c43c9..7ebc10e6ae58 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -149,57 +149,6 @@ void appendHexArray(sal_uInt8* pArray, size_t nSize, 
OStringBuffer& rBuffer)
         appendHex(pArray[i], rBuffer);
 }
 
-void appendName( std::u16string_view rStr, OStringBuffer& rBuffer )
-{
-// FIXME i59651 add a check for max length of 127 chars? Per PDF spec 1.4, 
appendix C.1
-// I guess than when reading the #xx sequence it will count for a single 
character.
-    OString aStr( OUStringToOString( rStr, RTL_TEXTENCODING_UTF8 ) );
-    int nLen = aStr.getLength();
-    for( int i = 0; i < nLen; i++ )
-    {
-        /*  #i16920# PDF recommendation: output UTF8, any byte
-         *  outside the interval [33(=ASCII'!');126(=ASCII'~')]
-         *  should be escaped hexadecimal
-         *  for the sake of ghostscript which also reads PDF
-         *  but has a narrower acceptance rate we only pass
-         *  alphanumerics and '-' literally.
-         */
-        if( (aStr[i] >= 'A' && aStr[i] <= 'Z' ) ||
-            (aStr[i] >= 'a' && aStr[i] <= 'z' ) ||
-            (aStr[i] >= '0' && aStr[i] <= '9' ) ||
-            aStr[i] == '-' )
-        {
-            rBuffer.append( aStr[i] );
-        }
-        else
-        {
-            rBuffer.append( '#' );
-            appendHex( static_cast<sal_Int8>(aStr[i]), rBuffer );
-        }
-    }
-}
-
-void appendName( const char* pStr, OStringBuffer& rBuffer )
-{
-    // FIXME i59651 see above
-    while( pStr && *pStr )
-    {
-        if( (*pStr >= 'A' && *pStr <= 'Z' ) ||
-            (*pStr >= 'a' && *pStr <= 'z' ) ||
-            (*pStr >= '0' && *pStr <= '9' ) ||
-            *pStr == '-' )
-        {
-            rBuffer.append( *pStr );
-        }
-        else
-        {
-            rBuffer.append( '#' );
-            appendHex( static_cast<sal_Int8>(*pStr), rBuffer );
-        }
-        pStr++;
-    }
-}
-
 //used only to emit encoded passwords
 void appendLiteralString( const char* pStr, sal_Int32 nLength, OStringBuffer& 
rBuffer )
 {
@@ -2413,7 +2362,7 @@ sal_Int32 PDFWriterImpl::emitBuildinFont(const 
pdf::BuildinFontFace* pFD, sal_In
         OString::number(nFontObject)
         + " 0 obj
"
           "<</Type/Font/Subtype/Type1/BaseFont/" );
-    appendName( rBuildinFont.m_pPSName, aLine );
+    COSWriter::appendName( rBuildinFont.m_pPSName, aLine );
     aLine.append( "
" );
     if( rBuildinFont.m_eCharSet == RTL_TEXTENCODING_MS_1252 )
          aLine.append( "/Encoding/WinAnsiEncoding
" );
@@ -2472,7 +2421,7 @@ std::map< sal_Int32, sal_Int32 > 
PDFWriterImpl::emitSystemFont( const vcl::font:
                 + " 0 obj
"
                   "<</Type/Font/Subtype/TrueType"
                   "/BaseFont/" );
-            appendName( aInfo.m_aPSName, aLine );
+            COSWriter::appendName( aInfo.m_aPSName, aLine );
             aLine.append( "
" );
             if (!pFace->IsMicrosoftSymbolEncoded())
                 aLine.append( "/Encoding/WinAnsiEncoding
" );
@@ -2585,7 +2534,7 @@ bool PDFWriterImpl::emitType3Font(const 
vcl::font::PhysicalFontFace* pFace,
             OString::number(nFontObject)
             + " 0 obj
"
               "<</Type/Font/Subtype/Type3/Name/");
-        appendName(aSubsetInfo.m_aPSName, aLine);
+        COSWriter::appendName(aSubsetInfo.m_aPSName, aLine);
 
         aLine.append(
             "
/FontBBox["
@@ -2900,7 +2849,7 @@ static void appendSubsetName( int nSubsetID, 
std::u16string_view rPSName, OStrin
         }
         rBuffer.append( '+' );
     }
-    appendName( rPSName, rBuffer );
+    COSWriter::appendName( rPSName, rBuffer );
 }
 
 sal_Int32 PDFWriterImpl::createToUnicodeCMap( sal_uInt8 const * pEncoding,
@@ -4745,7 +4694,7 @@ bool PDFWriterImpl::emitWidgetAnnotations()
                         SvMemoryStream* pStream = stream_it->second;
                         app_it->second.erase( stream_it );
                         OStringBuffer aBuf( rWidget.m_aOnValue.getLength()*2 );
-                        appendName( rWidget.m_aOnValue, aBuf );
+                        COSWriter::appendName( rWidget.m_aOnValue, aBuf );
                         (app_it->second)[ aBuf.makeStringAndClear() ] = 
pStream;
                     }
                     else
@@ -4764,7 +4713,7 @@ bool PDFWriterImpl::emitWidgetAnnotations()
                         SvMemoryStream* pStream = stream_it->second;
                         app_it->second.erase( stream_it );
                         OStringBuffer aBuf( rWidget.m_aOffValue.getLength()*2 
);
-                        appendName( rWidget.m_aOffValue, aBuf );
+                        COSWriter::appendName( rWidget.m_aOffValue, aBuf );
                         (app_it->second)[ aBuf.makeStringAndClear() ] = 
pStream;
                     }
                     else
@@ -4833,7 +4782,7 @@ bool PDFWriterImpl::emitWidgetAnnotations()
                         if( rWidget.m_aValue.isEmpty() )
                             aValue.append( "Off" );
                         else
-                            appendName( rWidget.m_aValue, aValue );
+                            COSWriter::appendName( rWidget.m_aValue, aValue );
                     }
                     [[fallthrough]];
                 case PDFWriter::PushButton:
@@ -5177,7 +5126,7 @@ bool PDFWriterImpl::emitEmbeddedFiles()
         if (!rEmbeddedFile.m_aSubType.isEmpty())
         {
             aLine.append("/Subtype /");
-            appendName(rEmbeddedFile.m_aSubType, aLine);
+            COSWriter::appendName(rEmbeddedFile.m_aSubType, aLine);
         }
         aLine.append(" /Length ");
         appendObjectReference(nSizeObject, aLine);
@@ -6194,7 +6143,7 @@ bool PDFWriterImpl::emitTrailer()
         for (auto const& rAttachedFile : m_aDocumentAttachedFiles)
         {
             aLine.append( "/" );
-            appendName(rAttachedFile.maMimeType, aLine);
+            COSWriter::appendName(rAttachedFile.maMimeType, aLine);
             aLine.append(" ");
             appendObjectReference(rAttachedFile.mnEmbeddedFileObjectId, aLine);
             aLine.append("
");
@@ -11012,7 +10961,7 @@ void PDFWriterImpl::initStructureElement(sal_Int32 
const id,
     if( !rAlias.empty() && eType != PDFWriter::NonStructElement )
     {
         OStringBuffer aNameBuf( rAlias.size() );
-        appendName( rAlias, aNameBuf );
+        COSWriter::appendName( rAlias, aNameBuf );
         OString aAliasName( aNameBuf.makeStringAndClear() );
         rEle.m_aAlias = aAliasName;
         addRoleMap(aAliasName, eType);
@@ -11803,7 +11752,7 @@ void PDFWriterImpl::ensureUniqueRadioOnValues()
                         SvMemoryStream* pStream = stream_it->second;
                         app_it->second.erase( stream_it );
                         OStringBuffer aBuf( rKid.m_aOnValue.getLength()*2 );
-                        appendName( rKid.m_aOnValue, aBuf );
+                        COSWriter::appendName( rKid.m_aOnValue, aBuf );
                         (app_it->second)[ aBuf.makeStringAndClear() ] = 
pStream;
                     }
                     else
@@ -11822,7 +11771,7 @@ void PDFWriterImpl::ensureUniqueRadioOnValues()
                         SvMemoryStream* pStream = stream_it->second;
                         app_it->second.erase( stream_it );
                         OStringBuffer aBuf( rKid.m_aOffValue.getLength()*2 );
-                        appendName( rKid.m_aOffValue, aBuf );
+                        COSWriter::appendName( rKid.m_aOffValue, aBuf );
                         (app_it->second)[ aBuf.makeStringAndClear() ] = 
pStream;
                     }
                     else
diff --git a/vcl/source/pdf/COSWriter.cxx b/vcl/source/pdf/COSWriter.cxx
index 100da2e243aa..064bec546b3e 100644
--- a/vcl/source/pdf/COSWriter.cxx
+++ b/vcl/source/pdf/COSWriter.cxx
@@ -142,6 +142,53 @@ void COSWriter::appendUnicodeTextString(const OUString& 
rString, OStringBuffer&
     }
 }
 
+void COSWriter::appendName(std::u16string_view rStr, OStringBuffer& rBuffer)
+{
+    // FIXME i59651 add a check for max length of 127 chars? Per PDF spec 1.4, 
appendix C.1
+    // I guess than when reading the #xx sequence it will count for a single 
character.
+    OString aStr(OUStringToOString(rStr, RTL_TEXTENCODING_UTF8));
+    int nLen = aStr.getLength();
+    for (int i = 0; i < nLen; i++)
+    {
+        /*  #i16920# PDF recommendation: output UTF8, any byte
+         *  outside the interval [33(=ASCII'!');126(=ASCII'~')]
+         *  should be escaped hexadecimal
+         *  for the sake of ghostscript which also reads PDF
+         *  but has a narrower acceptance rate we only pass
+         *  alphanumerics and '-' literally.
+         */
+        if ((aStr[i] >= 'A' && aStr[i] <= 'Z') || (aStr[i] >= 'a' && aStr[i] 
<= 'z')
+            || (aStr[i] >= '0' && aStr[i] <= '9') || aStr[i] == '-')
+        {
+            rBuffer.append(aStr[i]);
+        }
+        else
+        {
+            rBuffer.append('#');
+            appendHex(static_cast<sal_Int8>(aStr[i]), rBuffer);
+        }
+    }
+}
+
+void COSWriter::appendName(const char* pStr, OStringBuffer& rBuffer)
+{
+    // FIXME i59651 see above
+    while (pStr && *pStr)
+    {
+        if ((*pStr >= 'A' && *pStr <= 'Z') || (*pStr >= 'a' && *pStr <= 'z')
+            || (*pStr >= '0' && *pStr <= '9') || *pStr == '-')
+        {
+            rBuffer.append(*pStr);
+        }
+        else
+        {
+            rBuffer.append('#');
+            appendHex(static_cast<sal_Int8>(*pStr), rBuffer);
+        }
+        pStr++;
+    }
+}
+
 } //end vcl::pdf
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to