Coverage Report

Created: 2025-11-16 09:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/svx/source/dialog/charmap.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#include <config_wasm_strip.h>
21
22
#include <utility>
23
#include <vcl/commandevent.hxx>
24
#include <vcl/event.hxx>
25
#include <vcl/fontcharmap.hxx>
26
#include <vcl/svapp.hxx>
27
#include <vcl/settings.hxx>
28
#include <vcl/virdev.hxx>
29
30
#include <svx/ucsubset.hxx>
31
32
33
#include <svx/strings.hrc>
34
35
#include <svx/charmap.hxx>
36
#include <svx/dialmgr.hxx>
37
38
#include <charmapacc.hxx>
39
#include <uiobject.hxx>
40
41
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
42
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
43
#include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
44
#include <com/sun/star/datatransfer/clipboard/SystemClipboard.hpp>
45
#include <officecfg/Office/Common.hxx>
46
#include <comphelper/processfactory.hxx>
47
#include <comphelper/sequence.hxx>
48
#include <unicode/uchar.h>
49
#include <vcl/textview.hxx>
50
#include <rtl/ustrbuf.hxx>
51
52
using namespace ::com::sun::star::accessibility;
53
using namespace ::com::sun::star::uno;
54
using namespace ::com::sun::star;
55
56
sal_uInt32& SvxShowCharSet::getSelectedChar()
57
0
{
58
0
    static sal_uInt32 cSelectedChar = ' '; // keeps selected character over app lifetime
59
0
    return cSelectedChar;
60
0
}
61
62
FactoryFunction SvxShowCharSet::GetUITestFactory() const
63
0
{
64
0
    return SvxShowCharSetUIObject::create;
65
0
}
66
67
SvxShowCharSet::SvxShowCharSet(std::unique_ptr<weld::ScrolledWindow> pScrolledWindow, const VclPtr<VirtualDevice>& rVirDev)
68
0
    : mxVirDev(rVirDev)
69
0
    , mxScrollArea(std::move(pScrolledWindow))
70
0
    , mnX(0)
71
0
    , mnY(0)
72
0
    , maFontSize(0, 0)
73
0
    , mbRecalculateFont(true)
74
0
    , mbUpdateForeground(true)
75
0
    , mbUpdateBackground(true)
76
0
{
77
0
    init();
78
0
}
79
80
void SvxShowCharSet::SetDrawingArea(weld::DrawingArea* pDrawingArea)
81
0
{
82
0
    CustomWidgetController::SetDrawingArea(pDrawingArea);
83
84
0
    Size aSize(COLUMN_COUNT * pDrawingArea->get_approximate_digit_width() * 5.25,
85
0
               ROW_COUNT * pDrawingArea->get_text_height() * 2);
86
87
0
    mnX = aSize.Width() / COLUMN_COUNT;
88
0
    mnY = aSize.Height() / ROW_COUNT;
89
90
    // tdf#121232 set a size request that will result in a 0 m_nXGap by default
91
0
    mxScrollArea->set_size_request(COLUMN_COUNT * mnX + mxScrollArea->get_scroll_thickness() + 2,
92
0
                                   ROW_COUNT * mnY);
93
0
}
94
95
void SvxShowCharSet::init()
96
0
{
97
0
    mnSelectedIndex = -1;    // TODO: move into init list when it is no longer static
98
0
    m_nXGap = 0;
99
0
    m_nYGap = 0;
100
101
0
    mxScrollArea->connect_vadjustment_value_changed(LINK(this, SvxShowCharSet, VscrollHdl));
102
0
    getFavCharacterList();
103
    // other settings depend on selected font => see RecalculateFont
104
105
0
    mbDrag = false;
106
0
}
107
108
void SvxShowCharSet::Resize()
109
0
{
110
0
    mbRecalculateFont = true;
111
0
}
112
113
void SvxShowCharSet::GetFocus()
114
0
{
115
0
    SelectIndex(mnSelectedIndex, true);
116
0
}
117
118
void SvxShowCharSet::LoseFocus()
119
0
{
120
0
    SelectIndex(mnSelectedIndex);
121
0
}
122
123
bool SvxShowCharSet::MouseButtonDown(const MouseEvent& rMEvt)
124
0
{
125
0
    if ( rMEvt.IsLeft() )
126
0
    {
127
0
        if ( rMEvt.GetClicks() == 1 )
128
0
        {
129
0
            GrabFocus();
130
0
            mbDrag = true;
131
0
            CaptureMouse();
132
133
0
            int nIndex = PixelToMapIndex( rMEvt.GetPosPixel() );
134
            // Fire the focus event
135
0
            SelectIndex( nIndex, true);
136
0
        }
137
138
0
        if ( !(rMEvt.GetClicks() % 2) )
139
0
            maDoubleClkHdl.Call( this );
140
141
0
        return true;
142
0
    }
143
144
0
    return CustomWidgetController::MouseButtonDown(rMEvt);
145
0
}
146
147
bool SvxShowCharSet::MouseButtonUp(const MouseEvent& rMEvt)
148
0
{
149
0
    if ( mbDrag && rMEvt.IsLeft() )
150
0
    {
151
        // released mouse over character map
152
0
        if ( tools::Rectangle(Point(), GetOutputSizePixel()).Contains(rMEvt.GetPosPixel()))
153
0
            maSelectHdl.Call( this );
154
0
        ReleaseMouse();
155
0
        mbDrag = false;
156
0
    }
157
158
0
    return true;
159
0
}
160
161
bool SvxShowCharSet::MouseMove(const MouseEvent& rMEvt)
162
0
{
163
0
    if ( rMEvt.IsLeft() && mbDrag )
164
0
    {
165
0
        Point aPos  = rMEvt.GetPosPixel();
166
0
        Size  aSize = GetOutputSizePixel();
167
168
0
        if ( aPos.X() < 0 )
169
0
            aPos.setX( 0 );
170
0
        else if ( aPos.X() > aSize.Width()-5 )
171
0
            aPos.setX( aSize.Width()-5 );
172
0
        if ( aPos.Y() < 0 )
173
0
            aPos.setY( 0 );
174
0
        else if ( aPos.Y() > aSize.Height()-5 )
175
0
            aPos.setY( aSize.Height()-5 );
176
177
0
        int nIndex = PixelToMapIndex( aPos );
178
    // Fire the focus event.
179
0
        SelectIndex( nIndex, true );
180
0
    }
181
182
0
    return true;
183
0
}
184
185
bool SvxShowCharSet::Command(const CommandEvent& rCEvt)
186
0
{
187
0
    if (rCEvt.GetCommand() == CommandEventId::ContextMenu)
188
0
    {
189
0
        Point aPosition;
190
0
        if (rCEvt.IsMouseEvent())
191
0
        {
192
0
            aPosition = rCEvt.GetMousePosPixel();
193
0
            int nIndex = PixelToMapIndex(aPosition);
194
            // Fire the focus event
195
0
            SelectIndex(nIndex, true);
196
0
        }
197
0
        else
198
0
        {
199
0
            svx::SvxShowCharSetItem* pItem = ImplGetItem(mnSelectedIndex);
200
0
            if (!pItem)
201
0
                return true;
202
203
            // position context menu at centre of currently selected item
204
0
            aPosition = MapIndexToPixel(mnSelectedIndex);
205
0
            aPosition.AdjustX(pItem->maRect.GetWidth() / 2);
206
0
            aPosition.AdjustY(pItem->maRect.GetHeight() / 2);
207
0
        }
208
0
        createContextMenu(aPosition);
209
0
        return true;
210
0
    }
211
0
    return weld::CustomWidgetController::Command(rCEvt);
212
0
}
213
214
sal_uInt16 SvxShowCharSet::GetRowPos(sal_uInt16 _nPos)
215
0
{
216
0
    return _nPos / COLUMN_COUNT ;
217
0
}
218
219
void SvxShowCharSet::getFavCharacterList()
220
0
{
221
0
    maFavCharList.clear();
222
0
    maFavCharFontList.clear();
223
    //retrieve recent character list
224
0
    css::uno::Sequence< OUString > rFavCharList( officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterList::get() );
225
0
    comphelper::sequenceToContainer(maFavCharList, rFavCharList);
226
227
    //retrieve recent character font list
228
0
    css::uno::Sequence< OUString > rFavCharFontList( officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterFontList::get() );
229
0
    comphelper::sequenceToContainer(maFavCharFontList, rFavCharFontList);
230
0
}
231
232
bool SvxShowCharSet::isFavChar(std::u16string_view sTitle, std::u16string_view rFont)
233
0
{
234
0
    assert(maFavCharList.size() == maFavCharFontList.size());
235
0
    for (size_t i = 0; i < maFavCharList.size(); i++)
236
0
    {
237
0
        if (maFavCharList[i] == sTitle && maFavCharFontList[i] == rFont)
238
0
            return true;
239
0
    }
240
0
    return false;
241
0
}
242
243
void SvxShowCharSet::createContextMenu(const Point& rPosition)
244
0
{
245
0
    std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDrawingArea(), u"svx/ui/charsetmenu.ui"_ustr));
246
0
    std::unique_ptr<weld::Menu> xItemMenu(xBuilder->weld_menu(u"charsetmenu"_ustr));
247
248
0
    sal_UCS4 cChar = GetSelectCharacter();
249
0
    OUString aOUStr( &cChar, 1 );
250
0
    if (isFavChar(aOUStr, mxVirDev->GetFont().GetFamilyName()) || maFavCharList.size() >= 16)
251
0
        xItemMenu->set_visible(u"add"_ustr, false);
252
0
    else
253
0
        xItemMenu->set_visible(u"remove"_ustr, false);
254
255
0
    ContextMenuSelect(xItemMenu->popup_at_rect(GetDrawingArea(), tools::Rectangle(rPosition, Size(1,1))));
256
0
    GrabFocus();
257
0
    Invalidate();
258
0
}
259
260
void SvxShowCharSet::ContextMenuSelect(std::u16string_view rIdent)
261
0
{
262
0
    sal_UCS4 cChar = GetSelectCharacter();
263
0
    OUString aOUStr(&cChar, 1);
264
265
0
    if (rIdent == u"insert")
266
0
        maDoubleClkHdl.Call(this);
267
0
    else if (rIdent == u"add" || rIdent == u"remove")
268
0
    {
269
0
        updateFavCharacterList(aOUStr, mxVirDev->GetFont().GetFamilyName());
270
0
        maFavClickHdl.Call(this);
271
0
    }
272
0
    else if (rIdent == u"copy")
273
0
        CopyToClipboard(aOUStr);
274
0
}
275
276
void SvxShowCharSet::CopyToClipboard(const OUString& rOUStr)
277
0
{
278
0
    css::uno::Reference<css::datatransfer::clipboard::XClipboard> xClipboard =
279
0
        css::datatransfer::clipboard::SystemClipboard::create(comphelper::getProcessComponentContext());
280
281
0
    if (!xClipboard.is())
282
0
        return;
283
284
0
    rtl::Reference<TETextDataObject> pDataObj = new TETextDataObject(rOUStr);
285
286
0
    try
287
0
    {
288
0
        xClipboard->setContents( pDataObj, nullptr );
289
290
0
        css::uno::Reference<css::datatransfer::clipboard::XFlushableClipboard> xFlushableClipboard(xClipboard, css::uno::UNO_QUERY);
291
0
        if( xFlushableClipboard.is() )
292
0
            xFlushableClipboard->flushClipboard();
293
0
    }
294
0
    catch( const css::uno::Exception& )
295
0
    {
296
0
    }
297
0
}
298
299
void SvxShowCharSet::updateFavCharacterList(const OUString& sTitle, const OUString& rFont)
300
0
{
301
0
    if (isFavChar(sTitle, rFont))
302
0
    {
303
0
        assert(maFavCharList.size() == maFavCharFontList.size());
304
0
        auto fontIt = maFavCharFontList.begin();
305
0
        for (auto charIt = maFavCharList.begin(); charIt != maFavCharList.end(); charIt++)
306
0
        {
307
0
            if (*charIt == sTitle && *fontIt == rFont)
308
0
            {
309
0
                maFavCharList.erase(charIt);
310
0
                maFavCharFontList.erase(fontIt);
311
0
                break;
312
0
            }
313
0
            fontIt++;
314
0
        }
315
0
    }
316
0
    else
317
0
    {
318
0
        if (maFavCharList.size() == 16)
319
0
        {
320
0
            maFavCharList.pop_back();
321
0
            maFavCharFontList.pop_back();
322
0
        }
323
324
0
        maFavCharList.push_back(sTitle);
325
0
        maFavCharFontList.push_back(rFont);
326
0
    }
327
328
0
    css::uno::Sequence< OUString > aFavCharList(maFavCharList.size());
329
0
    auto aFavCharListRange = asNonConstRange(aFavCharList);
330
0
    css::uno::Sequence< OUString > aFavCharFontList(maFavCharFontList.size());
331
0
    auto aFavCharFontListRange = asNonConstRange(aFavCharFontList);
332
333
0
    for (size_t i = 0; i < maFavCharList.size(); ++i)
334
0
    {
335
0
        aFavCharListRange[i] = maFavCharList[i];
336
0
        aFavCharFontListRange[i] = maFavCharFontList[i];
337
0
    }
338
339
0
    std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create());
340
0
    officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterList::set(aFavCharList, batch);
341
0
    officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterFontList::set(aFavCharFontList, batch);
342
0
    batch->commit();
343
0
}
344
345
sal_uInt16 SvxShowCharSet::GetColumnPos(sal_uInt16 _nPos)
346
0
{
347
0
    return _nPos % COLUMN_COUNT ;
348
0
}
349
350
int SvxShowCharSet::FirstInView() const
351
0
{
352
0
    return mxScrollArea->vadjustment_get_value() * COLUMN_COUNT;
353
0
}
354
355
int SvxShowCharSet::LastInView() const
356
0
{
357
0
    sal_uInt32 nIndex = FirstInView();
358
0
    nIndex += ROW_COUNT * COLUMN_COUNT - 1;
359
0
    sal_uInt32 nCompare = mxFontCharMap->GetCharCount() - 1;
360
0
    if (nIndex > nCompare)
361
0
        nIndex = nCompare;
362
0
    return nIndex;
363
0
}
364
365
Point SvxShowCharSet::MapIndexToPixel( int nIndex ) const
366
0
{
367
0
    const int nBase = FirstInView();
368
0
    int x = ((nIndex - nBase) % COLUMN_COUNT) * mnX;
369
0
    int y = ((nIndex - nBase) / COLUMN_COUNT) * mnY;
370
0
    return Point( x + m_nXGap, y + m_nYGap );
371
0
}
372
373
374
int SvxShowCharSet::PixelToMapIndex( const Point& point) const
375
0
{
376
0
    int nBase = FirstInView();
377
0
    assert(mnX != 0);
378
0
    int x = mnX == 0 ? 0 : (point.X() - m_nXGap)/mnX;
379
0
    assert(mnY != 0);
380
0
    int y = mnY == 0 ? 0 : (point.Y() - m_nYGap)/mnY;
381
0
    return (nBase + x + y * COLUMN_COUNT);
382
0
}
383
384
bool SvxShowCharSet::KeyInput(const KeyEvent& rKEvt)
385
0
{
386
0
    vcl::KeyCode aCode = rKEvt.GetKeyCode();
387
388
0
    if (aCode.GetModifier())
389
0
        return false;
390
391
0
    bool bRet = true;
392
393
0
    int tmpSelected = mnSelectedIndex;
394
395
0
    switch (aCode.GetCode())
396
0
    {
397
0
        case KEY_RETURN:
398
0
            m_aReturnKeypressHdl.Call(this);
399
0
            return true;
400
0
        case KEY_SPACE:
401
0
            maDoubleClkHdl.Call(this);
402
0
            return true;
403
0
        case KEY_LEFT:
404
0
            --tmpSelected;
405
0
            break;
406
0
        case KEY_RIGHT:
407
0
            ++tmpSelected;
408
0
            break;
409
0
        case KEY_UP:
410
0
            tmpSelected -= COLUMN_COUNT;
411
0
            break;
412
0
        case KEY_DOWN:
413
0
            tmpSelected += COLUMN_COUNT;
414
0
            break;
415
0
        case KEY_PAGEUP:
416
0
            tmpSelected -= ROW_COUNT * COLUMN_COUNT;
417
0
            break;
418
0
        case KEY_PAGEDOWN:
419
0
            tmpSelected += ROW_COUNT * COLUMN_COUNT;
420
0
            break;
421
0
        case KEY_HOME:
422
0
            tmpSelected = 0;
423
0
            break;
424
0
        case KEY_END:
425
0
            tmpSelected = mxFontCharMap->GetCharCount() - 1;
426
0
            break;
427
0
        case KEY_TAB:   // some fonts have a character at these unicode control codes
428
0
        case KEY_ESCAPE:
429
0
            tmpSelected = - 1;  // mark as invalid
430
0
            bRet = false;
431
0
            break;
432
0
        default:
433
0
        {
434
0
            sal_UCS4 cChar = rKEvt.GetCharCode();
435
0
            sal_UCS4 cNext = mxFontCharMap->GetNextChar(cChar - 1);
436
0
            tmpSelected = mxFontCharMap->GetIndexFromChar(cNext);
437
0
            if (tmpSelected < 0 || (cChar != cNext))
438
0
            {
439
0
                tmpSelected = - 1;  // mark as invalid
440
0
                bRet = false;
441
0
            }
442
0
            break;
443
0
        }
444
0
    }
445
446
0
    if ( tmpSelected >= 0 )
447
0
    {
448
0
        SelectIndex( tmpSelected, true );
449
0
        maPreSelectHdl.Call( this );
450
0
    }
451
452
0
    return bRet;
453
0
}
454
455
void SvxShowCharSet::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
456
0
{
457
0
    InitSettings(rRenderContext);
458
0
    RecalculateFont(rRenderContext);
459
0
    DrawChars_Impl(rRenderContext, FirstInView(), LastInView());
460
0
}
461
462
void SvxShowCharSet::SetFont( const vcl::Font& rFont )
463
0
{
464
0
    maFont = rFont;
465
0
    mbRecalculateFont = true;
466
0
    Invalidate();
467
0
}
468
469
void SvxShowCharSet::DeSelect()
470
0
{
471
0
    Invalidate();
472
0
}
473
474
// stretch a grid rectangle if it's at the edge to fill unused space
475
tools::Rectangle SvxShowCharSet::getGridRectangle(const Point &rPointUL, const Size &rOutputSize) const
476
0
{
477
0
    tools::Long x = rPointUL.X() - 1;
478
0
    tools::Long y = rPointUL.Y() - 1;
479
0
    Point aPointUL(x+1, y+1);
480
0
    Size aGridSize(mnX-1, mnY-1);
481
482
0
    tools::Long nXDistFromLeft = x - m_nXGap;
483
0
    if (nXDistFromLeft <= 1)
484
0
    {
485
0
        aPointUL.setX( 1 );
486
0
        aGridSize.AdjustWidth(m_nXGap + nXDistFromLeft );
487
0
    }
488
0
    tools::Long nXDistFromRight = rOutputSize.Width() - m_nXGap - mnX - x;
489
0
    if (nXDistFromRight <= 1)
490
0
        aGridSize.AdjustWidth(m_nXGap + nXDistFromRight );
491
492
0
    tools::Long nXDistFromTop = y - m_nYGap;
493
0
    if (nXDistFromTop <= 1)
494
0
    {
495
0
        aPointUL.setY( 1 );
496
0
        aGridSize.AdjustHeight(m_nYGap + nXDistFromTop );
497
0
    }
498
0
    tools::Long nXDistFromBottom = rOutputSize.Height() - m_nYGap - mnY - y;
499
0
    if (nXDistFromBottom <= 1)
500
0
        aGridSize.AdjustHeight(m_nYGap + nXDistFromBottom );
501
502
0
    return tools::Rectangle(aPointUL, aGridSize);
503
0
}
504
505
void SvxShowCharSet::DrawChars_Impl(vcl::RenderContext& rRenderContext, int n1, int n2)
506
0
{
507
0
    if (n1 > LastInView() || n2 < FirstInView())
508
0
        return;
509
510
0
    Size aOutputSize(GetOutputSizePixel());
511
512
0
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
513
0
    const Color aWindowTextColor(rStyleSettings.GetFieldTextColor());
514
0
    Color aHighlightColor(rStyleSettings.GetHighlightColor());
515
0
    Color aHighlightTextColor(rStyleSettings.GetHighlightTextColor());
516
0
    Color aFaceColor(rStyleSettings.GetFaceColor());
517
0
    Color aLightColor(rStyleSettings.GetLightColor());
518
0
    Color aShadowColor(rStyleSettings.GetShadowColor());
519
520
0
    int i;
521
0
    rRenderContext.SetLineColor(aShadowColor);
522
0
    for (i = 1; i < COLUMN_COUNT; ++i)
523
0
    {
524
0
        rRenderContext.DrawLine(Point(mnX * i + m_nXGap, 0),
525
0
                          Point(mnX * i + m_nXGap, aOutputSize.Height()));
526
0
    }
527
0
    for (i = 1; i < ROW_COUNT; ++i)
528
0
    {
529
0
        rRenderContext.DrawLine(Point(0, mnY * i + m_nYGap),
530
0
                                Point(aOutputSize.Width(), mnY * i + m_nYGap));
531
0
    }
532
533
0
    int nTextHeight = rRenderContext.GetTextHeight();
534
0
    tools::Rectangle aBoundRect;
535
0
    for (i = n1; i <= n2; ++i)
536
0
    {
537
0
        sal_UCS4 charValue = GetCharFromIndex(i);
538
539
0
        if (charValue == 0)
540
0
            continue;
541
542
0
        OUString aCharStr(&charValue, 1);
543
544
0
        Point pix = MapIndexToPixel(i);
545
0
        int x = pix.X();
546
0
        int y = pix.Y();
547
548
0
        int nTextWidth = rRenderContext.GetTextWidth(aCharStr);
549
0
        int tx = x + (mnX - nTextWidth + 1) / 2;
550
0
        int ty = y + (mnY - nTextHeight + 1) / 2;
551
0
        Point aPointTxTy(tx, ty);
552
553
        // adjust position before it gets out of bounds
554
0
        if (rRenderContext.GetTextBoundRect(aBoundRect, aCharStr) && !aBoundRect.IsEmpty())
555
0
        {
556
            // zero advance width => use ink width to center glyph
557
0
            if (!nTextWidth)
558
0
            {
559
0
                aPointTxTy.setX( x - aBoundRect.Left() + (mnX - aBoundRect.GetWidth() + 1) / 2 );
560
0
            }
561
562
0
            aBoundRect += aPointTxTy;
563
564
            // shift back vertically if needed
565
0
            int nYLDelta = aBoundRect.Top() - y;
566
0
            int nYHDelta = (y + mnY) - aBoundRect.Bottom();
567
0
            if (nYLDelta <= 0)
568
0
                aPointTxTy.AdjustY( -(nYLDelta - 1) );
569
0
            else if (nYHDelta <= 0)
570
0
                aPointTxTy.AdjustY(nYHDelta - 1 );
571
572
            // shift back horizontally if needed
573
0
            int nXLDelta = aBoundRect.Left() - x;
574
0
            int nXHDelta = (x + mnX) - aBoundRect.Right();
575
0
            if (nXLDelta <= 0)
576
0
                aPointTxTy.AdjustX( -(nXLDelta - 1) );
577
0
            else if (nXHDelta <= 0)
578
0
                aPointTxTy.AdjustX(nXHDelta - 1 );
579
0
        }
580
581
        // tdf#109214 - highlight the favorite characters
582
0
        if (isFavChar(aCharStr, mxVirDev->GetFont().GetFamilyName()))
583
0
        {
584
0
            const Color aLineCol = rRenderContext.GetLineColor();
585
0
            rRenderContext.SetLineColor(aHighlightColor);
586
0
            rRenderContext.SetFillColor();
587
            // Outer border
588
0
            rRenderContext.DrawRect(tools::Rectangle(Point(x - 1, y - 1), Size(mnX + 3, mnY + 3)), 1, 1);
589
            // Inner border
590
0
            rRenderContext.DrawRect(tools::Rectangle(Point(x, y), Size(mnX + 1, mnY + 1)), 1, 1);
591
0
            rRenderContext.SetLineColor(aLineCol);
592
0
        }
593
594
0
        Color aTextCol = rRenderContext.GetTextColor();
595
0
        if (i != mnSelectedIndex)
596
0
        {
597
0
            rRenderContext.SetTextColor(aWindowTextColor);
598
0
            rRenderContext.DrawText(aPointTxTy, aCharStr);
599
0
        }
600
0
        else
601
0
        {
602
0
            Color aLineCol = rRenderContext.GetLineColor();
603
0
            rRenderContext.SetLineColor();
604
0
            Point aPointUL(x + 1, y + 1);
605
0
            if (HasFocus())
606
0
            {
607
0
                rRenderContext.SetFillColor(aHighlightColor);
608
0
                rRenderContext.DrawRect(getGridRectangle(aPointUL, aOutputSize));
609
610
0
                rRenderContext.SetTextColor(aHighlightTextColor);
611
0
                rRenderContext.DrawText(aPointTxTy, aCharStr);
612
0
            }
613
0
            else
614
0
            {
615
0
                rRenderContext.SetFillColor(aFaceColor);
616
0
                rRenderContext.DrawRect(getGridRectangle(aPointUL, aOutputSize));
617
618
0
                rRenderContext.SetLineColor(aLightColor);
619
0
                rRenderContext.DrawLine(aPointUL, Point(x + mnX - 1, y + 1));
620
0
                rRenderContext.DrawLine(aPointUL, Point(x + 1, y + mnY - 1));
621
622
0
                rRenderContext.SetLineColor(aShadowColor);
623
0
                rRenderContext.DrawLine(Point(x + 1, y + mnY - 1), Point(x + mnX - 1, y + mnY - 1));
624
0
                rRenderContext.DrawLine(Point(x + mnX - 1, y + mnY - 1), Point(x + mnX - 1, y + 1));
625
626
0
                rRenderContext.DrawText(aPointTxTy, aCharStr);
627
0
            }
628
0
            rRenderContext.SetLineColor(aLineCol);
629
0
        }
630
0
        rRenderContext.SetTextColor(aTextCol);
631
0
    }
632
633
    // tdf#141319 - mark empty/unused cells
634
0
    if (n2 - n1 < ROW_COUNT * COLUMN_COUNT)
635
0
    {
636
0
        rRenderContext.SetFillColor(rStyleSettings.GetDisableColor());
637
0
        for (i = n2 - n1 + 1; i < ROW_COUNT * COLUMN_COUNT; i++)
638
0
        {
639
0
            rRenderContext.DrawRect(
640
0
                tools::Rectangle(MapIndexToPixel(i + n1), Size(mnX + 2, mnY + 2)));
641
0
        }
642
0
    }
643
0
}
644
645
646
void SvxShowCharSet::InitSettings(vcl::RenderContext& rRenderContext)
647
0
{
648
0
    const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
649
650
0
    if (mbUpdateForeground)
651
0
    {
652
0
        rRenderContext.SetTextColor(rStyleSettings.GetDialogTextColor());
653
0
        mbUpdateForeground = false;
654
0
    }
655
656
0
    if (mbUpdateBackground)
657
0
    {
658
0
        rRenderContext.SetBackground(rStyleSettings.GetWindowColor());
659
0
        rRenderContext.Erase();
660
0
        mbUpdateBackground = false;
661
0
    }
662
663
0
    vcl::Font aFont(maFont);
664
0
    aFont.SetWeight(WEIGHT_LIGHT);
665
0
    aFont.SetAlignment(ALIGN_TOP);
666
0
    aFont.SetFontSize(maFontSize);
667
0
    aFont.SetTransparent(true);
668
0
    rRenderContext.SetFont(aFont);
669
0
}
670
671
sal_UCS4 SvxShowCharSet::GetSelectCharacter() const
672
0
{
673
0
    if( mnSelectedIndex >= 0 )
674
0
        getSelectedChar() = mxFontCharMap->GetCharFromIndex( mnSelectedIndex );
675
0
    return getSelectedChar();
676
0
}
677
678
sal_UCS4 SvxShowCharSet::GetCharFromIndex(int index) const
679
0
{
680
0
    return mxFontCharMap->GetCharFromIndex(index);
681
0
}
682
683
void SvxShowCharSet::RecalculateFont(vcl::RenderContext& rRenderContext)
684
0
{
685
0
    if (!mbRecalculateFont)
686
0
        return;
687
688
    // save last selected unicode
689
0
    if (mnSelectedIndex >= 0)
690
0
        getSelectedChar() = mxFontCharMap->GetCharFromIndex(mnSelectedIndex);
691
692
0
    Size aSize(GetOutputSizePixel());
693
694
0
    vcl::Font aFont = maFont;
695
0
    aFont.SetWeight(WEIGHT_LIGHT);
696
0
    aFont.SetAlignment(ALIGN_TOP);
697
0
    int nFontHeight = (aSize.Height() - 5) * 2 / (3 * ROW_COUNT);
698
0
    maFontSize = rRenderContext.PixelToLogic(Size(0, nFontHeight));
699
0
    aFont.SetFontSize(maFontSize);
700
0
    aFont.SetTransparent(true);
701
0
    rRenderContext.SetFont(aFont);
702
0
    rRenderContext.GetFontCharMap(mxFontCharMap);
703
0
    m_aItems.clear();
704
0
    getFavCharacterList();
705
706
0
    mnX = aSize.Width() / COLUMN_COUNT;
707
0
    mnY = aSize.Height() / ROW_COUNT;
708
709
0
    const int nLastRow = (mxFontCharMap->GetCharCount() - 1 + COLUMN_COUNT) / COLUMN_COUNT;
710
0
    mxScrollArea->vadjustment_configure(mxScrollArea->vadjustment_get_value(), nLastRow, 1,
711
0
                                        ROW_COUNT - 1, ROW_COUNT);
712
713
    // restore last selected unicode
714
0
    int nMapIndex = mxFontCharMap->GetIndexFromChar(getSelectedChar());
715
0
    if (nMapIndex != mnSelectedIndex)
716
0
        SelectIndex(nMapIndex);
717
718
    // rearrange CharSet element in sync with nX- and nY-multiples
719
0
    Size aDrawSize(mnX * COLUMN_COUNT, mnY * ROW_COUNT);
720
0
    m_nXGap = (aSize.Width() - aDrawSize.Width()) / 2;
721
0
    m_nYGap = (aSize.Height() - aDrawSize.Height()) / 2;
722
723
0
    mbRecalculateFont = false;
724
0
}
725
726
void SvxShowCharSet::SelectIndex(int nNewIndex, bool bFocus)
727
0
{
728
0
    if (!mxFontCharMap.is())
729
0
        RecalculateFont(*mxVirDev);
730
731
0
    if( nNewIndex < 0 )
732
0
    {
733
        // need to scroll see closest unicode
734
0
        sal_UCS4 cPrev = mxFontCharMap->GetPrevChar( getSelectedChar() );
735
0
        int nMapIndex = mxFontCharMap->GetIndexFromChar( cPrev );
736
0
        int nNewPos = nMapIndex / COLUMN_COUNT;
737
0
        mxScrollArea->vadjustment_set_value(nNewPos);
738
0
        mnSelectedIndex = bFocus ? nMapIndex+1 : -1;
739
0
        Invalidate();
740
0
    }
741
0
    else if( nNewIndex < FirstInView() )
742
0
    {
743
        // need to scroll up to see selected item
744
0
        int nOldPos = mxScrollArea->vadjustment_get_value();
745
0
        int nDelta = (FirstInView() - nNewIndex + COLUMN_COUNT-1) / COLUMN_COUNT;
746
0
        mxScrollArea->vadjustment_set_value(nOldPos - nDelta);
747
0
        mnSelectedIndex = nNewIndex;
748
0
        Invalidate();
749
0
    }
750
0
    else if( nNewIndex > LastInView() )
751
0
    {
752
        // need to scroll down to see selected item
753
0
        int nOldPos = mxScrollArea->vadjustment_get_value();
754
0
        int nDelta = (nNewIndex - LastInView() + COLUMN_COUNT) / COLUMN_COUNT;
755
0
        mxScrollArea->vadjustment_set_value(nOldPos + nDelta);
756
0
        if( nNewIndex < mxFontCharMap->GetCharCount() )
757
0
        {
758
0
            mnSelectedIndex = nNewIndex;
759
0
            Invalidate();
760
0
        }
761
0
        else if (nOldPos != mxScrollArea->vadjustment_get_value())
762
0
        {
763
0
            Invalidate();
764
0
        }
765
0
    }
766
0
    else
767
0
    {
768
0
        mnSelectedIndex = nNewIndex;
769
0
        Invalidate();
770
0
    }
771
772
0
    if( mnSelectedIndex >= 0 )
773
0
    {
774
0
        getSelectedChar() = mxFontCharMap->GetCharFromIndex( mnSelectedIndex );
775
0
#if !ENABLE_WASM_STRIP_ACCESSIBILITY
776
0
        if( m_xAccessible.is() )
777
0
        {
778
0
            svx::SvxShowCharSetItem* pItem = ImplGetItem(mnSelectedIndex);
779
0
            rtl::Reference<svx::SvxShowCharSetItemAcc> xItemAcc = pItem->GetAccessible();
780
            // Don't fire the focus event.
781
0
            if ( bFocus )
782
0
                m_xAccessible->fireEvent( AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, Any(),
783
0
                                Any(uno::Reference<XAccessible>(xItemAcc)) ); // this call assures that m_pItem is set
784
0
            else
785
0
                m_xAccessible->fireEvent( AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, Any(),
786
0
                                Any(uno::Reference<XAccessible>(xItemAcc)) ); // this call assures that m_pItem is set
787
788
0
            assert(pItem->m_xItem.is() && "No accessible created!");
789
0
            Any aOldAny, aNewAny;
790
0
            aNewAny <<= AccessibleStateType::FOCUSED;
791
            // Don't fire the focus event.
792
0
            if ( bFocus )
793
0
                pItem->m_xItem->fireEvent( AccessibleEventId::STATE_CHANGED, aOldAny, aNewAny );
794
795
0
            aNewAny <<= AccessibleStateType::SELECTED;
796
0
            pItem->m_xItem->fireEvent( AccessibleEventId::STATE_CHANGED, aOldAny, aNewAny );
797
0
        }
798
0
        maSelectHdl.Call(this);
799
0
#endif
800
0
    }
801
0
    maHighHdl.Call( this );
802
0
}
803
804
void SvxShowCharSet::OutputIndex( int nNewIndex )
805
0
{
806
0
    SelectIndex( nNewIndex, true );
807
0
    maSelectHdl.Call( this );
808
0
}
809
810
811
void SvxShowCharSet::SelectCharacter( sal_UCS4 cNew )
812
0
{
813
0
    if ( !mxFontCharMap.is() )
814
0
        RecalculateFont(*mxVirDev);
815
816
    // get next available char of current font
817
0
    sal_UCS4 cNext = mxFontCharMap->GetNextChar( (cNew > 0) ? cNew - 1 : cNew );
818
819
0
    int nMapIndex = mxFontCharMap->GetIndexFromChar( cNext );
820
0
    SelectIndex( nMapIndex );
821
    // move selected item to top row if not in focus
822
0
    mxScrollArea->vadjustment_set_value(nMapIndex / COLUMN_COUNT);
823
0
    Invalidate();
824
0
}
825
826
IMPL_LINK_NOARG(SvxShowCharSet, VscrollHdl, weld::ScrolledWindow&, void)
827
0
{
828
0
    if( mnSelectedIndex < FirstInView() )
829
0
    {
830
0
        SelectIndex( FirstInView() + (mnSelectedIndex % COLUMN_COUNT) );
831
0
    }
832
0
    else if( mnSelectedIndex > LastInView() )
833
0
    {
834
0
#if !ENABLE_WASM_STRIP_ACCESSIBILITY
835
0
        if( m_xAccessible.is() )
836
0
        {
837
0
            css::uno::Any aOldAny, aNewAny;
838
0
            int nLast = LastInView();
839
0
            for ( ; nLast != mnSelectedIndex; ++nLast)
840
0
            {
841
0
                aOldAny <<= uno::Reference<XAccessible>(ImplGetItem(nLast)->GetAccessible());
842
0
                m_xAccessible ->fireEvent( AccessibleEventId::CHILD, aOldAny, aNewAny );
843
0
            }
844
0
        }
845
0
#endif
846
0
        SelectIndex( (LastInView() - COLUMN_COUNT + 1) + (mnSelectedIndex % COLUMN_COUNT) );
847
0
    }
848
849
0
    Invalidate();
850
0
}
851
852
SvxShowCharSet::~SvxShowCharSet()
853
0
{
854
0
#if !ENABLE_WASM_STRIP_ACCESSIBILITY
855
0
    if (m_xAccessible.is())
856
0
    {
857
0
        m_aItems.clear();
858
0
        m_xAccessible->clearCharSetControl();
859
0
        m_xAccessible.clear();
860
0
    }
861
0
#endif
862
0
}
863
864
rtl::Reference<comphelper::OAccessible> SvxShowCharSet::CreateAccessible()
865
0
{
866
0
#if !ENABLE_WASM_STRIP_ACCESSIBILITY
867
0
    OSL_ENSURE(!m_xAccessible.is(),"Accessible already created!");
868
0
    m_xAccessible = new svx::SvxShowCharSetAcc(this);
869
0
#endif
870
0
    return m_xAccessible;
871
0
}
872
873
svx::SvxShowCharSetItem* SvxShowCharSet::ImplGetItem( int _nPos )
874
0
{
875
0
    ItemsMap::iterator aFind = m_aItems.find(_nPos);
876
0
    if ( aFind == m_aItems.end() )
877
0
    {
878
0
#if !ENABLE_WASM_STRIP_ACCESSIBILITY
879
0
        OSL_ENSURE(m_xAccessible.is(), "Who wants to create a child of my table without a parent?");
880
0
#endif
881
0
        auto xItem = std::make_shared<svx::SvxShowCharSetItem>(*this,
882
0
            m_xAccessible.get(), sal::static_int_cast< sal_uInt16 >(_nPos));
883
0
        aFind = m_aItems.emplace(_nPos, xItem).first;
884
0
        OUStringBuffer buf;
885
0
        buf.appendUtf32( mxFontCharMap->GetCharFromIndex( _nPos ) );
886
0
        aFind->second->maText = buf.makeStringAndClear();
887
0
        Point pix = MapIndexToPixel( _nPos );
888
0
        aFind->second->maRect = tools::Rectangle( Point( pix.X() + 1, pix.Y() + 1 ), Size(mnX-1,mnY-1) );
889
0
    }
890
891
0
    return aFind->second.get();
892
0
}
893
894
sal_Int32 SvxShowCharSet::getMaxCharCount() const
895
0
{
896
0
    return mxFontCharMap->GetCharCount();
897
0
}
898
899
FontCharMapRef const & SvxShowCharSet::GetFontCharMap()
900
0
{
901
0
    RecalculateFont(*mxVirDev);
902
0
    return mxFontCharMap;
903
0
}
904
905
// TODO: should be moved into Font Attributes stuff
906
// we let it mature here though because it is currently the only use
907
908
SubsetMap::SubsetMap( const FontCharMapRef& rxFontCharMap )
909
0
{
910
0
    InitList();
911
0
    ApplyCharMap(rxFontCharMap);
912
0
}
913
914
const SubsetVec& SubsetMap::GetSubsetMap() const
915
0
{
916
0
    return maSubsets;
917
0
}
918
919
const Subset* SubsetMap::GetSubsetByUnicode( sal_UCS4 cChar ) const
920
0
{
921
0
    for (auto const& subset : maSubsets)
922
0
        if( (subset.GetRangeMin() <= cChar) && (cChar <= subset.GetRangeMax()) )
923
0
            return &subset;
924
0
    return nullptr;
925
0
}
926
927
inline Subset::Subset(sal_UCS4 nMin, sal_UCS4 nMax, OUString aName)
928
0
:   mnRangeMin(nMin), mnRangeMax(nMax), maRangeName(std::move(aName))
929
0
{
930
0
}
931
932
void SubsetMap::InitList()
933
0
{
934
0
    static SubsetVec s_aAllSubsets = []()
935
0
    {
936
0
        SubsetVec aAllSubsets;
937
        //I wish icu had a way to give me the block ranges
938
0
        for (int i = UBLOCK_BASIC_LATIN; i < UBLOCK_COUNT; ++i)
939
0
        {
940
0
            UBlockCode eBlock = static_cast<UBlockCode>(i);
941
0
            switch (eBlock)
942
0
            {
943
0
                case UBLOCK_NO_BLOCK:
944
0
                case UBLOCK_INVALID_CODE:
945
0
                case UBLOCK_COUNT:
946
0
                case UBLOCK_HIGH_SURROGATES:
947
0
                case UBLOCK_HIGH_PRIVATE_USE_SURROGATES:
948
0
                case UBLOCK_LOW_SURROGATES:
949
0
                    break;
950
0
                case UBLOCK_BASIC_LATIN:
951
0
                    aAllSubsets.emplace_back( 0x0000, 0x007F, SvxResId(RID_SUBSETSTR_BASIC_LATIN) );
952
0
                    break;
953
0
                case UBLOCK_LATIN_1_SUPPLEMENT:
954
0
                    aAllSubsets.emplace_back( 0x0080, 0x00FF, SvxResId(RID_SUBSETSTR_LATIN_1_SUPPLEMENT) );
955
0
                    break;
956
0
                case UBLOCK_LATIN_EXTENDED_A:
957
0
                    aAllSubsets.emplace_back( 0x0100, 0x017F, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_A) );
958
0
                    break;
959
0
                case UBLOCK_LATIN_EXTENDED_B:
960
0
                    aAllSubsets.emplace_back( 0x0180, 0x024F, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_B) );
961
0
                    break;
962
0
                case UBLOCK_IPA_EXTENSIONS:
963
0
                    aAllSubsets.emplace_back( 0x0250, 0x02AF, SvxResId(RID_SUBSETSTR_IPA_EXTENSIONS) );
964
0
                    break;
965
0
                case UBLOCK_SPACING_MODIFIER_LETTERS:
966
0
                    aAllSubsets.emplace_back( 0x02B0, 0x02FF, SvxResId(RID_SUBSETSTR_SPACING_MODIFIERS) );
967
0
                    break;
968
0
                case UBLOCK_COMBINING_DIACRITICAL_MARKS:
969
0
                    aAllSubsets.emplace_back( 0x0300, 0x036F, SvxResId(RID_SUBSETSTR_COMB_DIACRITICAL) );
970
0
                    break;
971
0
                case UBLOCK_GREEK:
972
0
                    aAllSubsets.emplace_back( 0x0370, 0x03FF, SvxResId(RID_SUBSETSTR_GREEK) );
973
0
                    break;
974
0
                case UBLOCK_CYRILLIC:
975
0
                    aAllSubsets.emplace_back( 0x0400, 0x04FF, SvxResId(RID_SUBSETSTR_CYRILLIC) );
976
0
                    break;
977
0
                case UBLOCK_ARMENIAN:
978
0
                    aAllSubsets.emplace_back( 0x0530, 0x058F, SvxResId(RID_SUBSETSTR_ARMENIAN) );
979
0
                    break;
980
0
                case UBLOCK_HEBREW:
981
0
                    aAllSubsets.emplace_back( 0x0590, 0x05FF, SvxResId(RID_SUBSETSTR_BASIC_HEBREW) );
982
0
                    break;
983
0
                case UBLOCK_ARABIC:
984
0
                    aAllSubsets.emplace_back( 0x0600, 0x065F, SvxResId(RID_SUBSETSTR_BASIC_ARABIC) );
985
0
                    break;
986
0
                case UBLOCK_SYRIAC:
987
0
                    aAllSubsets.emplace_back( 0x0700, 0x074F, SvxResId(RID_SUBSETSTR_SYRIAC) );
988
0
                    break;
989
0
                case UBLOCK_THAANA:
990
0
                    aAllSubsets.emplace_back( 0x0780, 0x07BF, SvxResId(RID_SUBSETSTR_THAANA) );
991
0
                    break;
992
0
                case UBLOCK_DEVANAGARI:
993
0
                    aAllSubsets.emplace_back( 0x0900, 0x097F, SvxResId(RID_SUBSETSTR_DEVANAGARI) );
994
0
                    break;
995
0
                case UBLOCK_BENGALI:
996
0
                    aAllSubsets.emplace_back( 0x0980, 0x09FF, SvxResId(RID_SUBSETSTR_BENGALI) );
997
0
                    break;
998
0
                case UBLOCK_GURMUKHI:
999
0
                    aAllSubsets.emplace_back( 0x0A00, 0x0A7F, SvxResId(RID_SUBSETSTR_GURMUKHI) );
1000
0
                    break;
1001
0
                case UBLOCK_GUJARATI:
1002
0
                    aAllSubsets.emplace_back( 0x0A80, 0x0AFF, SvxResId(RID_SUBSETSTR_GUJARATI) );
1003
0
                    break;
1004
0
                case UBLOCK_ORIYA:
1005
0
                    aAllSubsets.emplace_back( 0x0B00, 0x0B7F, SvxResId(RID_SUBSETSTR_ODIA) );
1006
0
                    break;
1007
0
                case UBLOCK_TAMIL:
1008
0
                    aAllSubsets.emplace_back( 0x0B80, 0x0BFF, SvxResId(RID_SUBSETSTR_TAMIL) );
1009
0
                    break;
1010
0
                case UBLOCK_TELUGU:
1011
0
                    aAllSubsets.emplace_back( 0x0C00, 0x0C7F, SvxResId(RID_SUBSETSTR_TELUGU) );
1012
0
                    break;
1013
0
                case UBLOCK_KANNADA:
1014
0
                    aAllSubsets.emplace_back( 0x0C80, 0x0CFF, SvxResId(RID_SUBSETSTR_KANNADA) );
1015
0
                    break;
1016
0
                case UBLOCK_MALAYALAM:
1017
0
                    aAllSubsets.emplace_back( 0x0D00, 0x0D7F, SvxResId(RID_SUBSETSTR_MALAYALAM) );
1018
0
                    break;
1019
0
                case UBLOCK_SINHALA:
1020
0
                    aAllSubsets.emplace_back( 0x0D80, 0x0DFF, SvxResId(RID_SUBSETSTR_SINHALA) );
1021
0
                    break;
1022
0
                case UBLOCK_THAI:
1023
0
                    aAllSubsets.emplace_back( 0x0E00, 0x0E7F, SvxResId(RID_SUBSETSTR_THAI) );
1024
0
                    break;
1025
0
                case UBLOCK_LAO:
1026
0
                    aAllSubsets.emplace_back( 0x0E80, 0x0EFF, SvxResId(RID_SUBSETSTR_LAO) );
1027
0
                    break;
1028
0
                case UBLOCK_TIBETAN:
1029
0
                    aAllSubsets.emplace_back( 0x0F00, 0x0FBF, SvxResId(RID_SUBSETSTR_TIBETAN) );
1030
0
                    break;
1031
0
                case UBLOCK_MYANMAR:
1032
0
                    aAllSubsets.emplace_back( 0x1000, 0x109F, SvxResId(RID_SUBSETSTR_MYANMAR) );
1033
0
                    break;
1034
0
                case UBLOCK_GEORGIAN:
1035
0
                    aAllSubsets.emplace_back( 0x10A0, 0x10FF, SvxResId(RID_SUBSETSTR_BASIC_GEORGIAN) );
1036
0
                    break;
1037
0
                case UBLOCK_HANGUL_JAMO:
1038
0
                    aAllSubsets.emplace_back( 0x1100, 0x11FF, SvxResId(RID_SUBSETSTR_HANGUL_JAMO) );
1039
0
                    break;
1040
0
                case UBLOCK_ETHIOPIC:
1041
0
                    aAllSubsets.emplace_back( 0x1200, 0x137F, SvxResId(RID_SUBSETSTR_ETHIOPIC) );
1042
0
                    break;
1043
0
                case UBLOCK_CHEROKEE:
1044
0
                    aAllSubsets.emplace_back( 0x13A0, 0x13FF, SvxResId(RID_SUBSETSTR_CHEROKEE) );
1045
0
                    break;
1046
0
                case UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS:
1047
0
                    aAllSubsets.emplace_back( 0x1400, 0x167F, SvxResId(RID_SUBSETSTR_CANADIAN_ABORIGINAL) );
1048
0
                    break;
1049
0
                case UBLOCK_OGHAM:
1050
0
                    aAllSubsets.emplace_back( 0x1680, 0x169F, SvxResId(RID_SUBSETSTR_OGHAM) );
1051
0
                    break;
1052
0
                case UBLOCK_RUNIC:
1053
0
                    aAllSubsets.emplace_back( 0x16A0, 0x16F0, SvxResId(RID_SUBSETSTR_RUNIC) );
1054
0
                    break;
1055
0
                case UBLOCK_KHMER:
1056
0
                    aAllSubsets.emplace_back( 0x1780, 0x17FF, SvxResId(RID_SUBSETSTR_KHMER) );
1057
0
                    break;
1058
0
                case UBLOCK_MONGOLIAN:
1059
0
                    aAllSubsets.emplace_back( 0x1800, 0x18AF, SvxResId(RID_SUBSETSTR_MONGOLIAN) );
1060
0
                    break;
1061
0
                case UBLOCK_LATIN_EXTENDED_ADDITIONAL:
1062
0
                    aAllSubsets.emplace_back( 0x1E00, 0x1EFF, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_ADDS) );
1063
0
                    break;
1064
0
                case UBLOCK_GREEK_EXTENDED:
1065
0
                    aAllSubsets.emplace_back( 0x1F00, 0x1FFF, SvxResId(RID_SUBSETSTR_GREEK_EXTENDED) );
1066
0
                    break;
1067
0
                case UBLOCK_GENERAL_PUNCTUATION:
1068
0
                    aAllSubsets.emplace_back( 0x2000, 0x206F, SvxResId(RID_SUBSETSTR_GENERAL_PUNCTUATION) );
1069
0
                    break;
1070
0
                case UBLOCK_SUPERSCRIPTS_AND_SUBSCRIPTS:
1071
0
                    aAllSubsets.emplace_back( 0x2070, 0x209F, SvxResId(RID_SUBSETSTR_SUB_SUPER_SCRIPTS) );
1072
0
                    break;
1073
0
                case UBLOCK_CURRENCY_SYMBOLS:
1074
0
                    aAllSubsets.emplace_back( 0x20A0, 0x20CF, SvxResId(RID_SUBSETSTR_CURRENCY_SYMBOLS) );
1075
0
                    break;
1076
0
                case UBLOCK_COMBINING_MARKS_FOR_SYMBOLS:
1077
0
                    aAllSubsets.emplace_back( 0x20D0, 0x20FF, SvxResId(RID_SUBSETSTR_COMB_DIACRITIC_SYMS) );
1078
0
                    break;
1079
0
                case UBLOCK_LETTERLIKE_SYMBOLS:
1080
0
                    aAllSubsets.emplace_back( 0x2100, 0x214F, SvxResId(RID_SUBSETSTR_LETTERLIKE_SYMBOLS) );
1081
0
                    break;
1082
0
                case UBLOCK_NUMBER_FORMS:
1083
0
                    aAllSubsets.emplace_back( 0x2150, 0x218F, SvxResId(RID_SUBSETSTR_NUMBER_FORMS) );
1084
0
                    break;
1085
0
                case UBLOCK_ARROWS:
1086
0
                    aAllSubsets.emplace_back( 0x2190, 0x21FF, SvxResId(RID_SUBSETSTR_ARROWS) );
1087
0
                    break;
1088
0
                case UBLOCK_MATHEMATICAL_OPERATORS:
1089
0
                    aAllSubsets.emplace_back( 0x2200, 0x22FF, SvxResId(RID_SUBSETSTR_MATH_OPERATORS) );
1090
0
                    break;
1091
0
                case UBLOCK_MISCELLANEOUS_TECHNICAL:
1092
0
                    aAllSubsets.emplace_back( 0x2300, 0x23FF, SvxResId(RID_SUBSETSTR_MISC_TECHNICAL) );
1093
0
                    break;
1094
0
                case UBLOCK_CONTROL_PICTURES:
1095
0
                    aAllSubsets.emplace_back( 0x2400, 0x243F, SvxResId(RID_SUBSETSTR_CONTROL_PICTURES) );
1096
0
                    break;
1097
0
                case UBLOCK_OPTICAL_CHARACTER_RECOGNITION:
1098
0
                    aAllSubsets.emplace_back( 0x2440, 0x245F, SvxResId(RID_SUBSETSTR_OPTICAL_CHAR_REC) );
1099
0
                    break;
1100
0
                case UBLOCK_ENCLOSED_ALPHANUMERICS:
1101
0
                    aAllSubsets.emplace_back( 0x2460, 0x24FF, SvxResId(RID_SUBSETSTR_ENCLOSED_ALPHANUM) );
1102
0
                    break;
1103
0
                case UBLOCK_BOX_DRAWING:
1104
0
                    aAllSubsets.emplace_back( 0x2500, 0x257F, SvxResId(RID_SUBSETSTR_BOX_DRAWING) );
1105
0
                    break;
1106
0
                case UBLOCK_BLOCK_ELEMENTS:
1107
0
                    aAllSubsets.emplace_back( 0x2580, 0x259F, SvxResId(RID_SUBSETSTR_BLOCK_ELEMENTS) );
1108
0
                    break;
1109
0
                case UBLOCK_GEOMETRIC_SHAPES:
1110
0
                    aAllSubsets.emplace_back( 0x25A0, 0x25FF, SvxResId(RID_SUBSETSTR_GEOMETRIC_SHAPES) );
1111
0
                    break;
1112
0
                case UBLOCK_MISCELLANEOUS_SYMBOLS:
1113
0
                    aAllSubsets.emplace_back( 0x2600, 0x26FF, SvxResId(RID_SUBSETSTR_MISC_DINGBATS) );
1114
0
                    break;
1115
0
                case UBLOCK_DINGBATS:
1116
0
                    aAllSubsets.emplace_back( 0x2700, 0x27BF, SvxResId(RID_SUBSETSTR_DINGBATS) );
1117
0
                    break;
1118
0
                case UBLOCK_BRAILLE_PATTERNS:
1119
0
                    aAllSubsets.emplace_back( 0x2800, 0x28FF, SvxResId(RID_SUBSETSTR_BRAILLE_PATTERNS) );
1120
0
                    break;
1121
0
                case UBLOCK_CJK_RADICALS_SUPPLEMENT:
1122
0
                    aAllSubsets.emplace_back( 0x2E80, 0x2EFF, SvxResId(RID_SUBSETSTR_CJK_RADICAL_SUPPL) );
1123
0
                    break;
1124
0
                case UBLOCK_KANGXI_RADICALS:
1125
0
                    aAllSubsets.emplace_back( 0x2F00, 0x2FDF, SvxResId(RID_SUBSETSTR_KANGXI_RADICALS) );
1126
0
                    break;
1127
0
                case UBLOCK_IDEOGRAPHIC_DESCRIPTION_CHARACTERS:
1128
0
                    aAllSubsets.emplace_back( 0x2FF0, 0x2FFF, SvxResId(RID_SUBSETSTR_IDEO_DESC_CHARS) );
1129
0
                    break;
1130
0
                case UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION:
1131
0
                    aAllSubsets.emplace_back( 0x3000, 0x303F, SvxResId(RID_SUBSETSTR_CJK_SYMS_PUNCTUATION) );
1132
0
                    break;
1133
0
                case UBLOCK_HIRAGANA:
1134
0
                    aAllSubsets.emplace_back( 0x3040, 0x309F, SvxResId(RID_SUBSETSTR_HIRAGANA) );
1135
0
                    break;
1136
0
                case UBLOCK_KATAKANA:
1137
0
                    aAllSubsets.emplace_back( 0x30A0, 0x30FF, SvxResId(RID_SUBSETSTR_KATAKANA) );
1138
0
                    break;
1139
0
                case UBLOCK_BOPOMOFO:
1140
0
                    aAllSubsets.emplace_back( 0x3100, 0x312F, SvxResId(RID_SUBSETSTR_BOPOMOFO) );
1141
0
                    break;
1142
0
                case UBLOCK_HANGUL_COMPATIBILITY_JAMO:
1143
0
                    aAllSubsets.emplace_back( 0x3130, 0x318F, SvxResId(RID_SUBSETSTR_HANGUL_COMPAT_JAMO) );
1144
0
                    break;
1145
0
                case UBLOCK_KANBUN:
1146
0
                    aAllSubsets.emplace_back( 0x3190, 0x319F, SvxResId(RID_SUBSETSTR_KANBUN) );
1147
0
                    break;
1148
0
                case UBLOCK_BOPOMOFO_EXTENDED:
1149
0
                    aAllSubsets.emplace_back( 0x31A0, 0x31BF, SvxResId(RID_SUBSETSTR_BOPOMOFO_EXTENDED) );
1150
0
                    break;
1151
0
                case UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS:
1152
0
                    aAllSubsets.emplace_back( 0x3200, 0x32FF, SvxResId(RID_SUBSETSTR_ENCLOSED_CJK_LETTERS) );
1153
0
                    break;
1154
0
                case UBLOCK_CJK_COMPATIBILITY:
1155
0
                    aAllSubsets.emplace_back( 0x3300, 0x33FF, SvxResId(RID_SUBSETSTR_CJK_COMPATIBILITY) );
1156
0
                    break;
1157
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A:
1158
0
                    aAllSubsets.emplace_back( 0x3400, 0x4DBF, SvxResId(RID_SUBSETSTR_CJK_EXT_A_UNIFIED_IDGRAPH) );
1159
0
                    break;
1160
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS:
1161
0
                    aAllSubsets.emplace_back( 0x4E00, 0x9FA5, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDGRAPH) );
1162
0
                    break;
1163
0
                case UBLOCK_YI_SYLLABLES:
1164
0
                    aAllSubsets.emplace_back( 0xA000, 0xA48F, SvxResId(RID_SUBSETSTR_YI_SYLLABLES) );
1165
0
                    break;
1166
0
                case UBLOCK_YI_RADICALS:
1167
0
                    aAllSubsets.emplace_back( 0xA490, 0xA4CF, SvxResId(RID_SUBSETSTR_YI_RADICALS) );
1168
0
                    break;
1169
0
                case UBLOCK_HANGUL_SYLLABLES:
1170
0
                    aAllSubsets.emplace_back( 0xAC00, 0xD7AF, SvxResId(RID_SUBSETSTR_HANGUL) );
1171
0
                    break;
1172
0
                case UBLOCK_PRIVATE_USE_AREA:
1173
0
                    aAllSubsets.emplace_back( 0xE000, 0xF8FF, SvxResId(RID_SUBSETSTR_PRIVATE_USE_AREA) );
1174
0
                    break;
1175
0
                case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS:
1176
0
                    aAllSubsets.emplace_back( 0xF900, 0xFAFF, SvxResId(RID_SUBSETSTR_CJK_COMPAT_IDGRAPHS) );
1177
0
                    break;
