Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /* FontStyle: Stores (and writes) font-based information that is needed at
3 : * the head of an OO document.
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 : * For further information visit http://libwpd.sourceforge.net
10 : */
11 :
12 : #include "FilterInternal.hxx"
13 :
14 : #include "FontStyle.hxx"
15 :
16 : #include "DocumentElement.hxx"
17 :
18 0 : FontStyle::FontStyle(const char *psName, const char *psFontFamily) : Style(psName),
19 : msFontFamily(psFontFamily, true),
20 0 : msFontPitch(IMP_DEFAULT_FONT_PITCH)
21 : {
22 0 : }
23 :
24 0 : FontStyle::~FontStyle()
25 : {
26 0 : }
27 :
28 0 : void FontStyle::write(OdfDocumentHandler *pHandler) const
29 : {
30 0 : TagOpenElement styleOpen("style:font-face");
31 0 : styleOpen.addAttribute("style:name", getName());
32 0 : styleOpen.addAttribute("svg:font-family", msFontFamily);
33 0 : styleOpen.write(pHandler);
34 0 : TagCloseElement styleClose("style:font-face");
35 0 : styleClose.write(pHandler);
36 0 : }
37 :
38 0 : void FontStyleManager::clean()
39 : {
40 0 : mStyleHash.clear();
41 0 : }
42 :
43 0 : void FontStyleManager::writeFontsDeclaration(OdfDocumentHandler *pHandler) const
44 : {
45 0 : TagOpenElement("office:font-face-decls").write(pHandler);
46 0 : std::map<WPXString, shared_ptr<FontStyle>, ltstr>::const_iterator iter;
47 0 : for (iter = mStyleHash.begin(); iter != mStyleHash.end(); ++iter)
48 : {
49 0 : (iter->second)->write(pHandler);
50 : }
51 :
52 0 : TagOpenElement symbolFontOpen("style:font-face");
53 0 : symbolFontOpen.addAttribute("style:name", "StarSymbol");
54 0 : symbolFontOpen.addAttribute("svg:font-family", "StarSymbol");
55 0 : symbolFontOpen.addAttribute("style:font-charset", "x-symbol");
56 0 : symbolFontOpen.write(pHandler);
57 0 : pHandler->endElement("style:font-face");
58 :
59 0 : pHandler->endElement("office:font-face-decls");
60 0 : }
61 :
62 0 : WPXString FontStyleManager::findOrAdd(const char *psFontFamily)
63 : {
64 : std::map<WPXString, shared_ptr<FontStyle>, ltstr>::const_iterator iter =
65 0 : mStyleHash.find(psFontFamily);
66 0 : if (iter!=mStyleHash.end()) return psFontFamily;
67 :
68 : // ok create a new font
69 0 : shared_ptr<FontStyle> font(new FontStyle(psFontFamily, psFontFamily));
70 0 : mStyleHash[psFontFamily] = font;
71 0 : return psFontFamily;
72 : }
73 :
74 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|