/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
//These conversion tables were designed for StarSymbol. OpenSymbol //originally didn't have the same code points as StarSymbol, and //then gained some extra code points, but there are still potentially //various holes in OpenSymbol which were filled by StarSymbol, i.e. //destination mapping points which are empty in OpenSymbol
static sal_Unicode ImplStarSymbolToStarBats( sal_Unicode c )
{ switch ( c )
{ case0x00A2: c = 0xF0E0; break; case0x00A4: c = 0xF0E1; break; case0x00A5: c = 0xF0E2; break; case0x00A7: c = 0xF0A7; break; case0x00AB: c = 0xF0AB; break; case0x00B6: c = 0xF0DE; break; case0x00BB: c = 0xF0BB; break;
case0x0152: c = 0xF08C; break; case0x0153: c = 0xF09C; break; case0x0160: c = 0xF08A; break; case0x0161: c = 0xF09A; break; case0x0178: c = 0xF09F; break; case0x017D: c = 0xF08E; break; case0x017E: c = 0xF09E; break;
case0x0192: c = 0xF083; break; case0x02C6: c = 0xF088; break; case0x02DC: c = 0xF098; break; case0x2013: c = 0xF096; break; case0x2014: c = 0xF097; break; case0x2018: c = 0xF091; break;
case0x2019: c = 0xF092; break; case0x201A: c = 0xF082; break; case0x201C: c = 0xF093; break; case0x201D: c = 0xF094; break; case0x201E: c = 0xF084; break; case0x2020: c = 0xF086; break;
case0x2021: c = 0xF087; break; case0x2022: c = 0xF095; break; case0x2026: c = 0xF085; break; case0x2030: c = 0xF089; break; case0x2039: c = 0xF08B; break; case0x203A: c = 0xF09B; break;
case0x20A1: c = 0xF0E4; break; case0x20A2: c = 0xF0E5; break; case0x20A3: c = 0xF0E6; break; case0x20A4: c = 0xF0E7; break; case0x20A8: c = 0xF0EA; break; case0x20A9: c = 0xF0E8; break; case0x20AB: c = 0xF0E9; break; case0x20AC: c = 0xF080; break;
case0x2122: c = 0xF099; break; case0x2190: c = 0xF0B7; break; case0x2191: c = 0xF0B8; break; case0x2192: c = 0xF0B5; break; case0x2193: c = 0xF0B6; break; case0x2194: c = 0xF0D8; break; case0x2195: c = 0xF0D9; break;
case0x21E4: c = 0xF0B4; break; case0x21E5: c = 0xF0B3; break; case0x21E6: c = 0xF0A4; break; case0x21E7: c = 0xF0B2; break; case0x21E8: c = 0xF0AF; break; case0x21E9: c = 0xF0A3; break;
case0x25A0: c = 0xF024; break; case0x25A1: c = 0xF025; break; case0x25B4: c = 0xF0C5; break; case0x25B5: c = 0xF0C7; break; case0x25BE: c = 0xF0C4; break; case0x25BF: c = 0xF0C6; break; case0x25C6: c = 0xF043; break; case0x25CF: c = 0xF022; break; case0x25D7: c = 0xF0D0; break;
case0x260E: c = 0xF074; break; case0x2611: c = 0xF034; break; case0x2612: c = 0xF033; break; case0x261B: c = 0xF036; break; case0x261E: c = 0xF07D; break; case0x2639: c = 0xF0AD; break; case0x263A: c = 0xF021; break;
case0x2702: c = 0xF0CB; break; case0x2708: c = 0xF0CC; break; case0x270D: c = 0xF07E; break; case0x270E: c = 0xF038; break;
case0x2713: c = 0xF039; break; case0x2714: c = 0xF03A; break; case0x2717: c = 0xF04F; break; case0x2718: c = 0xF050; break; case0x2719: c = 0xF051; break; case0x271A: c = 0xF052; break; case0x271B: c = 0xF053; break; case0x271C: c = 0xF054; break;
case0x2721: c = 0xF0CD; break; case0x2722: c = 0xF044; break; case0x2723: c = 0xF045; break; case0x2724: c = 0xF046; break; case0x2725: c = 0xF047; break; case0x272B: c = 0xF055; break; case0x272C: c = 0xF056; break; case0x272D: c = 0xF057; break; case0x272E: c = 0xF058; break; case0x272F: c = 0xF059; break;
case0x2730: c = 0xF05A; break; case0x2733: c = 0xF048; break; case0x2734: c = 0xF049; break; case0x2735: c = 0xF04A; break; case0x2736: c = 0xF04B; break; case0x2737: c = 0xF04C; break; case0x2738: c = 0xF04D; break; case0x2739: c = 0xF04E; break; case0x273F: c = 0xF0CE; break;
case0x2744: c = 0xF0CF; break; case0x274D: c = 0xF023; break; case0x274F: c = 0xF03E; break; case0x2750: c = 0xF03F; break; case0x2751: c = 0xF027; break; case0x2752: c = 0xF028; break; case0x2756: c = 0xF02C; break; case0x2759: c = 0xF0D1; break; case0x2762: c = 0xF0D4; break;
case0x2780: c = 0xF068; break; case0x2781: c = 0xF069; break; case0x2782: c = 0xF06A; break; case0x2783: c = 0xF06B; break; case0x2784: c = 0xF06C; break; case0x2785: c = 0xF06D; break; case0x2786: c = 0xF06E; break; case0x2787: c = 0xF06F; break; case0x2788: c = 0xF070; break; case0x2789: c = 0xF071; break; case0x278A: c = 0xF05D; break; case0x278B: c = 0xF05E; break; case0x278C: c = 0xF05F; break; case0x278D: c = 0xF060; break; case0x278E: c = 0xF061; break; case0x278F: c = 0xF062; break;
case0x2790: c = 0xF063; break; case0x2791: c = 0xF064; break; case0x2792: c = 0xF065; break; case0x2793: c = 0xF066; break; case0x2794: c = 0xF031; break; case0x2798: c = 0xF0DA; break; case0x279A: c = 0xF0DB; break;
case0x27A2: c = 0xF02F; break; case0x27B2: c = 0xF035; break; case0x27B8: c = 0xF0DC; break;
case0xE000: c = 0xF000+38; break; case0xE001: c = 0xF000+41; break; case0xE002: c = 0xF000+42; break; case0xE003: c = 0xF000+43; break; case0xE004: c = 0xF000+45; break; case0xE005: c = 0xF000+46; break; case0xE006: c = 0xF000+48; break; case0xE007: c = 0xF000+57; break;
case0xE008: c = 0xF000+59; break; case0xE009: c = 0xF000+60; break; case0xE00a: c = 0xF000+61; break; case0xE00b: c = 0xF000+64; break; case0xE00c: c = 0xF000+65; break; case0xE00d: c = 0xF000+66; break; case0xE00e: c = 0xF000+67; break; case0xE00f: c = 0xF000+92; break;
case0xE010: c = 0xF000+103; break; case0xE011: c = 0xF000+114; break; case0xE012: c = 0xF000+115; break; case0xE013: c = 0xF000+117; break; case0xE014: c = 0xF000+118; break; case0xE015: c = 0xF000+119; break; case0xE016: c = 0xF000+120; break; case0xE017: c = 0xF000+121; break;
case0xE018: c = 0xF000+122; break; case0xE019: c = 0xF000+123; break; case0xE01a: c = 0xF000+124; break; case0xE01b: c = 0xF000+126; break; case0xE01c: c = 0xF000+136; break; case0xE01d: c = 0xF000+155; break; case0xE01e: c = 0xF000+165; break; case0xE01f: c = 0xF000+166; break;
case0xE020: c = 0xF000+168; break; case0xE021: c = 0xF000+169; break; case0xE022: c = 0xF000+170; break; case0xE023: c = 0xF000+172; break; case0xE024: c = 0xF000+174; break; case0xE025: c = 0xF000+175; break; case0xE026: c = 0xF000+176; break; case0xE027: c = 0xF000+177; break;
case0xE028: c = 0xF000+178; break; case0xE029: c = 0xF000+185; break; case0xE02a: c = 0xF000+186; break; case0xE02b: c = 0xF000+188; break; case0xE02c: c = 0xF000+189; break; case0xE02d: c = 0xF000+190; break; case0xE02e: c = 0xF000+191; break; case0xE02f: c = 0xF000+192; break;
case0xE030: c = 0xF000+193; break; case0xE031: c = 0xF000+194; break; case0xE032: c = 0xF000+195; break; case0xE033: c = 0xF000+200; break; case0xE034: c = 0xF000+201; break; case0xE035: c = 0xF000+202; break; case0xE036: c = 0xF000+210; break; case0xE037: c = 0xF000+211; break;
case0xE038: c = 0xF000+227; break; case0xE039: c = 0xF000+235; break; case0xE03a: c = 0xF000+255; break;
//Reverse map from a given starsymbol char to exact matches in ms symbol //fonts. for (autoconst & r: aConservativeTable)
{
SymbolEntry aEntry;
aEntry.eFont = r.meFont; for (aEntry.cIndex = 0xFF; aEntry.cIndex >= 0x20; --aEntry.cIndex)
{ if (sal_Unicode cChar = r.pTab[aEntry.cIndex-0x20])
maMagicMap.emplace(cChar, aEntry);
}
}
sal_Unicode ConvertChar::RecodeChar( sal_Unicode cChar ) const
{
sal_Unicode cRetVal = 0; if( mpCvtFunc )
{ // use a conversion function for recoding
cRetVal = mpCvtFunc( cChar );
} else
{ // use a conversion table for recoding
sal_Unicode cIndex = cChar; // allow symbol aliasing if( cIndex & 0xFF00 )
cIndex -= 0xF000; // recode the symbol if( cIndex>=0x0020 && cIndex<=0x00FF )
{
cRetVal = mpCvtTab[ cIndex - 0x0020 ];
if (!cRetVal && !maSubsFontName.isEmpty())
{ if ( IsOpenSymbol( maSubsFontName ) )
{
cRetVal = 0xE12C;
SAL_WARN( "unotools.misc", "Forcing a bullet substitution from 0x" <<
OString::number(cChar, 16) << " to 0x" <<
OString::number(cRetVal, 16));
}
}
}
}
return cRetVal ? cRetVal : cChar;
}
// recode the string assuming the character codes are symbol codes // from a traditional symbol font (i.e. U+F020..U+F0FF) void ConvertChar::RecodeString( OUString& rStr, sal_Int32 nIndex, sal_Int32 nLen ) const
{
sal_Int32 nLastIndex = nIndex + nLen;
OUStringBuffer aTmpStr(rStr);
const RecodeTable aStarSymbolRecodeTable[] =
{ // the first two entries must be StarMath and StarBats; do not reorder! // reason: see CreateFontToSubsFontConverter method
{"starbats", {aStarBatsTab, u"StarSymbol"_ustr, nullptr}},
{"starmath", {aStarMathTab, u"StarSymbol"_ustr, nullptr}},
// clean up and lowercase font name
OUString aOrgName( GetEnglishSearchFontName( rOrgFontName ) );
OUString aMapName( GetEnglishSearchFontName( rMapFontName ) );
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.47Bemerkung:
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-06-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.