1178
0
                case UBLOCK_ALPHABETIC_PRESENTATION_FORMS:
1179
0
                    aAllSubsets.emplace_back( 0xFB00, 0xFB4F, SvxResId(RID_SUBSETSTR_ALPHA_PRESENTATION) );
1180
0
                    break;
1181
0
                case UBLOCK_ARABIC_PRESENTATION_FORMS_A:
1182
0
                    aAllSubsets.emplace_back( 0xFB50, 0xFDFF, SvxResId(RID_SUBSETSTR_ARABIC_PRESENT_A) );
1183
0
                    break;
1184
0
                case UBLOCK_COMBINING_HALF_MARKS:
1185
0
                    aAllSubsets.emplace_back( 0xFE20, 0xFE2F, SvxResId(RID_SUBSETSTR_COMBINING_HALF_MARKS) );
1186
0
                    break;
1187
0
                case UBLOCK_CJK_COMPATIBILITY_FORMS:
1188
0
                    aAllSubsets.emplace_back( 0xFE30, 0xFE4F, SvxResId(RID_SUBSETSTR_CJK_COMPAT_FORMS) );
1189
0
                    break;
1190
0
                case UBLOCK_SMALL_FORM_VARIANTS:
1191
0
                    aAllSubsets.emplace_back( 0xFE50, 0xFE6F, SvxResId(RID_SUBSETSTR_SMALL_FORM_VARIANTS) );
1192
0
                    break;
1193
0
                case UBLOCK_ARABIC_PRESENTATION_FORMS_B:
1194
0
                    aAllSubsets.emplace_back( 0xFE70, 0xFEFF, SvxResId(RID_SUBSETSTR_ARABIC_PRESENT_B) );
1195
0
                    break;
1196
0
                case UBLOCK_SPECIALS:
1197
0
                    aAllSubsets.emplace_back( 0xFFF0, 0xFFFF, SvxResId(RID_SUBSETSTR_SPECIALS) );
1198
0
                    break;
1199
0
                case UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS:
1200
0
                    aAllSubsets.emplace_back( 0xFF00, 0xFFEF, SvxResId(RID_SUBSETSTR_HALFW_FULLW_FORMS) );
1201
0
                    break;
1202
0
                case UBLOCK_OLD_ITALIC:
1203
0
                    aAllSubsets.emplace_back( 0x10300, 0x1032F, SvxResId(RID_SUBSETSTR_OLD_ITALIC) );
1204
0
                    break;
1205
0
                case UBLOCK_GOTHIC:
1206
0
                    aAllSubsets.emplace_back( 0x10330, 0x1034F, SvxResId(RID_SUBSETSTR_GOTHIC) );
1207
0
                    break;
1208
0
                case UBLOCK_DESERET:
1209
0
                    aAllSubsets.emplace_back( 0x10400, 0x1044F, SvxResId(RID_SUBSETSTR_DESERET) );
1210
0
                    break;
1211
0
                case UBLOCK_BYZANTINE_MUSICAL_SYMBOLS:
1212
0
                    aAllSubsets.emplace_back( 0x1D000, 0x1D0FF, SvxResId(RID_SUBSETSTR_BYZANTINE_MUSICAL_SYMBOLS) );
1213
0
                    break;
1214
0
                case UBLOCK_MUSICAL_SYMBOLS:
1215
0
                    aAllSubsets.emplace_back( 0x1D100, 0x1D1FF, SvxResId(RID_SUBSETSTR_MUSICAL_SYMBOLS) );
1216
0
                    break;
1217
0
                case UBLOCK_MATHEMATICAL_ALPHANUMERIC_SYMBOLS:
1218
0
                    aAllSubsets.emplace_back( 0x1D400, 0x1D7FF, SvxResId(RID_SUBSETSTR_MATHEMATICAL_ALPHANUMERIC_SYMBOLS) );
1219
0
                    break;
1220
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B:
1221
0
                    aAllSubsets.emplace_back( 0x20000, 0x2A6DF, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B) );
1222
0
                    break;
1223
0
                case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT:
1224
0
                    aAllSubsets.emplace_back( 0x2F800, 0x2FA1F, SvxResId(RID_SUBSETSTR_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT) );
1225
0
                    break;
1226
0
                case UBLOCK_TAGS:
1227
0
                    aAllSubsets.emplace_back( 0xE0000, 0xE007F, SvxResId(RID_SUBSETSTR_TAGS) );
1228
0
                    break;
1229
0
                case UBLOCK_CYRILLIC_SUPPLEMENTARY:
1230
0
                    aAllSubsets.emplace_back( 0x0500, 0x052F, SvxResId(RID_SUBSETSTR_CYRILLIC_SUPPLEMENTARY) );
1231
0
                    break;
1232
0
                case UBLOCK_TAGALOG:
1233
0
                    aAllSubsets.emplace_back( 0x1700, 0x171F, SvxResId(RID_SUBSETSTR_TAGALOG) );
1234
0
                    break;
1235
0
                case UBLOCK_HANUNOO:
1236
0
                    aAllSubsets.emplace_back( 0x1720, 0x173F, SvxResId(RID_SUBSETSTR_HANUNOO) );
1237
0
                    break;
1238
0
                case UBLOCK_BUHID:
