summaryrefslogtreecommitdiffstats
path: root/include/svl/languageoptions.hxx
blob: 5fc9c8624dc41dc46939e7ca9cd29b4aa212236d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#ifndef INCLUDED_SVL_LANGUAGEOPTIONS_HXX
#define INCLUDED_SVL_LANGUAGEOPTIONS_HXX

#include <svl/svldllapi.h>
#include <sal/types.h>
#include <o3tl/typed_flags_set.hxx>
#include <unotools/configitem.hxx>
#include <unotools/options.hxx>
#include <i18nlangtag/lang.h>
#include <memory>

// class SvtLanguageOptions ----------------------------------------------------

// these defines can be ORed
// note these values DO NOT match the values in css::i18n::ScriptType
enum class SvtScriptType
{
    NONE         = 0x00,
    LATIN        = 0x01,
    ASIAN        = 0x02,
    COMPLEX      = 0x04,
    UNKNOWN      = 0x08 // (only used in SC) if type has not been determined yet
};
namespace o3tl
{
    template<> struct typed_flags<SvtScriptType> : is_typed_flags<SvtScriptType, 0x0f> {};
}

class SvtCJKOptions;
class SvtCTLOptions;

class SVL_DLLPUBLIC SvtLanguageOptions final : public ::utl::detail::Options
{
private:
    std::unique_ptr<SvtCJKOptions>  m_pCJKOptions;
    std::unique_ptr<SvtCTLOptions>  m_pCTLOptions;

public:
    enum EOption
    {
        // cjk options
        E_CJKFONT,
        E_VERTICALTEXT,
        E_ASIANTYPOGRAPHY,
        E_JAPANESEFIND,
        E_RUBY,
        E_CHANGECASEMAP,
        E_DOUBLELINES,
        E_EMPHASISMARKS,
        E_VERTICALCALLOUT,
        E_ALLCJK,
        // ctl options
        E_CTLFONT,
        E_CTLSEQUENCECHECKING,
        E_CTLCURSORMOVEMENT,
        E_CTLTEXTNUMERALS
    };

    // bDontLoad is for referencing purposes only
    SvtLanguageOptions( bool _bDontLoad = false );
    virtual ~SvtLanguageOptions() override;

    // CJK options
    bool    IsCJKFontEnabled() const;
    bool    IsVerticalTextEnabled() const;
    bool    IsAsianTypographyEnabled() const;
    bool    IsJapaneseFindEnabled() const;
    void    SetAll( bool _bSet );
    bool    IsAnyEnabled() const;

    // CTL options
    void    SetCTLFontEnabled( bool _bEnabled );
    bool    IsCTLFontEnabled() const;

    void    SetCTLSequenceChecking( bool _bEnabled );

    void    SetCTLSequenceCheckingRestricted( bool _bEnable );

    void    SetCTLSequenceCheckingTypeAndReplace( bool _bEnable );

    bool    IsReadOnly(EOption eOption) const;

    // returns for a language the scripttype
    static  SvtScriptType GetScriptTypeOfLanguage( LanguageType nLang );

    // convert from css::i18n::ScriptType constants to SvtScriptType
    static SvtScriptType FromI18NToSvtScriptType( sal_Int16 nI18NType );

    static sal_Int16 FromSvtScriptTypeToI18N( SvtScriptType nI18NType );

    static sal_Int16 GetI18NScriptTypeOfLanguage( LanguageType nLang );

};

/** #i42730# Gives access to the Windows 16bit system locale
 */
class SvtSystemLanguageOptions final : public utl::ConfigItem
{
private:
    OUString m_sWin16SystemLocale;

    bool            isKeyboardLayoutTypeInstalled(sal_Int16 scriptType) const;

    virtual void    ImplCommit() override;

public:
    SvtSystemLanguageOptions();
    virtual ~SvtSystemLanguageOptions() override;

    virtual void    Notify( const css::uno::Sequence< OUString >& rPropertyNames ) override;

    LanguageType    GetWin16SystemLanguage() const;

    bool            isCJKKeyboardLayoutInstalled() const;
};

#endif // INCLUDED_SVL_LANGUAGEOPTIONS_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */