vcl/inc/sft.hxx                             |    2 
 vcl/source/fontsubset/sft.cxx               |  139 ++++++++++++++++++++++++++++
 vcl/unx/generic/fontmanager/fontmanager.cxx |  138 ---------------------------
 3 files changed, 141 insertions(+), 138 deletions(-)

New commits:
commit 283b6a474d241797ae15eda8ec06f651469d3c82
Author:     Caolán McNamara <[email protected]>
AuthorDate: Tue Aug 12 13:24:10 2025 +0100
Commit:     Miklos Vajna <[email protected]>
CommitDate: Fri Sep 19 13:58:20 2025 +0200

    move convertSfntName from fontmanager to sft
    
    Change-Id: I67327fdef59538fcafe92f0c6d42f94d9aca06bc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191160
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 78ebf744531f..4a6324ab8ecb 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -149,6 +149,8 @@ namespace vcl
         std::vector<sal_uInt8> sptr;            /**< string data (not 
zero-terminated!)          */
     };
 
+    OUString convertSfntName(const NameRecord& rNameRecord);
+
 /** Return value of GetTTGlobalFontInfo() */
 
     typedef struct TTGlobalFontInfo_ {
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index 67bc04cc1097..3ad71be6dab5 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -42,11 +42,13 @@
 #include <tools/fix16.hxx>
 #endif
 #include "ttcr.hxx"
+#include <i18nlangtag/applelangid.hxx>
 #include <rtl/crc.h>
 #include <rtl/ustring.hxx>
 #include <rtl/ustrbuf.hxx>
 #include <sal/log.hxx>
 #include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
 #include <osl/endian.h>
 #include <osl/thread.h>
 #include <unotools/tempfile.hxx>
@@ -1810,6 +1812,143 @@ bool getTTCoverage(
     return bRet;
 }
 
+/*
+ *  static helpers
+ */
+static sal_uInt16 getUInt16BE( const sal_uInt8*& pBuffer )
+{
+    sal_uInt16 nRet = static_cast<sal_uInt16>(pBuffer[1]) |
+        (static_cast<sal_uInt16>(pBuffer[0]) << 8);
+    pBuffer+=2;
+    return nRet;
+}
+
+OUString convertSfntName( const NameRecord& rNameRecord )
+{
+    OUString aValue;
+    if(
+       ( rNameRecord.platformID == 3 && ( rNameRecord.encodingID == 0 || 
rNameRecord.encodingID == 1 ) )  // MS, Unicode
+       ||
+       ( rNameRecord.platformID == 0 ) // Apple, Unicode
+       )
+    {
+        OUStringBuffer aName( rNameRecord.sptr.size()/2 );
+        const sal_uInt8* pNameBuffer = rNameRecord.sptr.data();
+        for(size_t n = 0; n < rNameRecord.sptr.size()/2; n++ )
+            aName.append( static_cast<sal_Unicode>(getUInt16BE( pNameBuffer )) 
);
+        aValue = aName.makeStringAndClear();
+    }
+    else if( rNameRecord.platformID == 3 )
+    {
+        if( rNameRecord.encodingID >= 2 && rNameRecord.encodingID <= 6 )
+        {
+            /*
+             *  and now for a special kind of madness:
+             *  some fonts encode their byte value string as BE uint16
+             *  (leading to stray zero bytes in the string)
+             *  while others code two bytes as a uint16 and swap to BE
+             */
+            OStringBuffer aName;
+            const sal_uInt8* pNameBuffer = rNameRecord.sptr.data();
+            for(size_t n = 0; n < rNameRecord.sptr.size()/2; n++ )
+            {
+                sal_Unicode aCode = static_cast<sal_Unicode>(getUInt16BE( 
pNameBuffer ));
+                char aChar = aCode >> 8;
+                if( aChar )
+                    aName.append( aChar );
+                aChar = aCode & 0x00ff;
+                if( aChar )
+                    aName.append( aChar );
+            }
+            switch( rNameRecord.encodingID )
+            {
+                case 2:
+                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_932 
);
+                    break;
+                case 3:
+                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_936 
);
+                    break;
+                case 4:
+                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_950 
);
+                    break;
+                case 5:
+                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_949 
);
+                    break;
+                case 6:
+                    aValue = OStringToOUString( aName, 
RTL_TEXTENCODING_MS_1361 );
+                    break;
+            }
+        }
+    }
+    else if( rNameRecord.platformID == 1 )
+    {
+        std::string_view aName(reinterpret_cast<const 
char*>(rNameRecord.sptr.data()), rNameRecord.sptr.size());
+        rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
+        switch (rNameRecord.encodingID)
+        {
+            case 0:
+                eEncoding = RTL_TEXTENCODING_APPLE_ROMAN;
+                break;
+            case 1:
+                eEncoding = RTL_TEXTENCODING_APPLE_JAPANESE;
+                break;
+            case 2:
+                eEncoding = RTL_TEXTENCODING_APPLE_CHINTRAD;
+                break;
+            case 3:
+                eEncoding = RTL_TEXTENCODING_APPLE_KOREAN;
+                break;
+            case 4:
+                eEncoding = RTL_TEXTENCODING_APPLE_ARABIC;
+                break;
+            case 5:
+                eEncoding = RTL_TEXTENCODING_APPLE_HEBREW;
+                break;
+            case 6:
+                eEncoding = RTL_TEXTENCODING_APPLE_GREEK;
+                break;
+            case 7:
+                eEncoding = RTL_TEXTENCODING_APPLE_CYRILLIC;
+                break;
+            case 9:
+                eEncoding = RTL_TEXTENCODING_APPLE_DEVANAGARI;
+                break;
+            case 10:
+                eEncoding = RTL_TEXTENCODING_APPLE_GURMUKHI;
+                break;
+            case 11:
+                eEncoding = RTL_TEXTENCODING_APPLE_GUJARATI;
+                break;
+            case 21:
+                eEncoding = RTL_TEXTENCODING_APPLE_THAI;
+                break;
+            case 25:
+                eEncoding = RTL_TEXTENCODING_APPLE_CHINSIMP;
+                break;
+            case 29:
+                eEncoding = RTL_TEXTENCODING_APPLE_CENTEURO;
+                break;
+            case 32:    //Uninterpreted
+                eEncoding = RTL_TEXTENCODING_UTF8;
+                break;
+            default:
+                if (o3tl::starts_with(aName, "Khmer OS") || // encoding '20' 
(Khmer) isn't implemented
+                    o3tl::starts_with(aName, "YoavKtav")) // tdf#152278
+                {
+                    eEncoding = RTL_TEXTENCODING_UTF8;
+                }
+                SAL_WARN_IF(eEncoding == RTL_TEXTENCODING_DONTKNOW, 
"vcl.fonts", "mac encoding " <<
+                            rNameRecord.encodingID << " in font '" << aName << 
"'" <<
+                            (rNameRecord.encodingID > 32 ? " is invalid" : " 
has unimplemented conversion"));
+                break;
+        }
+        if (eEncoding != RTL_TEXTENCODING_DONTKNOW)
+            aValue = OStringToOUString(aName, eEncoding);
+    }
+
+    return aValue;
+}
+
 } // namespace vcl
 
 int TestFontSubset(const void* data, sal_uInt32 size)
diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx 
b/vcl/unx/generic/fontmanager/fontmanager.cxx
index d755f317362a..fd2b1dbad382 100644
--- a/vcl/unx/generic/fontmanager/fontmanager.cxx
+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
@@ -62,18 +62,6 @@ using namespace psp;
 using namespace com::sun::star::uno;
 using namespace com::sun::star::lang;
 
-/*
- *  static helpers
- */
-
-static sal_uInt16 getUInt16BE( const sal_uInt8*& pBuffer )
-{
-    sal_uInt16 nRet = static_cast<sal_uInt16>(pBuffer[1]) |
-        (static_cast<sal_uInt16>(pBuffer[0]) << 8);
-    pBuffer+=2;
-    return nRet;
-}
-
 /*
  *  PrintFont implementations
  */
@@ -311,132 +299,6 @@ std::vector<fontID> PrintFontManager::findFontFileIDs( 
int nDirID, const OString
 
 namespace {
 
-OUString convertSfntName( const NameRecord& rNameRecord )
-{
-    OUString aValue;
-    if(
-       ( rNameRecord.platformID == 3 && ( rNameRecord.encodingID == 0 || 
rNameRecord.encodingID == 1 ) )  // MS, Unicode
-       ||
-       ( rNameRecord.platformID == 0 ) // Apple, Unicode
-       )
-    {
-        OUStringBuffer aName( rNameRecord.sptr.size()/2 );
-        const sal_uInt8* pNameBuffer = rNameRecord.sptr.data();
-        for(size_t n = 0; n < rNameRecord.sptr.size()/2; n++ )
-            aName.append( static_cast<sal_Unicode>(getUInt16BE( pNameBuffer )) 
);
-        aValue = aName.makeStringAndClear();
-    }
-    else if( rNameRecord.platformID == 3 )
-    {
-        if( rNameRecord.encodingID >= 2 && rNameRecord.encodingID <= 6 )
-        {
-            /*
-             *  and now for a special kind of madness:
-             *  some fonts encode their byte value string as BE uint16
-             *  (leading to stray zero bytes in the string)
-             *  while others code two bytes as a uint16 and swap to BE
-             */
-            OStringBuffer aName;
-            const sal_uInt8* pNameBuffer = rNameRecord.sptr.data();
-            for(size_t n = 0; n < rNameRecord.sptr.size()/2; n++ )
-            {
-                sal_Unicode aCode = static_cast<sal_Unicode>(getUInt16BE( 
pNameBuffer ));
-                char aChar = aCode >> 8;
-                if( aChar )
-                    aName.append( aChar );
-                aChar = aCode & 0x00ff;
-                if( aChar )
-                    aName.append( aChar );
-            }
-            switch( rNameRecord.encodingID )
-            {
-                case 2:
-                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_932 
);
-                    break;
-                case 3:
-                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_936 
);
-                    break;
-                case 4:
-                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_950 
);
-                    break;
-                case 5:
-                    aValue = OStringToOUString( aName, RTL_TEXTENCODING_MS_949 
);
-                    break;
-                case 6:
-                    aValue = OStringToOUString( aName, 
RTL_TEXTENCODING_MS_1361 );
-                    break;
-            }
-        }
-    }
-    else if( rNameRecord.platformID == 1 )
-    {
-        std::string_view aName(reinterpret_cast<const 
char*>(rNameRecord.sptr.data()), rNameRecord.sptr.size());
-        rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
-        switch (rNameRecord.encodingID)
-        {
-            case 0:
-                eEncoding = RTL_TEXTENCODING_APPLE_ROMAN;
-                break;
-            case 1:
-                eEncoding = RTL_TEXTENCODING_APPLE_JAPANESE;
-                break;
-            case 2:
-                eEncoding = RTL_TEXTENCODING_APPLE_CHINTRAD;
-                break;
-            case 3:
-                eEncoding = RTL_TEXTENCODING_APPLE_KOREAN;
-                break;
-            case 4:
-                eEncoding = RTL_TEXTENCODING_APPLE_ARABIC;
-                break;
-            case 5:
-                eEncoding = RTL_TEXTENCODING_APPLE_HEBREW;
-                break;
-            case 6:
-                eEncoding = RTL_TEXTENCODING_APPLE_GREEK;
-                break;
-            case 7:
-                eEncoding = RTL_TEXTENCODING_APPLE_CYRILLIC;
-                break;
-            case 9:
-                eEncoding = RTL_TEXTENCODING_APPLE_DEVANAGARI;
-                break;
-            case 10:
-                eEncoding = RTL_TEXTENCODING_APPLE_GURMUKHI;
-                break;
-            case 11:
-                eEncoding = RTL_TEXTENCODING_APPLE_GUJARATI;
-                break;
-            case 21:
-                eEncoding = RTL_TEXTENCODING_APPLE_THAI;
-                break;
-            case 25:
-                eEncoding = RTL_TEXTENCODING_APPLE_CHINSIMP;
-                break;
-            case 29:
-                eEncoding = RTL_TEXTENCODING_APPLE_CENTEURO;
-                break;
-            case 32:    //Uninterpreted
-                eEncoding = RTL_TEXTENCODING_UTF8;
-                break;
-            default:
-                if (o3tl::starts_with(aName, "Khmer OS") || // encoding '20' 
(Khmer) isn't implemented
-                    o3tl::starts_with(aName, "YoavKtav")) // tdf#152278
-                {
-                    eEncoding = RTL_TEXTENCODING_UTF8;
-                }
-                SAL_WARN_IF(eEncoding == RTL_TEXTENCODING_DONTKNOW, 
"vcl.fonts", "mac encoding " <<
-                            rNameRecord.encodingID << " in font '" << aName << 
"'" <<
-                            (rNameRecord.encodingID > 32 ? " is invalid" : " 
has unimplemented conversion"));
-                break;
-        }
-        if (eEncoding != RTL_TEXTENCODING_DONTKNOW)
-            aValue = OStringToOUString(aName, eEncoding);
-    }
-
-    return aValue;
-}
-
 OUString analyzeSfntFamilyName(void const * pTTFont)
 {
     OUString aFamily;

Reply via email to