1239
0
                    aAllSubsets.emplace_back( 0x1740, 0x175F, SvxResId(RID_SUBSETSTR_BUHID) );
1240
0
                    break;
1241
0
                case UBLOCK_TAGBANWA:
1242
0
                    aAllSubsets.emplace_back( 0x1760, 0x177F, SvxResId(RID_SUBSETSTR_TAGBANWA) );
1243
0
                    break;
1244
0
                case UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A:
1245
0
                    aAllSubsets.emplace_back( 0x27C0, 0x27EF, SvxResId(RID_SUBSETSTR_MISC_MATH_SYMS_A) );
1246
0
                    break;
1247
0
                case UBLOCK_SUPPLEMENTAL_ARROWS_A:
1248
0
                    aAllSubsets.emplace_back( 0x27F0, 0x27FF, SvxResId(RID_SUBSETSTR_SUPPL_ARROWS_A) );
1249
0
                    break;
1250
0
                case UBLOCK_SUPPLEMENTAL_ARROWS_B:
1251
0
                    aAllSubsets.emplace_back( 0x2900, 0x297F, SvxResId(RID_SUBSETSTR_SUPPL_ARROWS_B) );
1252
0
                    break;
1253
0
                case UBLOCK_MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B:
1254
0
                    aAllSubsets.emplace_back( 0x2980, 0x29FF, SvxResId(RID_SUBSETSTR_MISC_MATH_SYMS_B) );
1255
0
                    break;
1256
0
                case UBLOCK_SUPPLEMENTAL_MATHEMATICAL_OPERATORS:
1257
0
                    aAllSubsets.emplace_back( 0x2A00, 0x2AFF, SvxResId(RID_SUBSETSTR_MISC_MATH_SYMS_B) );
1258
0
                    break;
1259
0
                case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS:
1260
0
                    aAllSubsets.emplace_back( 0x31F0, 0x31FF, SvxResId(RID_SUBSETSTR_KATAKANA_PHONETIC) );
1261
0
                    break;
1262
0
                case UBLOCK_VARIATION_SELECTORS:
1263
0
                    aAllSubsets.emplace_back( 0xFE00, 0xFE0F, SvxResId(RID_SUBSETSTR_VARIATION_SELECTORS) );
1264
0
                    break;
1265
0
                case UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_A:
1266
0
                    aAllSubsets.emplace_back( 0xF0000, 0xFFFFF, SvxResId(RID_SUBSETSTR_SUPPLEMENTARY_PRIVATE_USE_AREA_A) );
1267
0
                    break;
1268
0
                case UBLOCK_SUPPLEMENTARY_PRIVATE_USE_AREA_B:
1269
0
                    aAllSubsets.emplace_back( 0x100000, 0x10FFFF, SvxResId(RID_SUBSETSTR_SUPPLEMENTARY_PRIVATE_USE_AREA_B) );
1270
0
                    break;
1271
0
                case UBLOCK_LIMBU:
1272
0
                    aAllSubsets.emplace_back( 0x1900, 0x194F, SvxResId(RID_SUBSETSTR_LIMBU) );
1273
0
                    break;
1274
0
                case UBLOCK_TAI_LE:
1275
0
                    aAllSubsets.emplace_back( 0x1950, 0x197F, SvxResId(RID_SUBSETSTR_TAI_LE) );
1276
0
                    break;
1277
0
                case UBLOCK_KHMER_SYMBOLS:
1278
0
                    aAllSubsets.emplace_back( 0x19E0, 0x19FF, SvxResId(RID_SUBSETSTR_KHMER_SYMBOLS) );
1279
0
                    break;
1280
0
                case UBLOCK_PHONETIC_EXTENSIONS:
1281
0
                    aAllSubsets.emplace_back( 0x1D00, 0x1D7F, SvxResId(RID_SUBSETSTR_PHONETIC_EXTENSIONS) );
1282
0
                    break;
1283
0
                case UBLOCK_MISCELLANEOUS_SYMBOLS_AND_ARROWS:
1284
0
                    aAllSubsets.emplace_back( 0x2B00, 0x2BFF, SvxResId(RID_SUBSETSTR_MISCELLANEOUS_SYMBOLS_AND_ARROWS) );
1285
0
                    break;
1286
0
                case UBLOCK_YIJING_HEXAGRAM_SYMBOLS:
1287
0
                    aAllSubsets.emplace_back( 0x4DC0, 0x4DFF, SvxResId(RID_SUBSETSTR_YIJING_HEXAGRAM_SYMBOLS) );
1288
0
                    break;
1289
0
                case UBLOCK_LINEAR_B_SYLLABARY:
1290
0
                    aAllSubsets.emplace_back( 0x10000, 0x1007F, SvxResId(RID_SUBSETSTR_LINEAR_B_SYLLABARY) );
1291
0
                    break;
1292
0
                case UBLOCK_LINEAR_B_IDEOGRAMS:
1293
0
                    aAllSubsets.emplace_back( 0x10080, 0x100FF, SvxResId(RID_SUBSETSTR_LINEAR_B_IDEOGRAMS) );
1294
0
                    break;
1295
0
                case UBLOCK_AEGEAN_NUMBERS:
1296
0
                    aAllSubsets.emplace_back( 0x10100, 0x1013F, SvxResId(RID_SUBSETSTR_AEGEAN_NUMBERS) );
1297
0
                    break;
1298
0
                case UBLOCK_UGARITIC:
1299
0
                    aAllSubsets.emplace_back( 0x10380, 0x1039F, SvxResId(RID_SUBSETSTR_UGARITIC) );
1300
0
                    break;
1301
0
                case UBLOCK_SHAVIAN:
1302
0
                    aAllSubsets.emplace_back( 0x10450, 0x1047F, SvxResId(RID_SUBSETSTR_SHAVIAN) );
1303
0
                    break;
1304
0
                case UBLOCK_OSMANYA:
1305
0
                    aAllSubsets.emplace_back( 0x10480, 0x104AF, SvxResId(RID_SUBSETSTR_OSMANYA) );
1306
0
                    break;
1307
0
                case UBLOCK_CYPRIOT_SYLLABARY:
1308
0
                    aAllSubsets.emplace_back( 0x10800, 0x1083F, SvxResId(RID_SUBSETSTR_CYPRIOT_SYLLABARY) );
1309
0
                    break;
1310
0
                case UBLOCK_TAI_XUAN_JING_SYMBOLS:
1311
0
                    aAllSubsets.emplace_back( 0x1D300, 0x1D35F, SvxResId(RID_SUBSETSTR_TAI_XUAN_JING_SYMBOLS) );
1312
0
                    break;
1313
0
                case UBLOCK_VARIATION_SELECTORS_SUPPLEMENT:
1314
0
                    aAllSubsets.emplace_back( 0xE0100, 0xE01EF, SvxResId(RID_SUBSETSTR_VARIATION_SELECTORS_SUPPLEMENT) );
1315
0
                    break;
1316
0
                case UBLOCK_ANCIENT_GREEK_MUSICAL_NOTATION:
1317
0
                    aAllSubsets.emplace_back(0x1D200, 0x1D24F, SvxResId(RID_SUBSETSTR_ANCIENT_GREEK_MUSICAL_NOTATION) );
1318
0
                    break;
1319
0
                case UBLOCK_ANCIENT_GREEK_NUMBERS:
1320
0
                    aAllSubsets.emplace_back(0x10140, 0x1018F , SvxResId(RID_SUBSETSTR_ANCIENT_GREEK_NUMBERS) );
1321
0
                    break;
1322
0
                case UBLOCK_ARABIC_SUPPLEMENT:
1323
0
                    aAllSubsets.emplace_back(0x0750, 0x077F , SvxResId(RID_SUBSETSTR_ARABIC_SUPPLEMENT) );
1324
0
                    break;
1325
0
                case UBLOCK_BUGINESE:
1326
0
                    aAllSubsets.emplace_back(0x1A00, 0x1A1F , SvxResId(RID_SUBSETSTR_BUGINESE) );
1327
0
                    break;
1328
0
                case UBLOCK_CJK_STROKES:
1329
0
                    aAllSubsets.emplace_back( 0x31C0, 0x31EF, SvxResId(RID_SUBSETSTR_CJK_STROKES) );
1330
0
                    break;
1331
0
                case UBLOCK_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT:
1332
0
                    aAllSubsets.emplace_back( 0x1DC0, 0x1DFF , SvxResId(RID_SUBSETSTR_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT) );
1333
0
                    break;
1334
0
                case UBLOCK_COPTIC:
1335
0
                    aAllSubsets.emplace_back( 0x2C80, 0x2CFF , SvxResId(RID_SUBSETSTR_COPTIC) );
1336
0
                    break;
1337
0
                case UBLOCK_ETHIOPIC_EXTENDED:
1338
0
                    aAllSubsets.emplace_back( 0x2D80, 0x2DDF , SvxResId(RID_SUBSETSTR_ETHIOPIC_EXTENDED) );
1339
0
                    break;
1340
0
                case UBLOCK_ETHIOPIC_SUPPLEMENT:
1341
0
                    aAllSubsets.emplace_back( 0x1380, 0x139F, SvxResId(RID_SUBSETSTR_ETHIOPIC_SUPPLEMENT) );
1342
0
                    break;
1343
0
                case UBLOCK_GEORGIAN_SUPPLEMENT:
1344
0
                    aAllSubsets.emplace_back( 0x2D00, 0x2D2F, SvxResId(RID_SUBSETSTR_GEORGIAN_SUPPLEMENT) );
1345
0
                    break;
1346
0
                case UBLOCK_GLAGOLITIC:
1347
0
                    aAllSubsets.emplace_back( 0x2C00, 0x2C5F, SvxResId(RID_SUBSETSTR_GLAGOLITIC) );
1348
0
                    break;
1349
0
                case UBLOCK_KHAROSHTHI:
1350
0
                    aAllSubsets.emplace_back( 0x10A00, 0x10A5F, SvxResId(RID_SUBSETSTR_KHAROSHTHI) );
1351
0
                    break;
1352
0
                case UBLOCK_MODIFIER_TONE_LETTERS:
1353
0
                    aAllSubsets.emplace_back( 0xA700, 0xA71F, SvxResId(RID_SUBSETSTR_MODIFIER_TONE_LETTERS) );
1354
0
                    break;
1355
0
                case UBLOCK_NEW_TAI_LUE:
1356
0
                    aAllSubsets.emplace_back( 0x1980, 0x19DF, SvxResId(RID_SUBSETSTR_NEW_TAI_LUE) );
1357
0
                    break;
1358
0
                case UBLOCK_OLD_PERSIAN:
1359
0
                    aAllSubsets.emplace_back( 0x103A0, 0x103DF, SvxResId(RID_SUBSETSTR_OLD_PERSIAN) );
1360
0
                    break;
1361
0
                case UBLOCK_PHONETIC_EXTENSIONS_SUPPLEMENT:
1362
0
                    aAllSubsets.emplace_back( 0x1D80, 0x1DBF, SvxResId(RID_SUBSETSTR_PHONETIC_EXTENSIONS_SUPPLEMENT) );
1363
0
                    break;
1364
0
                case UBLOCK_SUPPLEMENTAL_PUNCTUATION:
1365
0
                    aAllSubsets.emplace_back( 0x2E00, 0x2E7F, SvxResId(RID_SUBSETSTR_SUPPLEMENTAL_PUNCTUATION) );
1366
0
                    break;
1367
0
                case UBLOCK_SYLOTI_NAGRI:
1368
0
                    aAllSubsets.emplace_back( 0xA800, 0xA82F, SvxResId(RID_SUBSETSTR_SYLOTI_NAGRI) );
1369
0
                    break;
1370
0
                case UBLOCK_TIFINAGH:
1371
0
                    aAllSubsets.emplace_back( 0x2D30, 0x2D7F, SvxResId(RID_SUBSETSTR_TIFINAGH) );
1372
0
                    break;
1373
0
                case UBLOCK_VERTICAL_FORMS:
1374
0
                    aAllSubsets.emplace_back( 0xFE10, 0xFE1F, SvxResId(RID_SUBSETSTR_VERTICAL_FORMS) );
1375
0
                    break;
1376
0
                case UBLOCK_NKO:
1377
0
                    aAllSubsets.emplace_back( 0x07C0, 0x07FF, SvxResId(RID_SUBSETSTR_NKO) );
1378
0
                    break;
1379
0
                case UBLOCK_BALINESE:
1380
0
                    aAllSubsets.emplace_back( 0x1B00, 0x1B7F, SvxResId(RID_SUBSETSTR_BALINESE) );
1381
0
                    break;
1382
0
                case UBLOCK_LATIN_EXTENDED_C:
1383
0
                    aAllSubsets.emplace_back( 0x2C60, 0x2C7F, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_C) );
1384
0
                    break;
1385
0
                case UBLOCK_LATIN_EXTENDED_D:
1386
0
                    aAllSubsets.emplace_back( 0xA720, 0xA7FF, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_D) );
1387
0
                    break;
1388
0
                case UBLOCK_PHAGS_PA:
1389
0
                    aAllSubsets.emplace_back( 0xA840, 0xA87F, SvxResId(RID_SUBSETSTR_PHAGS_PA) );
1390
0
                    break;
1391
0
                case UBLOCK_PHOENICIAN:
1392
0
                    aAllSubsets.emplace_back( 0x10900, 0x1091F, SvxResId(RID_SUBSETSTR_PHOENICIAN) );
1393
0
                    break;
1394
0
                case UBLOCK_CUNEIFORM:
1395
0
                    aAllSubsets.emplace_back( 0x12000, 0x123FF, SvxResId(RID_SUBSETSTR_CUNEIFORM) );
1396
0
                    break;
1397
0
                case UBLOCK_CUNEIFORM_NUMBERS_AND_PUNCTUATION:
1398
0
                    aAllSubsets.emplace_back( 0x12400, 0x1247F, SvxResId(RID_SUBSETSTR_CUNEIFORM_NUMBERS_AND_PUNCTUATION) );
1399
0
                    break;
1400
0
                case UBLOCK_COUNTING_ROD_NUMERALS:
1401
0
                    aAllSubsets.emplace_back( 0x1D360, 0x1D37F, SvxResId(RID_SUBSETSTR_COUNTING_ROD_NUMERALS) );
1402
0
                    break;
1403
0
                case UBLOCK_SUNDANESE:
1404
0
                    aAllSubsets.emplace_back( 0x1B80, 0x1BBF, SvxResId(RID_SUBSETSTR_SUNDANESE) );
1405
0
                    break;
1406
0
                case UBLOCK_LEPCHA:
1407
0
                    aAllSubsets.emplace_back( 0x1C00, 0x1C4F, SvxResId(RID_SUBSETSTR_LEPCHA) );
1408
0
                    break;
1409
0
                case UBLOCK_OL_CHIKI:
1410
0
                    aAllSubsets.emplace_back( 0x1C50, 0x1C7F, SvxResId(RID_SUBSETSTR_OL_CHIKI) );
1411
0
                    break;
1412
0
                case UBLOCK_CYRILLIC_EXTENDED_A:
1413
0
                    aAllSubsets.emplace_back( 0x2DE0, 0x2DFF, SvxResId(RID_SUBSETSTR_CYRILLIC_EXTENDED_A) );
1414
0
                    break;
1415
0
                case UBLOCK_VAI:
1416
0
                    aAllSubsets.emplace_back( 0xA500, 0xA63F, SvxResId(RID_SUBSETSTR_VAI) );
1417
0
                    break;
1418
0
                case UBLOCK_CYRILLIC_EXTENDED_B:
1419
0
                    aAllSubsets.emplace_back( 0xA640, 0xA69F, SvxResId(RID_SUBSETSTR_CYRILLIC_EXTENDED_B) );
1420
0
                    break;
1421
0
                case UBLOCK_SAURASHTRA:
1422
0
                    aAllSubsets.emplace_back( 0xA880, 0xA8DF, SvxResId(RID_SUBSETSTR_SAURASHTRA) );
1423
0
                    break;
1424
0
                case UBLOCK_KAYAH_LI:
1425
0
                    aAllSubsets.emplace_back( 0xA900, 0xA92F, SvxResId(RID_SUBSETSTR_KAYAH_LI) );
1426
0
                    break;
1427
0
                case UBLOCK_REJANG:
