summaryrefslogtreecommitdiffstats
path: root/include/filter/msfilter/util.hxx
blob: 3dd7c88843d00c9a96c995ef78a83a860845fa4c (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
138
139
140
141
142
143
144
145
/* -*- 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/.
 */

#ifndef INCLUDED_FILTER_MSFILTER_UTIL_HXX
#define INCLUDED_FILTER_MSFILTER_UTIL_HXX

#include <filter/msfilter/msfilterdllapi.h>
#include <svx/msdffdef.hxx>
#include <rtl/string.hxx>
#include <rtl/textenc.h>
#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <tools/datetime.hxx>
#include <tools/long.hxx>

class Color;

namespace com::sun::star {
    namespace awt { struct Size; }
    namespace lang { struct Locale; }
}

namespace msfilter::util {

/// Returns the best-fit default 8bit encoding for a given locale
/// i.e. useful when dealing with legacy formats which use legacy text encodings without recording
/// what the encoding is, but you know or can guess the language
MSFILTER_DLLPUBLIC rtl_TextEncoding getBestTextEncodingFromLocale(const css::lang::Locale &rLocale);

/// Convert a color in BGR format to RGB.
MSFILTER_DLLPUBLIC ::Color BGRToRGB(sal_uInt32 nColour);

/** Convert from DTTM to Writer's DateTime
  */
MSFILTER_DLLPUBLIC DateTime DTTM2DateTime( tools::Long lDTTM );

/** Convert DateTime to xsd::dateTime string.

I guess there must be an implementation of this somewhere in LO, but I failed
to find it, unfortunately :-(
*/

/// Given a cBullet in encoding r_ioChrSet and fontname r_ioFontName return a
/// suitable new Bullet and change r_ioChrSet and r_ioFontName to form the
/// best-fit replacement in terms of default available MSOffice symbol
/// fonts.
///
/// Used to map from [Open|Star]Symbol to some Windows font or other.
MSFILTER_DLLPUBLIC sal_Unicode bestFitOpenSymbolToMSFont(sal_Unicode cBullet,
    rtl_TextEncoding& r_ioChrSet, OUString& r_ioFontName);


/**
 * Converts tools Color to HTML color (without leading hashmark).
 *
 * @param rColor color to convert
 */
MSFILTER_DLLPUBLIC OString ConvertColor( const Color &rColor );
MSFILTER_DLLPUBLIC OUString ConvertColorOU( const Color &rColor );


/** Paper size in 1/100 millimeters. */
struct MSFILTER_DLLPUBLIC ApiPaperSize
{
    sal_Int32           mnWidth;
    sal_Int32           mnHeight;
};

class MSFILTER_DLLPUBLIC PaperSizeConv
{
public:
    static sal_Int32 getMSPaperSizeIndex( const css::awt::Size& rSize );
    static const ApiPaperSize& getApiSizeForMSPaperSizeIndex( sal_Int32 nMSOPaperIndex );
};

/**
 * Finds the quoted text in a field instruction text.
 *
 * Example: SEQ "Figure" \someoption -> "Figure"
 */
MSFILTER_DLLPUBLIC std::u16string_view findQuotedText( std::u16string_view rCommand, const char* cStartQuote, const sal_Unicode uEndQuote );

class MSFILTER_DLLPUBLIC WW8ReadFieldParams
{
private:
    const OUString aData;
    sal_Int32 nFnd;
    sal_Int32 nNext;
    sal_Int32 nSavPtr;
public:
    WW8ReadFieldParams( OUString aData );

    bool GoToTokenParam();
    sal_Int32 SkipToNextToken();
    sal_Int32 GetTokenSttPtr() const   { return nFnd;  }

    sal_Int32 FindNextStringPiece( sal_Int32 _nStart = -1 );
    bool GetTokenSttFromTo(sal_Int32* _pFrom, sal_Int32* _pTo, sal_Int32 _nMax);

    OUString GetResult() const;
};

struct MSFILTER_DLLPUBLIC EquationResult
{
    OUString sResult;
    OUString sType;
};

MSFILTER_DLLPUBLIC EquationResult ParseCombinedChars(const OUString& rStr);

/// Similar to EnhancedCustomShapeTypeNames::Get(), but it also supports OOXML types and returns a drawingML string.
MSFILTER_DLLPUBLIC OString GetOOXMLPresetGeometry( std::u16string_view rShapeType );

/// Similar to EnhancedCustomShapeTypeNames::Get(), but returns an MSO_SPT (binary / VML type).
MSFILTER_DLLPUBLIC MSO_SPT GETVMLShapeType(std::u16string_view aType);

/**
 * The following function checks if a MSO shapetype is allowed to have textboxcontent.
 *
 * @param nShapeType shape to check
 */
MSFILTER_DLLPUBLIC bool HasTextBoxContent(sal_uInt32 nShapeType);

/**
 * Convert the input color value to an ico value (0..16)
 *
 * @param[in]   rCol       input color for conversion
 *
 * @return                 ico value [0..16]
**/
MSFILTER_DLLPUBLIC sal_uInt8 TransColToIco( const Color& rCol );

}



#endif

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