1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
22 #include <rtl/textenc.h>
23 #include <tools/gen.hxx>
24 #include <tools/color.hxx>
25 #include <vcl/vclptr.hxx>
29 #include <svx/xoutbmp.hxx>
31 #include "expbase.hxx"
41 enum class SvtScriptType
: sal_uInt8
;
42 namespace editeng
{ class SvxBorderLine
; }
45 struct ColumnBlockPosition
;
49 { // Defaults from stylesheet
50 Color aBackgroundColor
;
51 OUString aFontFamilyName
;
52 sal_uInt32 nFontHeight
; // Item-Value
53 sal_uInt16 nFontSizeNumber
; // HTML value 1-7
54 SvtScriptType nDefaultScriptType
; // Font values are valid for the default script type
64 const ScHTMLStyle
& operator=( const ScHTMLStyle
& rScHTMLStyle
)
66 aBackgroundColor
= rScHTMLStyle
.aBackgroundColor
;
67 aFontFamilyName
= rScHTMLStyle
.aFontFamilyName
;
68 nFontHeight
= rScHTMLStyle
.nFontHeight
;
69 nFontSizeNumber
= rScHTMLStyle
.nFontSizeNumber
;
70 nDefaultScriptType
= rScHTMLStyle
.nDefaultScriptType
;
71 bInitialized
= rScHTMLStyle
.bInitialized
;
76 struct ScHTMLGraphEntry
78 ScRange aRange
; // mapped range
79 Size aSize
; // size in pixels
80 Size aSpace
; // spacing in pixels
82 bool bInCell
; // if output is in cell
85 ScHTMLGraphEntry( SdrObject
* pObj
, const ScRange
& rRange
,
86 const Size
& rSize
, bool bIn
, const Size
& rSpace
) :
96 #define SC_HTML_FONTSIZES 7
97 const short nIndentMax
= 23;
99 class ScHTMLExport
: public ScExportBase
101 // default HtmlFontSz[1-7]
102 static const sal_uInt16 nDefaultFontSize
[SC_HTML_FONTSIZES
];
103 // HtmlFontSz[1-7] in s*3.ini [user]
104 static sal_uInt16 nFontSize
[SC_HTML_FONTSIZES
];
105 static const char* pFontSizeCss
[SC_HTML_FONTSIZES
];
106 static const sal_uInt16 nCellSpacing
;
107 static const char sIndentSource
[];
109 typedef std::unique_ptr
<std::map
<OUString
, OUString
> > FileNameMapPtr
;
110 typedef std::vector
<ScHTMLGraphEntry
> GraphEntryList
;
112 GraphEntryList aGraphList
;
113 ScHTMLStyle aHTMLStyle
;
115 OUString aStreamPath
;
116 VclPtr
<OutputDevice
> pAppWin
; // for Pixel-work
117 FileNameMapPtr pFileNameMap
; // for CopyLocalFileToINet
118 OUString aNonConvertibleChars
; // collect nonconvertible characters
121 char sIndent
[nIndentMax
+1];
122 bool bAll
; // whole document
123 bool bTabHasGraphics
;
124 bool bTabAlignedLeft
;
126 bool bCopyLocalFileToINet
;
127 bool bTableDataHeight
;
129 /// If HTML header and footer should be written as well, or just the content itself.
130 bool mbSkipHeaderFooter
;
132 const SfxItemSet
& PageDefaults( SCTAB nTab
);
136 void WriteOverview();
138 void WriteCell( sc::ColumnBlockPosition
& rBlockPos
, SCCOL nCol
, SCROW nRow
, SCTAB nTab
);
139 void WriteGraphEntry( ScHTMLGraphEntry
* );
140 void WriteImage( OUString
& rLinkName
,
141 const Graphic
&, std::string_view rImgOptions
,
142 XOutFlags nXOutFlags
= XOutFlags::NONE
);
143 // nXOutFlags for XOutBitmap::WriteGraphic
145 // write to stream if and only if URL fields in edit cell
146 bool WriteFieldText( const EditTextObject
* pData
);
148 // copy a local file to internet if needed
149 void CopyLocalFileToINet( OUString
& rFileNm
, std::u16string_view rTargetNm
);
151 void PrepareGraphics( ScDrawLayer
*, SCTAB nTab
,
152 SCCOL nStartCol
, SCROW nStartRow
,
153 SCCOL nEndCol
, SCROW nEndRow
);
155 void FillGraphList( const SdrPage
*, SCTAB nTab
,
156 SCCOL nStartCol
, SCROW nStartRow
,
157 SCCOL nEndCol
, SCROW nEndRow
);
159 static OString
BorderToStyle(const char* pBorderName
,
160 const editeng::SvxBorderLine
* pLine
,
161 bool& bInsertSemicolon
);
163 static sal_uInt16
GetFontSizeNumber( sal_uInt16 nHeight
);
164 static const char* GetFontSizeCss( sal_uInt16 nHeight
);
165 sal_uInt16
ToPixel( sal_uInt16 nTwips
);
166 Size
MMToPixel( const Size
& r100thMMSize
);
167 void IncIndent( short nVal
);
169 const char* GetIndentStr() const
175 ScHTMLExport( SvStream
&, OUString
, ScDocument
*, const ScRange
&,
176 bool bAll
, OUString aStreamPath
, std::u16string_view aFilterOptions
);
177 virtual ~ScHTMLExport() override
;
179 const OUString
& GetNonConvertibleChars() const
181 return aNonConvertibleChars
;
185 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */