summaryrefslogtreecommitdiff
path: root/include/filter/msfilter/util.hxx
blob: 8c9f29a5ef3024e74e2067785cce4a15ee7e7076 (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
/* -*- 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 <rtl/textenc.h>
#include <tools/datetime.hxx>
#include <tools/color.hxx>
#include <com/sun/star/lang/Locale.hpp>
#include "filter/msfilter/msfilterdllapi.h"
#include <com/sun/star/awt/Size.hpp>

namespace msfilter {
namespace 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 ::com::sun::star::lang::Locale &rLocale);

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

/** Convert from DTTM to Writer's DateTime

  @author
  <a href="mailto:mmaher@openoffice.org">Martin Maher</a
  */
MSFILTER_DLLPUBLIC DateTime DTTM2DateTime( 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 :-(
*/
MSFILTER_DLLPUBLIC OString DateTimeToOString( const DateTime& rDateTime );

/// 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.
///
/// Set bDisableUnicodeSupport when exporting to 8bit encodings
///
/// 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, bool bDisableUnicodeSupport = false);


enum TextCategory
{
    latin,      //Latin
    cs,         //Complex Script
    ea,         //East Asian
    sym         //Symbol
};

/** Categorize codepoints according to how MS seems to do it.

  It's been bugging me for ages as to what codepoint MS considers in
  what category. Tom Jebo has a post suggesting the criteria used here
  and indicating its been submitting to the standards working group
  as a proposed resolution.
*/
MSFILTER_DLLPUBLIC TextCategory categorizeCodePoint(sal_uInt32 codePoint, const OUString &rBcp47LanguageTag);

/// Converts tools Color to HTML color (without leading hashmark).
MSFILTER_DLLPUBLIC OString ConvertColor( 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 com::sun::star::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 OUString findQuotedText( const OUString& rCommand, const sal_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( const OUString& rData );
    ~WW8ReadFieldParams();

    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);

}

}

#endif

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