1428
0
                    aAllSubsets.emplace_back( 0xA930, 0xA95F, SvxResId(RID_SUBSETSTR_REJANG) );
1429
0
                    break;
1430
0
                case UBLOCK_CHAM:
1431
0
                    aAllSubsets.emplace_back( 0xAA00, 0xAA5F, SvxResId(RID_SUBSETSTR_CHAM) );
1432
0
                    break;
1433
0
                case UBLOCK_ANCIENT_SYMBOLS:
1434
0
                    aAllSubsets.emplace_back( 0x10190, 0x101CF, SvxResId(RID_SUBSETSTR_ANCIENT_SYMBOLS) );
1435
0
                    break;
1436
0
                case UBLOCK_PHAISTOS_DISC:
1437
0
                    aAllSubsets.emplace_back( 0x101D0, 0x101FF, SvxResId(RID_SUBSETSTR_PHAISTOS_DISC) );
1438
0
                    break;
1439
0
                case UBLOCK_LYCIAN:
1440
0
                    aAllSubsets.emplace_back( 0x10280, 0x1029F, SvxResId(RID_SUBSETSTR_LYCIAN) );
1441
0
                    break;
1442
0
                case UBLOCK_CARIAN:
1443
0
                    aAllSubsets.emplace_back( 0x102A0, 0x102DF, SvxResId(RID_SUBSETSTR_CARIAN) );
1444
0
                    break;
1445
0
                case UBLOCK_LYDIAN:
1446
0
                    aAllSubsets.emplace_back( 0x10920, 0x1093F, SvxResId(RID_SUBSETSTR_LYDIAN) );
1447
0
                    break;
1448
0
                case UBLOCK_MAHJONG_TILES:
1449
0
                    aAllSubsets.emplace_back( 0x1F000, 0x1F02F, SvxResId(RID_SUBSETSTR_MAHJONG_TILES) );
1450
0
                    break;
1451
0
                case UBLOCK_DOMINO_TILES:
1452
0
                    aAllSubsets.emplace_back( 0x1F030, 0x1F09F, SvxResId(RID_SUBSETSTR_DOMINO_TILES) );
1453
0
                    break;
1454
0
                case UBLOCK_SAMARITAN:
1455
0
                    aAllSubsets.emplace_back( 0x0800, 0x083F, SvxResId(RID_SUBSETSTR_SAMARITAN) );
1456
0
                    break;
1457
0
                case UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED:
1458
0
                    aAllSubsets.emplace_back( 0x18B0, 0x18FF, SvxResId(RID_SUBSETSTR_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED) );
1459
0
                    break;
1460
0
                case UBLOCK_TAI_THAM:
1461
0
                    aAllSubsets.emplace_back( 0x1A20, 0x1AAF, SvxResId(RID_SUBSETSTR_TAI_THAM) );
1462
0
                    break;
1463
0
                case UBLOCK_VEDIC_EXTENSIONS:
1464
0
                    aAllSubsets.emplace_back( 0x1CD0, 0x1CFF, SvxResId(RID_SUBSETSTR_VEDIC_EXTENSIONS) );
1465
0
                    break;
1466
0
                case UBLOCK_LISU:
1467
0
                    aAllSubsets.emplace_back( 0xA4D0, 0xA4FF, SvxResId(RID_SUBSETSTR_LISU) );
1468
0
                    break;
1469
0
                case UBLOCK_BAMUM:
1470
0
                    aAllSubsets.emplace_back( 0xA6A0, 0xA6FF, SvxResId(RID_SUBSETSTR_BAMUM) );
1471
0
                    break;
1472
0
                case UBLOCK_COMMON_INDIC_NUMBER_FORMS:
1473
0
                    aAllSubsets.emplace_back( 0xA830, 0xA83F, SvxResId(RID_SUBSETSTR_COMMON_INDIC_NUMBER_FORMS) );
1474
0
                    break;
1475
0
                case UBLOCK_DEVANAGARI_EXTENDED:
1476
0
                    aAllSubsets.emplace_back( 0xA8E0, 0xA8FF, SvxResId(RID_SUBSETSTR_DEVANAGARI_EXTENDED) );
1477
0
                    break;
1478
0
                case UBLOCK_HANGUL_JAMO_EXTENDED_A:
1479
0
                    aAllSubsets.emplace_back( 0xA960, 0xA97F, SvxResId(RID_SUBSETSTR_HANGUL_JAMO_EXTENDED_A) );
1480
0
                    break;
1481
0
                case UBLOCK_JAVANESE:
1482
0
                    aAllSubsets.emplace_back( 0xA980, 0xA9DF, SvxResId(RID_SUBSETSTR_JAVANESE) );
1483
0
                    break;
1484
0
                case UBLOCK_MYANMAR_EXTENDED_A:
1485
0
                    aAllSubsets.emplace_back( 0xAA60, 0xAA7F, SvxResId(RID_SUBSETSTR_MYANMAR_EXTENDED_A) );
1486
0
                    break;
1487
0
                case UBLOCK_TAI_VIET:
1488
0
                    aAllSubsets.emplace_back( 0xAA80, 0xAADF, SvxResId(RID_SUBSETSTR_TAI_VIET) );
1489
0
                    break;
1490
0
                case UBLOCK_MEETEI_MAYEK:
1491
0
                    aAllSubsets.emplace_back( 0xABC0, 0xABFF, SvxResId(RID_SUBSETSTR_MEETEI_MAYEK) );
1492
0
                    break;
1493
0
                case UBLOCK_HANGUL_JAMO_EXTENDED_B:
1494
0
                    aAllSubsets.emplace_back( 0xD7B0, 0xD7FF, SvxResId(RID_SUBSETSTR_HANGUL_JAMO_EXTENDED_B) );
1495
0
                    break;
1496
0
                case UBLOCK_IMPERIAL_ARAMAIC:
1497
0
                    aAllSubsets.emplace_back( 0x10840, 0x1085F, SvxResId(RID_SUBSETSTR_IMPERIAL_ARAMAIC) );
1498
0
                    break;
1499
0
                case UBLOCK_OLD_SOUTH_ARABIAN:
1500
0
                    aAllSubsets.emplace_back( 0x10A60, 0x10A7F, SvxResId(RID_SUBSETSTR_OLD_SOUTH_ARABIAN) );
1501
0
                    break;
1502
0
                case UBLOCK_AVESTAN:
1503
0
                    aAllSubsets.emplace_back( 0x10B00, 0x10B3F, SvxResId(RID_SUBSETSTR_AVESTAN) );
1504
0
                    break;
1505
0
                case UBLOCK_INSCRIPTIONAL_PARTHIAN:
1506
0
                    aAllSubsets.emplace_back( 0x10B40, 0x10B5F, SvxResId(RID_SUBSETSTR_INSCRIPTIONAL_PARTHIAN) );
1507
0
                    break;
1508
0
                case UBLOCK_INSCRIPTIONAL_PAHLAVI:
1509
0
                    aAllSubsets.emplace_back( 0x10B60, 0x10B7F, SvxResId(RID_SUBSETSTR_INSCRIPTIONAL_PAHLAVI) );
1510
0
                    break;
1511
0
                case UBLOCK_OLD_TURKIC:
1512
0
                    aAllSubsets.emplace_back( 0x10C00, 0x10C4F, SvxResId(RID_SUBSETSTR_OLD_TURKIC) );
1513
0
                    break;
1514
0
                case UBLOCK_RUMI_NUMERAL_SYMBOLS:
1515
0
                    aAllSubsets.emplace_back( 0x10E60, 0x10E7F, SvxResId(RID_SUBSETSTR_RUMI_NUMERAL_SYMBOLS) );
1516
0
                    break;
1517
0
                case UBLOCK_KAITHI:
1518
0
                    aAllSubsets.emplace_back( 0x11080, 0x110CF, SvxResId(RID_SUBSETSTR_KAITHI) );
1519
0
                    break;
1520
0
                case UBLOCK_EGYPTIAN_HIEROGLYPHS:
1521
0
                    aAllSubsets.emplace_back( 0x13000, 0x1342F, SvxResId(RID_SUBSETSTR_EGYPTIAN_HIEROGLYPHS) );
1522
0
                    break;
1523
0
                case UBLOCK_ENCLOSED_ALPHANUMERIC_SUPPLEMENT:
1524
0
                    aAllSubsets.emplace_back( 0x1F100, 0x1F1FF, SvxResId(RID_SUBSETSTR_ENCLOSED_ALPHANUMERIC_SUPPLEMENT) );
1525
0
                    break;
1526
0
                case UBLOCK_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT:
1527
0
                    aAllSubsets.emplace_back( 0x1F200, 0x1F2FF, SvxResId(RID_SUBSETSTR_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT) );
1528
0
                    break;
1529
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C:
1530
0
                    aAllSubsets.emplace_back( 0x2A700, 0x2B73F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C) );
1531
0
                    break;
1532
0
                case UBLOCK_MANDAIC:
1533
0
                    aAllSubsets.emplace_back( 0x0840, 0x085F, SvxResId(RID_SUBSETSTR_MANDAIC) );
1534
0
                    break;
1535
0
                case UBLOCK_BATAK:
1536
0
                    aAllSubsets.emplace_back( 0x1BC0, 0x1BFF, SvxResId(RID_SUBSETSTR_BATAK) );
1537
0
                    break;
1538
0
                case UBLOCK_ETHIOPIC_EXTENDED_A:
1539
0
                    aAllSubsets.emplace_back( 0xAB00, 0xAB2F, SvxResId(RID_SUBSETSTR_ETHIOPIC_EXTENDED_A) );
1540
0
                    break;
1541
0
                case UBLOCK_BRAHMI:
1542
0
                    aAllSubsets.emplace_back( 0x11000, 0x1107F, SvxResId(RID_SUBSETSTR_BRAHMI) );
1543
0
                    break;
1544
0
                case UBLOCK_BAMUM_SUPPLEMENT:
1545
0
                    aAllSubsets.emplace_back( 0x16800, 0x16A3F, SvxResId(RID_SUBSETSTR_BAMUM_SUPPLEMENT) );
1546
0
                    break;
1547
0
                case UBLOCK_KANA_SUPPLEMENT:
1548
0
                    aAllSubsets.emplace_back( 0x1B000, 0x1B0FF, SvxResId(RID_SUBSETSTR_KANA_SUPPLEMENT) );
1549
0
                    break;
1550
0
                case UBLOCK_PLAYING_CARDS:
1551
0
                    aAllSubsets.emplace_back( 0x1F0A0, 0x1F0FF, SvxResId(RID_SUBSETSTR_PLAYING_CARDS) );
1552
0
                    break;
1553
0
                case UBLOCK_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS:
1554
0
                    aAllSubsets.emplace_back( 0x1F300, 0x1F5FF, SvxResId(RID_SUBSETSTR_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS) );
1555
0
                    break;
1556
0
                case UBLOCK_EMOTICONS:
1557
0
                    aAllSubsets.emplace_back( 0x1F600, 0x1F64F, SvxResId(RID_SUBSETSTR_EMOTICONS) );
1558
0
                    break;
1559
0
                case UBLOCK_TRANSPORT_AND_MAP_SYMBOLS:
1560
0
                    aAllSubsets.emplace_back( 0x1F680, 0x1F6FF, SvxResId(RID_SUBSETSTR_TRANSPORT_AND_MAP_SYMBOLS) );
1561
0
                    break;
1562
0
                case UBLOCK_ALCHEMICAL_SYMBOLS:
1563
0
                    aAllSubsets.emplace_back( 0x1F700, 0x1F77F, SvxResId(RID_SUBSETSTR_ALCHEMICAL_SYMBOLS) );
1564
0
                    break;
1565
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D:
1566
0
                    aAllSubsets.emplace_back( 0x2B740, 0x2B81F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D) );
1567
0
                    break;
1568
0
                case UBLOCK_ARABIC_EXTENDED_A:
1569
0
                    aAllSubsets.emplace_back( 0x08A0, 0x08FF, SvxResId(RID_SUBSETSTR_ARABIC_EXTENDED_A) );
1570
0
                    break;
1571
0
                case UBLOCK_ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS:
1572
0
                    aAllSubsets.emplace_back( 0x1EE00, 0x1EEFF, SvxResId(RID_SUBSETSTR_ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS) );
1573
0
                    break;
1574
0
                case UBLOCK_CHAKMA:
1575
0
                    aAllSubsets.emplace_back( 0x11100, 0x1114F, SvxResId(RID_SUBSETSTR_CHAKMA) );
1576
0
                    break;
1577
0
                case UBLOCK_MEETEI_MAYEK_EXTENSIONS:
1578
0
                    aAllSubsets.emplace_back( 0xAAE0, 0xAAFF, SvxResId(RID_SUBSETSTR_MEETEI_MAYEK_EXTENSIONS) );
1579
0
                    break;
1580
0
                case UBLOCK_MEROITIC_CURSIVE:
1581
0
                    aAllSubsets.emplace_back( 0x109A0, 0x109FF, SvxResId(RID_SUBSETSTR_MEROITIC_CURSIVE) );
1582
0
                    break;
1583
0
                case UBLOCK_MEROITIC_HIEROGLYPHS:
1584
0
                    aAllSubsets.emplace_back( 0x10980, 0x1099F, SvxResId(RID_SUBSETSTR_MEROITIC_HIEROGLYPHS) );
1585
0
                    break;
1586
0
                case UBLOCK_MIAO:
1587
0
                    aAllSubsets.emplace_back( 0x16F00, 0x16F9F, SvxResId(RID_SUBSETSTR_MIAO) );
1588
0
                    break;
1589
0
                case UBLOCK_SHARADA:
1590
0
                    aAllSubsets.emplace_back( 0x11180, 0x111DF, SvxResId(RID_SUBSETSTR_SHARADA) );
1591
0
                    break;
1592
0
                case UBLOCK_SORA_SOMPENG:
1593
0
                    aAllSubsets.emplace_back( 0x110D0, 0x110FF, SvxResId(RID_SUBSETSTR_SORA_SOMPENG) );
1594
0
                    break;
1595
0
                case UBLOCK_SUNDANESE_SUPPLEMENT:
1596
0
                    aAllSubsets.emplace_back( 0x1CC0, 0x1CCF, SvxResId(RID_SUBSETSTR_SUNDANESE_SUPPLEMENT) );
1597
0
                    break;
1598
0
                case UBLOCK_TAKRI:
1599
0
                    aAllSubsets.emplace_back( 0x11680, 0x116CF, SvxResId(RID_SUBSETSTR_TAKRI) );
1600
0
                    break;
1601
0
                case UBLOCK_BASSA_VAH:
1602
0
                    aAllSubsets.emplace_back( 0x16AD0, 0x16AFF, SvxResId(RID_SUBSETSTR_BASSA_VAH) );
1603
0
                    break;
1604
0
                case UBLOCK_CAUCASIAN_ALBANIAN:
1605
0
                    aAllSubsets.emplace_back( 0x10530, 0x1056F, SvxResId(RID_SUBSETSTR_CAUCASIAN_ALBANIAN) );
1606
0
                    break;
1607
0
                case UBLOCK_COPTIC_EPACT_NUMBERS:
1608
0
                    aAllSubsets.emplace_back( 0x102E0, 0x102FF, SvxResId(RID_SUBSETSTR_COPTIC_EPACT_NUMBERS) );
1609
0
                    break;
1610
0
                case UBLOCK_COMBINING_DIACRITICAL_MARKS_EXTENDED:
1611
0
                    aAllSubsets.emplace_back( 0x1AB0, 0x1AFF, SvxResId(RID_SUBSETSTR_COMBINING_DIACRITICAL_MARKS_EXTENDED) );
1612
0
                    break;
1613
0
                case UBLOCK_DUPLOYAN:
1614
0
                    aAllSubsets.emplace_back( 0x1BC00, 0x1BC9F, SvxResId(RID_SUBSETSTR_DUPLOYAN) );
1615
0
                    break;
1616
0
                case UBLOCK_ELBASAN:
1617
0
                    aAllSubsets.emplace_back( 0x10500, 0x1052F, SvxResId(RID_SUBSETSTR_ELBASAN) );
1618
0
                    break;
1619
0
                case UBLOCK_GEOMETRIC_SHAPES_EXTENDED:
