LibreOffice Module drawinglayer (master) 1
emfpstringformat.cxx
Go to the documentation of this file.
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 <sal/log.hxx>
21#include <rtl/ustrbuf.hxx>
22#include "emfpstringformat.hxx"
23
24namespace emfplushelper
25{
27 : header(0)
28 , stringFormatFlags(0)
29 , language(0)
30 , stringAlignment(0)
31 , lineAlign(0)
32 , digitSubstitution(0)
33 , digitLanguage(0)
34 , firstTabOffset(0.0)
35 , hotkeyPrefix(0)
36 , leadingMargin(0.0)
37 , trailingMargin(0.0)
38 , tracking(1.0)
39 , trimming(0)
40 , tabStopCount(0)
41 , rangeCount(0)
42 {
43 }
44
45 static OUString StringFormatFlags(sal_uInt32 flag)
46 {
47 OUStringBuffer sFlags;
48
49 // These are extracted from enum in emfpstringformat.hxx
51 sFlags.append("StringFormatDirectionRightToLeft ");
52
54 sFlags.append("StringFormatDirectionVertical ");
55
57 sFlags.append("StringFormatNoFitBlackBox ");
58
60 sFlags.append("StringFormatDisplayFormatControl ");
61
63 sFlags.append("StringFormatNoFontFallback ");
64
66 sFlags.append("StringFormatMeasureTrailingSpaces ");
67
68 if (flag & StringFormatNoWrap)
69 sFlags.append("StringFormatNoWrap ");
70
71 if (flag & StringFormatLineLimit)
72 sFlags.append("StringFormatLineLimit ");
73
74 if (flag & StringFormatNoClip)
75 sFlags.append("StringFormatNoClip ");
76
77 if (flag & StringFormatBypassGDI)
78 sFlags.append("StringFormatBypassGDI ");
79
80 // There will be 1 extra space in the end. It could be truncated, but
81 // as it is for SAL_INFO() only, it would not be important
82 return sFlags.makeStringAndClear();
83 }
84
85 static OUString StringAlignmentString(sal_uInt32 nAlignment)
86 {
87 switch(nAlignment)
88 {
90 return "StringAlignmentNear";
92 return "StringAlignmentCenter";
94 return "StringAlignmentFar";
95 default:
96 assert(false && nAlignment && "invalid string alignment value");
97 return "INVALID";
98 }
99 }
100
101 static OUString DigitSubstitutionString(sal_uInt32 nSubst)
102 {
103 switch(nSubst)
104 {
106 return "StringDigitSubstitutionUser";
108 return "StringDigitSubstitutionNone";
110 return "StringDigitSubstitutionNational";
112 return "StringDigitSubstitutionTraditional";
113 default:
114 assert(false && nSubst && "invalid string digit substitution value");
115 return "INVALID";
116 }
117 }
118
119 static OUString HotkeyPrefixString(sal_uInt32 nHotkey)
120 {
121 switch(nHotkey)
122 {
124 return "HotkeyPrefixNone";
126 return "HotkeyPrefixShow";
128 return "HotkeyPrefixHide";
129 default:
130 assert(false && nHotkey && "invalid hotkey prefix value");
131 return "INVALID";
132 }
133 }
134
135 static OUString StringTrimmingString(sal_uInt32 nTrimming)
136 {
137 switch(nTrimming)
138 {
140 return "StringTrimmingNone";
142 return "StringTrimmingCharacter";
144 return "StringTrimmingWord";
146 return "StringTrimmingEllipsisCharacter";
148 return "StringTrimmingEllipsisWord";
150 return "StringTrimmingEllipsisPath";
151 default:
152 assert(false && nTrimming && "invalid trim value");
153 return "INVALID";
154 }
155 }
156
158 {
163 // keep only the last 16 bits of language
164 language >>= 16;
165 digitLanguage >>= 16;
166 SAL_WARN_IF((header >> 12) != 0xdbc01, "drawinglayer.emf", "Invalid header - not 0xdbc01");
167 SAL_INFO("drawinglayer.emf", "EMF+\tString format");
168 SAL_INFO("drawinglayer.emf", "EMF+\t\tHeader: 0x" << std::hex << (header >> 12));
169 SAL_INFO("drawinglayer.emf", "EMF+\t\tVersion: 0x" << (header & 0x1fff) << std::dec);
170 SAL_INFO("drawinglayer.emf", "EMF+\t\tStringFormatFlags: " << StringFormatFlags(stringFormatFlags));
171 SAL_INFO("drawinglayer.emf", "EMF+\t\tLanguage: sublangid: 0x" << std::hex << (language >> 10) << ", primarylangid: 0x" << (language & 0xF800));
172 SAL_INFO("drawinglayer.emf", "EMF+\t\tLineAlign: " << StringAlignmentString(lineAlign));
173 SAL_INFO("drawinglayer.emf", "EMF+\t\tDigitSubstitution: " << DigitSubstitutionString(digitSubstitution));
174 SAL_INFO("drawinglayer.emf", "EMF+\t\tDigitLanguage: sublangid: 0x" << std::hex << (digitLanguage >> 10) << ", primarylangid: 0x" << (digitLanguage & 0xF800));
175 SAL_INFO("drawinglayer.emf", "EMF+\t\tFirstTabOffset: " << firstTabOffset);
176 SAL_INFO("drawinglayer.emf", "EMF+\t\tHotkeyPrefix: " << HotkeyPrefixString(hotkeyPrefix));
177 SAL_INFO("drawinglayer.emf", "EMF+\t\tLeadingMargin: " << leadingMargin);
178 SAL_INFO("drawinglayer.emf", "EMF+\t\tTrailingMargin: " << trailingMargin);
179 SAL_INFO("drawinglayer.emf", "EMF+\t\tTracking: " << tracking);
180 SAL_INFO("drawinglayer.emf", "EMF+\t\tTrimming: " << StringTrimmingString(trimming));
181 SAL_INFO("drawinglayer.emf", "EMF+\t\tTabStopCount: " << tabStopCount);
182 SAL_INFO("drawinglayer.emf", "EMF+\t\tRangeCount: " << rangeCount);
183
185 "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:digitSubstitution");
186 SAL_WARN_IF(firstTabOffset != 0.0, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:firstTabOffset");
187 SAL_WARN_IF(hotkeyPrefix != HotkeyPrefix::HotkeyPrefixNone, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:hotkeyPrefix");
188 SAL_WARN_IF(tracking != 1.0, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:tracking");
189 SAL_WARN_IF(trimming != StringTrimming::StringTrimmingNone, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:trimming");
190 SAL_WARN_IF(tabStopCount, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:tabStopCount");
191 SAL_WARN_IF(rangeCount != 0, "drawinglayer.emf", "EMF+\t TODO EMFPStringFormat:StringFormatData");
192 }
193}
194
195/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
constexpr sal_Int8 header[]
SvStream & ReadFloat(float &rFloat)
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
SvStream & ReadInt32(sal_Int32 &rInt32)
#define SAL_WARN_IF(condition, area, stream)
#define SAL_INFO(area, stream)
const sal_uInt32 StringFormatNoClip
const sal_uInt32 StringFormatNoFitBlackBox
const sal_uInt32 StringFormatDirectionVertical
const sal_uInt32 StringFormatBypassGDI
static OUString HotkeyPrefixString(sal_uInt32 nHotkey)
@ StringDigitSubstitutionTraditional
static OUString StringFormatFlags(sal_uInt32 flag)
static OUString StringTrimmingString(sal_uInt32 nTrimming)
const sal_uInt32 StringFormatMeasureTrailingSpaces
const sal_uInt32 StringFormatLineLimit
static OUString DigitSubstitutionString(sal_uInt32 nSubst)
static OUString StringAlignmentString(sal_uInt32 nAlignment)
const sal_uInt32 StringFormatDisplayFormatControl
const sal_uInt32 StringFormatNoWrap
const sal_uInt32 StringFormatDirectionRightToLeft
const sal_uInt32 StringFormatNoFontFallback