1620
0
                    aAllSubsets.emplace_back( 0x1F780, 0x1F7FF, SvxResId(RID_SUBSETSTR_GEOMETRIC_SHAPES_EXTENDED) );
1621
0
                    break;
1622
0
                case UBLOCK_GRANTHA:
1623
0
                    aAllSubsets.emplace_back( 0x11300, 0x1137F, SvxResId(RID_SUBSETSTR_GRANTHA) );
1624
0
                    break;
1625
0
                case UBLOCK_KHOJKI:
1626
0
                    aAllSubsets.emplace_back( 0x11200, 0x1124F, SvxResId(RID_SUBSETSTR_KHOJKI) );
1627
0
                    break;
1628
0
                case UBLOCK_KHUDAWADI:
1629
0
                    aAllSubsets.emplace_back( 0x112B0, 0x112FF, SvxResId(RID_SUBSETSTR_KHUDAWADI) );
1630
0
                    break;
1631
0
                case UBLOCK_LATIN_EXTENDED_E:
1632
0
                    aAllSubsets.emplace_back( 0xAB30, 0xAB6F, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_E) );
1633
0
                    break;
1634
0
                case UBLOCK_LINEAR_A:
1635
0
                    aAllSubsets.emplace_back( 0x10600, 0x1077F, SvxResId(RID_SUBSETSTR_LINEAR_A) );
1636
0
                    break;
1637
0
                case UBLOCK_MAHAJANI:
1638
0
                    aAllSubsets.emplace_back( 0x11150, 0x1117F, SvxResId(RID_SUBSETSTR_MAHAJANI) );
1639
0
                    break;
1640
0
                case UBLOCK_MANICHAEAN:
1641
0
                    aAllSubsets.emplace_back( 0x10AC0, 0x10AFF, SvxResId(RID_SUBSETSTR_MANICHAEAN) );
1642
0
                    break;
1643
0
                case UBLOCK_MENDE_KIKAKUI:
1644
0
                    aAllSubsets.emplace_back( 0x1E800, 0x1E8DF, SvxResId(RID_SUBSETSTR_MENDE_KIKAKUI) );
1645
0
                    break;
1646
0
                case UBLOCK_MODI:
1647
0
                    aAllSubsets.emplace_back( 0x11600, 0x1165F, SvxResId(RID_SUBSETSTR_MODI) );
1648
0
                    break;
1649
0
                case UBLOCK_MRO:
1650
0
                    aAllSubsets.emplace_back( 0x16A40, 0x16A6F, SvxResId(RID_SUBSETSTR_MRO) );
1651
0
                    break;
1652
0
                case UBLOCK_MYANMAR_EXTENDED_B:
1653
0
                    aAllSubsets.emplace_back( 0xA9E0, 0xA9FF, SvxResId(RID_SUBSETSTR_MYANMAR_EXTENDED_B) );
1654
0
                    break;
1655
0
                case UBLOCK_NABATAEAN:
1656
0
                    aAllSubsets.emplace_back( 0x10880, 0x108AF, SvxResId(RID_SUBSETSTR_NABATAEAN) );
1657
0
                    break;
1658
0
                case UBLOCK_OLD_NORTH_ARABIAN:
1659
0
                    aAllSubsets.emplace_back( 0x10A80, 0x10A9F, SvxResId(RID_SUBSETSTR_OLD_NORTH_ARABIAN) );
1660
0
                    break;
1661
0
                case UBLOCK_OLD_PERMIC:
1662
0
                    aAllSubsets.emplace_back( 0x10350, 0x1037F, SvxResId(RID_SUBSETSTR_OLD_PERMIC) );
1663
0
                    break;
1664
0
                case UBLOCK_ORNAMENTAL_DINGBATS:
1665
0
                    aAllSubsets.emplace_back( 0x1F650, 0x1F67F, SvxResId(RID_SUBSETSTR_ORNAMENTAL_DINGBATS) );
1666
0
                    break;
1667
0
                case UBLOCK_PAHAWH_HMONG:
1668
0
                    aAllSubsets.emplace_back( 0x16B00, 0x16B8F, SvxResId(RID_SUBSETSTR_PAHAWH_HMONG) );
1669
0
                    break;
1670
0
                case UBLOCK_PALMYRENE:
1671
0
                    aAllSubsets.emplace_back( 0x10860, 0x1087F, SvxResId(RID_SUBSETSTR_PALMYRENE) );
1672
0
                    break;
1673
0
                case UBLOCK_PAU_CIN_HAU:
1674
0
                    aAllSubsets.emplace_back( 0x11AC0, 0x11AFF, SvxResId(RID_SUBSETSTR_PAU_CIN_HAU) );
1675
0
                    break;
1676
0
                case UBLOCK_PSALTER_PAHLAVI:
1677
0
                    aAllSubsets.emplace_back( 0x10B80, 0x10BAF, SvxResId(RID_SUBSETSTR_PSALTER_PAHLAVI) );
1678
0
                    break;
1679
0
                case UBLOCK_SHORTHAND_FORMAT_CONTROLS:
1680
0
                    aAllSubsets.emplace_back( 0x1BCA0, 0x1BCAF, SvxResId(RID_SUBSETSTR_SHORTHAND_FORMAT_CONTROLS) );
1681
0
                    break;
1682
0
                case UBLOCK_SIDDHAM:
1683
0
                    aAllSubsets.emplace_back( 0x11580, 0x115FF, SvxResId(RID_SUBSETSTR_SIDDHAM) );
1684
0
                    break;
1685
0
                case UBLOCK_SINHALA_ARCHAIC_NUMBERS:
1686
0
                    aAllSubsets.emplace_back( 0x111E0, 0x111FF, SvxResId(RID_SUBSETSTR_SINHALA_ARCHAIC_NUMBERS) );
1687
0
                    break;
1688
0
                case UBLOCK_SUPPLEMENTAL_ARROWS_C:
1689
0
                    aAllSubsets.emplace_back( 0x1F800, 0x1F8FF, SvxResId(RID_SUBSETSTR_SUPPLEMENTAL_ARROWS_C) );
1690
0
                    break;
1691
0
                case UBLOCK_TIRHUTA:
1692
0
                    aAllSubsets.emplace_back( 0x11480, 0x114DF, SvxResId(RID_SUBSETSTR_TIRHUTA) );
1693
0
                    break;
1694
0
                case UBLOCK_WARANG_CITI:
1695
0
                    aAllSubsets.emplace_back( 0x118A0, 0x118FF, SvxResId(RID_SUBSETSTR_WARANG_CITI) );
1696
0
                    break;
1697
0
                case UBLOCK_AHOM:
1698
0
                    aAllSubsets.emplace_back( 0x11700, 0x1173F, SvxResId(RID_SUBSETSTR_AHOM) );
1699
0
                    break;
1700
0
                case UBLOCK_ANATOLIAN_HIEROGLYPHS:
1701
0
                    aAllSubsets.emplace_back( 0x14400, 0x1467F, SvxResId(RID_SUBSETSTR_ANATOLIAN_HIEROGLYPHS) );
1702
0
                    break;
1703
0
                case UBLOCK_CHEROKEE_SUPPLEMENT:
1704
0
                    aAllSubsets.emplace_back( 0xAB70, 0xABBF, SvxResId(RID_SUBSETSTR_CHEROKEE_SUPPLEMENT) );
1705
0
                    break;
1706
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E:
1707
0
                    aAllSubsets.emplace_back( 0x2B820, 0x2CEAF, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E) );
1708
0
                    break;
1709
0
                case UBLOCK_EARLY_DYNASTIC_CUNEIFORM:
1710
0
                    aAllSubsets.emplace_back( 0x12480, 0x1254F, SvxResId(RID_SUBSETSTR_EARLY_DYNASTIC_CUNEIFORM) );
1711
0
                    break;
1712
0
                case UBLOCK_HATRAN:
1713
0
                    aAllSubsets.emplace_back( 0x108E0, 0x108FF, SvxResId(RID_SUBSETSTR_HATRAN) );
1714
0
                    break;
1715
0
                case UBLOCK_MULTANI:
1716
0
                    aAllSubsets.emplace_back( 0x11280, 0x112AF, SvxResId(RID_SUBSETSTR_MULTANI) );
1717
0
                    break;
1718
0
                case UBLOCK_OLD_HUNGARIAN:
1719
0
                    aAllSubsets.emplace_back( 0x10C80, 0x10CFF, SvxResId(RID_SUBSETSTR_OLD_HUNGARIAN) );
1720
0
                    break;
1721
0
                case UBLOCK_SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS:
1722
0
                    aAllSubsets.emplace_back( 0x1F900, 0x1F9FF, SvxResId(RID_SUBSETSTR_SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS) );
1723
0
                    break;
1724
0
                case UBLOCK_SUTTON_SIGNWRITING:
1725
0
                    aAllSubsets.emplace_back( 0x1D800, 0x1DAAF, SvxResId(RID_SUBSETSTR_SUTTON_SIGNWRITING) );
1726
0
                    break;
1727
0
                case UBLOCK_ADLAM:
1728
0
                    aAllSubsets.emplace_back( 0x1E900, 0x1E95F, SvxResId(RID_SUBSETSTR_ADLAM) );
1729
0
                    break;
1730
0
                case UBLOCK_BHAIKSUKI:
1731
0
                    aAllSubsets.emplace_back( 0x11C00, 0x11C6F, SvxResId(RID_SUBSETSTR_BHAIKSUKI) );
1732
0
                    break;
1733
0
                case UBLOCK_CYRILLIC_EXTENDED_C:
1734
0
                    aAllSubsets.emplace_back( 0x1C80, 0x1C8F, SvxResId(RID_SUBSETSTR_CYRILLIC_EXTENDED_C) );
1735
0
                    break;
1736
0
                case UBLOCK_GLAGOLITIC_SUPPLEMENT:
1737
0
                    aAllSubsets.emplace_back( 0x1E000, 0x1E02F, SvxResId(RID_SUBSETSTR_GLAGOLITIC_SUPPLEMENT) );
1738
0
                    break;
1739
0
                case UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION:
1740
0
                    aAllSubsets.emplace_back( 0x16FE0, 0x16FFF, SvxResId(RID_SUBSETSTR_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION) );
1741
0
                    break;
1742
0
                case UBLOCK_MARCHEN:
1743
0
                    aAllSubsets.emplace_back( 0x11C70, 0x11CBF, SvxResId(RID_SUBSETSTR_MARCHEN) );
1744
0
                    break;
1745
0
                case UBLOCK_MONGOLIAN_SUPPLEMENT:
1746
0
                    aAllSubsets.emplace_back( 0x11660, 0x1167F, SvxResId(RID_SUBSETSTR_MONGOLIAN_SUPPLEMENT) );
1747
0
                    break;
1748
0
                case UBLOCK_NEWA:
1749
0
                    aAllSubsets.emplace_back( 0x11400, 0x1147F, SvxResId(RID_SUBSETSTR_NEWA) );
1750
0
                    break;
1751
0
                case UBLOCK_OSAGE:
1752
0
                    aAllSubsets.emplace_back( 0x104B0, 0x104FF, SvxResId(RID_SUBSETSTR_OSAGE) );
1753
0
                    break;
1754
0
                case UBLOCK_TANGUT:
1755
0
                    aAllSubsets.emplace_back( 0x17000, 0x187FF, SvxResId(RID_SUBSETSTR_TANGUT) );
1756
0
                    break;
1757
0
                case UBLOCK_TANGUT_COMPONENTS:
1758
0
                    aAllSubsets.emplace_back( 0x18800, 0x18AFF, SvxResId(RID_SUBSETSTR_TANGUT_COMPONENTS) );
1759
0
                    break;
1760
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F:
1761
0
                    aAllSubsets.emplace_back( 0x2CEB0, 0x2EBE0, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F) );
1762
0
                    break;
1763
0
                case UBLOCK_KANA_EXTENDED_A:
1764
0
                    aAllSubsets.emplace_back( 0x1B100, 0x1B12F, SvxResId(RID_SUBSETSTR_KANA_EXTENDED_A) );
1765
0
                    break;
1766
0
                case UBLOCK_MASARAM_GONDI:
1767
0
                    aAllSubsets.emplace_back( 0x11D00, 0x11D5F, SvxResId(RID_SUBSETSTR_MASARAM_GONDI) );
1768
0
                    break;
1769
0
                case UBLOCK_NUSHU:
1770
0
                    aAllSubsets.emplace_back( 0x1B170, 0x1B2FF, SvxResId(RID_SUBSETSTR_NUSHU) );
1771
0
                    break;
1772
0
                case UBLOCK_SOYOMBO:
1773
0
                    aAllSubsets.emplace_back( 0x11A50, 0x11AAF, SvxResId(RID_SUBSETSTR_SOYOMBO) );
1774
0
                    break;
1775
0
                case UBLOCK_SYRIAC_SUPPLEMENT:
1776
0
                    aAllSubsets.emplace_back( 0x0860, 0x086f, SvxResId(RID_SUBSETSTR_SYRIAC_SUPPLEMENT) );
1777
0
                    break;
1778
0
                case UBLOCK_ZANABAZAR_SQUARE:
1779
0
                    aAllSubsets.emplace_back( 0x11A00, 0x11A4F, SvxResId(RID_SUBSETSTR_ZANABAZAR_SQUARE) );
1780
0
                    break;
1781
0
                case UBLOCK_CHESS_SYMBOLS:
1782
0
                    aAllSubsets.emplace_back( 0x1FA00, 0x1FA6F, SvxResId(RID_SUBSETSTR_CHESS_SYMBOLS) );
1783
0
                    break;
1784
0
                case UBLOCK_DOGRA:
1785
0
                    aAllSubsets.emplace_back( 0x11800, 0x1184F, SvxResId(RID_SUBSETSTR_DOGRA) );
1786
0
                    break;
1787
0
                case UBLOCK_GEORGIAN_EXTENDED:
1788
0
                    aAllSubsets.emplace_back( 0x1C90, 0x1CBF, SvxResId(RID_SUBSETSTR_GEORGIAN_EXTENDED) );
1789
0
                    break;
1790
0
                case UBLOCK_GUNJALA_GONDI:
1791
0
                    aAllSubsets.emplace_back( 0x11D60, 0x11DAF, SvxResId(RID_SUBSETSTR_GUNJALA_GONDI) );
1792
0
                    break;
1793
0
                case UBLOCK_HANIFI_ROHINGYA:
1794
0
                    aAllSubsets.emplace_back( 0x10D00, 0x10D3F, SvxResId(RID_SUBSETSTR_HANIFI_ROHINGYA) );
1795
0
                    break;
1796
0
                case UBLOCK_INDIC_SIYAQ_NUMBERS:
1797
0
                    aAllSubsets.emplace_back( 0x1EC70, 0x1ECBF, SvxResId(RID_SUBSETSTR_INDIC_SIYAQ_NUMBERS) );
1798
0
                    break;
1799
0
                case UBLOCK_MAKASAR:
1800
0
                    aAllSubsets.emplace_back( 0x11EE0, 0x11EFF, SvxResId(RID_SUBSETSTR_MAKASAR) );
1801
0
                    break;
1802
0
                case UBLOCK_MAYAN_NUMERALS:
1803
0
                    aAllSubsets.emplace_back( 0x1D2E0, 0x1D2FF, SvxResId(RID_SUBSETSTR_MAYAN_NUMERALS) );
1804
0
                    break;
1805
0
                case UBLOCK_MEDEFAIDRIN:
1806
0
                    aAllSubsets.emplace_back( 0x16E40, 0x16E9F, SvxResId(RID_SUBSETSTR_MEDEFAIDRIN) );
1807
0
                    break;
1808
0
                case UBLOCK_OLD_SOGDIAN:
1809
0
                    aAllSubsets.emplace_back( 0x10F00, 0x10F2F, SvxResId(RID_SUBSETSTR_OLD_SOGDIAN) );
1810
0
                    break;
1811
0
                case UBLOCK_SOGDIAN:
1812
0
                    aAllSubsets.emplace_back( 0x10F30, 0x10F6F, SvxResId(RID_SUBSETSTR_SOGDIAN) );
1813
0
                    break;
1814
0
                case UBLOCK_EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS:
1815
0
                    aAllSubsets.emplace_back( 0x13430, 0x1343F, SvxResId(RID_SUBSETSTR_EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS) );
1816
0
                    break;
1817
0
                case UBLOCK_ELYMAIC:
1818
0
                    aAllSubsets.emplace_back( 0x10FE0, 0x10FFF, SvxResId(RID_SUBSETSTR_ELYMAIC) );
1819
0
                    break;
1820
0
                case UBLOCK_NANDINAGARI:
1821
0
                    aAllSubsets.emplace_back( 0x119A0, 0x119FF, SvxResId(RID_SUBSETSTR_NANDINAGARI) );
1822
0
                    break;
1823
0
                case UBLOCK_NYIAKENG_PUACHUE_HMONG:
1824
0
                    aAllSubsets.emplace_back( 0x1E100, 0x1E14F, SvxResId(RID_SUBSETSTR_NYIAKENG_PUACHUE_HMONG) );
1825
0
                    break;
1826
0
                case UBLOCK_OTTOMAN_SIYAQ_NUMBERS:
1827
0
                    aAllSubsets.emplace_back( 0x1ED00, 0x1ED4F, SvxResId(RID_SUBSETSTR_OTTOMAN_SIYAQ_NUMBERS) );
1828
0
                    break;
1829
0
                case UBLOCK_SMALL_KANA_EXTENSION:
1830
0
                    aAllSubsets.emplace_back( 0x1B130, 0x1B16F, SvxResId(RID_SUBSETSTR_SMALL_KANA_EXTENSION) );
1831
0
                    break;
1832
0
                case UBLOCK_SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A:
1833
0
                    aAllSubsets.emplace_back( 0x1FA70, 0x1FAFF, SvxResId(RID_SUBSETSTR_SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A) );
1834
0
                    break;
1835
0
                case UBLOCK_TAMIL_SUPPLEMENT:
1836
0
                    aAllSubsets.emplace_back( 0x11FC0, 0x11FFF, SvxResId(RID_SUBSETSTR_TAMIL_SUPPLEMENT) );
1837
0
                    break;
1838
0
                case UBLOCK_WANCHO:
1839
0
                    aAllSubsets.emplace_back( 0x1E2C0, 0x1E2FF, SvxResId(RID_SUBSETSTR_WANCHO) );
1840
0
                    break;
1841
0
                case UBLOCK_CHORASMIAN:
1842
0
                    aAllSubsets.emplace_back( 0x10FB0, 0x10FDF, SvxResId(RID_SUBSETSTR_CHORASMIAN) );
1843
0
                    break;
1844
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G:
1845
0
                    aAllSubsets.emplace_back( 0x30000, 0x3134F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G) );
1846
0
                    break;
1847
0
                case UBLOCK_DIVES_AKURU:
1848
0
                    aAllSubsets.emplace_back( 0x11900, 0x1195F, SvxResId(RID_SUBSETSTR_DIVES_AKURU) );
1849
0
                    break;
1850
0
                case UBLOCK_KHITAN_SMALL_SCRIPT:
1851
0
                    aAllSubsets.emplace_back( 0x18B00, 0x18CFF, SvxResId(RID_SUBSETSTR_KHITAN_SMALL_SCRIPT) );
1852
0
                    break;
1853
0
                case UBLOCK_LISU_SUPPLEMENT:
1854
0
                    aAllSubsets.emplace_back( 0x11FB0, 0x11FBF, SvxResId(RID_SUBSETSTR_LISU_SUPPLEMENT) );
1855
0
                    break;
1856
0
                case UBLOCK_SYMBOLS_FOR_LEGACY_COMPUTING:
1857
0
                    aAllSubsets.emplace_back( 0x1FB00, 0x1FBFF, SvxResId(RID_SUBSETSTR_SYMBOLS_FOR_LEGACY_COMPUTING) );
1858
0
                    break;
1859
0
                case UBLOCK_TANGUT_SUPPLEMENT:
1860
0
                    aAllSubsets.emplace_back( 0x18D00, 0x18D7F, SvxResId(RID_SUBSETSTR_TANGUT_SUPPLEMENT) );
1861
0
                    break;
1862
0
                case UBLOCK_YEZIDI:
1863
0
                    aAllSubsets.emplace_back( 0x10E80, 0x10EBF, SvxResId(RID_SUBSETSTR_YEZIDI) );
1864
0
                    break;
1865
0
#if (U_ICU_VERSION_MAJOR_NUM >= 70)
1866
0
                case UBLOCK_ARABIC_EXTENDED_B:
1867
0
                    aAllSubsets.emplace_back( 0x0870, 0x089F, SvxResId(RID_SUBSETSTR_ARABIC_EXTENDED_B) );
1868
0
                    break;
1869
0
                case UBLOCK_CYPRO_MINOAN:
1870
0
                    aAllSubsets.emplace_back( 0x12F90, 0x12FFF, SvxResId(RID_SUBSETSTR_CYPRO_MINOAN) );
1871
0
                    break;
1872
0
                case UBLOCK_ETHIOPIC_EXTENDED_B:
1873
0
                    aAllSubsets.emplace_back( 0x1E7E0, 0x1E7FF, SvxResId(RID_SUBSETSTR_ETHIOPIC_EXTENDED_B) );
1874
0
                    break;
1875
0
                case UBLOCK_KANA_EXTENDED_B:
1876
0
                    aAllSubsets.emplace_back( 0x1AFF0, 0x1AFFF, SvxResId(RID_SUBSETSTR_KANA_EXTENDED_B) );
1877
0
                    break;
1878
0
                case UBLOCK_LATIN_EXTENDED_F:
1879
0
                    aAllSubsets.emplace_back( 0x10780, 0x107BF, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_F) );
1880
0
                    break;
1881
0
                case UBLOCK_LATIN_EXTENDED_G:
1882
0
                    aAllSubsets.emplace_back( 0x1DF00, 0x1DFFF, SvxResId(RID_SUBSETSTR_LATIN_EXTENDED_G) );
1883
0
                    break;
1884
0
                case UBLOCK_OLD_UYGHUR:
1885
0
                    aAllSubsets.emplace_back( 0x10F70, 0x10FAF, SvxResId(RID_SUBSETSTR_OLD_UYGHUR) );
1886
0
                    break;
1887
0
                case UBLOCK_TANGSA:
1888
0
                    aAllSubsets.emplace_back( 0x16A70, 0x16ACF, SvxResId(RID_SUBSETSTR_TANGSA) );
1889
0
                    break;
1890
0
                case UBLOCK_TOTO:
1891
0
                    aAllSubsets.emplace_back( 0x1E290, 0x1E2BF, SvxResId(RID_SUBSETSTR_TOTO) );
1892
0
                    break;
1893
0
                case UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A:
1894
0
                    aAllSubsets.emplace_back( 0x11AB0, 0x11ABF, SvxResId(RID_SUBSETSTR_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A) );
1895
0
                    break;
1896
0
                case UBLOCK_VITHKUQI:
1897
0
                    aAllSubsets.emplace_back( 0x10570, 0x105BF, SvxResId(RID_SUBSETSTR_VITHKUQI) );
1898
0
                    break;
1899
0
                case UBLOCK_ZNAMENNY_MUSICAL_NOTATION:
1900
0
                    aAllSubsets.emplace_back( 0x1CF00, 0x1CFCF, SvxResId(RID_SUBSETSTR_ZNAMENNY_MUSICAL_NOTATION) );
1901
0
                    break;
1902
0
#endif
1903
0
#if (U_ICU_VERSION_MAJOR_NUM >= 72)
1904
0
                case UBLOCK_ARABIC_EXTENDED_C:
1905
0
                    aAllSubsets.emplace_back( 0x10EC0, 0x10EFF, SvxResId(RID_SUBSETSTR_ARABIC_EXTENDED_C) );
1906
0
                    break;
1907
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H:
1908
0
                    aAllSubsets.emplace_back( 0x31350, 0x323AF, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_H) );
1909
0
                    break;
1910
0
                case UBLOCK_CYRILLIC_EXTENDED_D:
1911
0
                    aAllSubsets.emplace_back( 0x1E030, 0x1E08F, SvxResId(RID_SUBSETSTR_CYRILLIC_EXTENDED_D) );
1912
0
                    break;
1913
0
                case UBLOCK_DEVANAGARI_EXTENDED_A:
1914
0
                    aAllSubsets.emplace_back( 0x11B00, 0x11B5F, SvxResId(RID_SUBSETSTR_DEVANAGARI_EXTENDED_A) );
1915
0
                    break;
1916
0
                case UBLOCK_KAKTOVIK_NUMERALS:
1917
0
                    aAllSubsets.emplace_back( 0x1D2C0, 0x1D2DF, SvxResId(RID_SUBSETSTR_KAKTOVIK_NUMERALS) );
1918
0
                    break;
1919
0
                case UBLOCK_KAWI:
1920
0
                    aAllSubsets.emplace_back( 0x11F00, 0x11F5F, SvxResId(RID_SUBSETSTR_KAWI) );
1921
0
                    break;
1922
0
                case UBLOCK_NAG_MUNDARI:
1923
0
                    aAllSubsets.emplace_back( 0x1E4D0, 0x1E4FF, SvxResId(RID_SUBSETSTR_NAG_MUNDARI) );
1924
0
                    break;
1925
0
#endif
1926
0
#if (U_ICU_VERSION_MAJOR_NUM >= 74)
1927
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I:
1928
0
                    aAllSubsets.emplace_back( 0x2EBF0, 0x2EE5F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I) );
1929
0
                    break;
1930
0
#endif
1931
0
#if (U_ICU_VERSION_MAJOR_NUM >= 76)
1932
0
                case UBLOCK_EGYPTIAN_HIEROGLYPHS_EXTENDED_A:
1933
0
                    aAllSubsets.emplace_back( 0x13460, 0x1355F, SvxResId(RID_SUBSETSTR_EGYPTIAN_HIEROGLYPHS_EXTENDED_A) );
1934
0
                    break;
1935
0
                case UBLOCK_GARAY:
1936
0
                    aAllSubsets.emplace_back( 0x10D40, 0x10D8F, SvxResId(RID_SUBSETSTR_GARAY) );
1937
0
                    break;
1938
0
                case UBLOCK_GURUNG_KHEMA:
1939
0
                    aAllSubsets.emplace_back( 0x16100, 0x1613F, SvxResId(RID_SUBSETSTR_GURUNG_KHEMA) );
1940
0
                    break;
1941
0
                case UBLOCK_KIRAT_RAI:
1942
0
                    aAllSubsets.emplace_back( 0x16D40, 0x16D7F, SvxResId(RID_SUBSETSTR_KIRAT_RAI) );
1943
0
                    break;
1944
0
                case UBLOCK_MYANMAR_EXTENDED_C:
1945
0
                    aAllSubsets.emplace_back( 0x116D0, 0x116FF, SvxResId(RID_SUBSETSTR_MYANMAR_EXTENDED_C) );
1946
0
                    break;
1947
0
                case UBLOCK_OL_ONAL:
1948
0
                    aAllSubsets.emplace_back( 0x1E5D0, 0x1E5FF, SvxResId(RID_SUBSETSTR_OL_ONAL) );
1949
0
                    break;
1950
0
                case UBLOCK_SUNUWAR:
1951
0
                    aAllSubsets.emplace_back( 0x11BC0, 0x11BFF, SvxResId(RID_SUBSETSTR_SUNUWAR) );
1952
0
                    break;
1953
0
                case UBLOCK_SYMBOLS_FOR_LEGACY_COMPUTING_SUPPLEMENT:
1954
0
                    aAllSubsets.emplace_back( 0x1CC00, 0x1CEBF, SvxResId(RID_SUBSETSTR_SYMBOLS_FOR_LEGACY_COMPUTING_SUPPLEMENT) );
1955
0
                    break;
1956
0
                case UBLOCK_TODHRI:
1957
0
                    aAllSubsets.emplace_back( 0x105C0, 0x105FF, SvxResId(RID_SUBSETSTR_TODHRI) );
1958
0
                    break;
1959
0
                case UBLOCK_TULU_TIGALARI:
1960
0
                    aAllSubsets.emplace_back( 0x11380, 0x113FF, SvxResId(RID_SUBSETSTR_TULU_TIGALARI) );
1961
0
                    break;
1962
0
#endif
1963
0
#if (U_ICU_VERSION_MAJOR_NUM >= 78)
1964
0
                case UBLOCK_BERIA_ERFE:
1965
0
                    aAllSubsets.emplace_back( 0x16EA0, 0x16EDF, SvxResId(RID_SUBSETSTR_BERIA_ERFE) );
1966
0
                    break;
1967
0
                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_J:
1968
0
                    aAllSubsets.emplace_back( 0x323B0, 0x3347F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_J) );
1969
0
                    break;
1970
0
                case UBLOCK_MISCELLANEOUS_SYMBOLS_SUPPLEMENT:
1971
0
                    aAllSubsets.emplace_back( 0x1CEC0, 0x1CEFF, SvxResId(RID_SUBSETSTR_MISCELLANEOUS_SYMBOLS_SUPPLEMENT) );
1972
0
                    break;
1973
0
                case UBLOCK_SHARADA_SUPPLEMENT:
1974
0
                    aAllSubsets.emplace_back( 0x11B60, 0x11B7F, SvxResId(RID_SUBSETSTR_SHARADA_SUPPLEMENT) );
1975
0
                    break;
1976
0
                case UBLOCK_SIDETIC:
1977
0
                    aAllSubsets.emplace_back( 0x10940, 0x1095F, SvxResId(RID_SUBSETSTR_SIDETIC) );
1978
0
                    break;
1979
0
                case UBLOCK_TAI_YO:
1980
0
                    aAllSubsets.emplace_back( 0x1E6C0, 0x1E6FF, SvxResId(RID_SUBSETSTR_TAI_YO) );
1981
0
                    break;
1982
0
                case UBLOCK_TANGUT_COMPONENTS_SUPPLEMENT:
1983
0
                    aAllSubsets.emplace_back( 0x18D80, 0x18DFF, SvxResId(RID_SUBSETSTR_TANGUT_COMPONENTS_SUPPLEMENT) );
1984
0
                    break;
1985
0
                case UBLOCK_TOLONG_SIKI:
1986
0
                    aAllSubsets.emplace_back( 0x11DB0, 0x11DEF, SvxResId(RID_SUBSETSTR_TOLONG_SIKI) );
1987
0
                    break;
1988
0
#endif
1989
0
            }
1990
1991
#if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
1992
            if (eBlock != UBLOCK_NO_BLOCK &&
1993
                eBlock != UBLOCK_INVALID_CODE &&
1994
                eBlock != UBLOCK_COUNT &&
1995
                eBlock != UBLOCK_HIGH_SURROGATES &&
1996
                eBlock != UBLOCK_HIGH_PRIVATE_USE_SURROGATES &&
1997
                eBlock != UBLOCK_LOW_SURROGATES)
1998
1999
            {
2000
                UBlockCode eBlockStart = ublock_getCode(aAllSubsets.back().GetRangeMin());
2001
                UBlockCode eBlockEnd = ublock_getCode(aAllSubsets.back().GetRangeMax());
2002
                assert(eBlockStart == eBlockEnd && eBlockStart == eBlock);
2003
            }
2004
#endif
2005
0
        }
2006
2007
0
        std::stable_sort(aAllSubsets.begin(), aAllSubsets.end());
2008
0
        return aAllSubsets;
2009
0
    }();
2010
2011
0
    maSubsets = s_aAllSubsets;
2012
0
}
2013
2014
void SubsetMap::ApplyCharMap( const FontCharMapRef& rxFontCharMap )
2015
0
{
2016
0
    if( !rxFontCharMap.is() )
2017
0
        return;
2018
2019
    // remove subsets that are not matched in any range
2020
0
    std::erase_if(maSubsets,
2021
0
        [&rxFontCharMap](const Subset& rSubset) {
2022
0
            sal_UCS4 cMin = rSubset.GetRangeMin();
2023
0
            sal_UCS4 cMax = rSubset.GetRangeMax();
2024
0
            int nCount = rxFontCharMap->CountCharsInRange( cMin, cMax );
2025
0
            return nCount <= 0;
2026
0
        });
2027
0
}
2028
2029
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */