LibreOffice Module svgio (master) 1
svgtools.hxx
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#pragma once
21
25#include <rtl/ustrbuf.hxx>
26#include "svgpaint.hxx"
27#include "SvgNumber.hxx"
28
29#include <string_view>
30#include <vector>
31
32
33namespace svgio::svgreader
34 {
35 // common non-token strings
37 {
38 static constexpr OUStringLiteral aStrUserSpaceOnUse = u"userSpaceOnUse";
39 static constexpr OUStringLiteral aStrObjectBoundingBox = u"objectBoundingBox";
40 static constexpr OUStringLiteral aStrNonzero = u"nonzero";
41 static constexpr OUStringLiteral aStrEvenOdd = u"evenodd";
42 };
43
44 enum class SvgUnits
45 {
48 };
49
50 enum class SvgAlign
51 {
52 none,
57 xMidYMid, // default
62 };
63
65 {
66 private:
68
69 bool mbMeetOrSlice : 1; // true = meet (default), false = slice
70 bool mbSet : 1;
71
72 public:
75 mbMeetOrSlice(true),
76 mbSet(false)
77 {
78 }
79
80 SvgAspectRatio(SvgAlign aSvgAlign, bool bMeetOrSlice)
81 : maSvgAlign(aSvgAlign),
82 mbMeetOrSlice(bMeetOrSlice),
83 mbSet(true)
84 {
85 }
86
88 SvgAlign getSvgAlign() const { return maSvgAlign; }
89 bool isMeetOrSlice() const { return mbMeetOrSlice; }
90 bool isSet() const { return mbSet; }
91
94 basegfx::B2DHomMatrix createMapping(const basegfx::B2DRange& rTarget, const basegfx::B2DRange& rSource) const;
95 };
96
97 void skip_char(std::u16string_view rCandidate, sal_Unicode aChar, sal_Int32& nPos, const sal_Int32 nLen);
98 void skip_char(std::u16string_view rCandidate, sal_Unicode aCharA, sal_Unicode nCharB, sal_Int32& nPos, const sal_Int32 nLen);
99 void copySign(std::u16string_view rCandidate, sal_Int32& nPos, OUStringBuffer& rTarget, const sal_Int32 nLen);
100 void copyNumber(std::u16string_view rCandidate, sal_Int32& nPos, OUStringBuffer& rTarget, const sal_Int32 nLen);
101 void copyHex(std::u16string_view rCandidate, sal_Int32& nPos, OUStringBuffer& rTarget, const sal_Int32 nLen);
102 void copyString(std::u16string_view rCandidate, sal_Int32& nPos, OUStringBuffer& rTarget, const sal_Int32 nLen);
103 void copyToLimiter(std::u16string_view rCandidate, sal_Unicode aLimiter, sal_Int32& nPos, OUStringBuffer& rTarget, const sal_Int32 nLen);
104 bool readNumber(std::u16string_view rCandidate, sal_Int32& nPos, double& fNum, const sal_Int32 nLen);
105 SvgUnit readUnit(std::u16string_view rCandidate, sal_Int32& nPos, const sal_Int32 nLen);
106 bool readNumberAndUnit(std::u16string_view rCandidate, sal_Int32& nPos, SvgNumber& aNum, const sal_Int32 nLen);
107 bool readAngle(std::u16string_view rCandidate, sal_Int32& nPos, double& fAngle, const sal_Int32 nLen);
108 sal_Int32 read_hex(sal_Unicode aChar);
109 bool match_colorKeyword(basegfx::BColor& rColor, const OUString& rName);
110 bool read_color(const OUString& rCandidate, basegfx::BColor& rColor, SvgNumber& rOpacity);
111 basegfx::B2DRange readViewBox(std::u16string_view rCandidate, InfoProvider const & rInfoProvider);
112 std::vector<double> readFilterMatrix(std::u16string_view rCandidate, InfoProvider const & rInfoProvider);
113 basegfx::B2DHomMatrix readTransform(std::u16string_view rCandidate, InfoProvider const & rInfoProvider);
114 bool readSingleNumber(std::u16string_view rCandidate, SvgNumber& aNum);
115 bool readLocalLink(std::u16string_view rCandidate, OUString& rURL);
116 bool readLocalUrl(const OUString& rCandidate, OUString& rURL);
117 bool readSvgPaint(const OUString& rCandidate, SvgPaint& rSvgPaint, OUString& rURL, SvgNumber& rOpacity);
118
119 bool readSvgNumberVector(std::u16string_view rCandidate, SvgNumberVector& rSvgNumberVector);
120 ::std::vector< double > solveSvgNumberVector(const SvgNumberVector& rInput, const InfoProvider& rInfoProvider);
121
122 SvgAspectRatio readSvgAspectRatio(std::u16string_view rCandidate);
123
124 typedef ::std::vector< OUString > SvgStringVector;
125 bool readSvgStringVector(std::u16string_view rCandidate, SvgStringVector& rSvgStringVector);
126
127 void readImageLink(const OUString& rCandidate, OUString& rXLink, OUString& rUrl, OUString& rData);
128
129 OUString consolidateContiguousSpace(const OUString& rCandidate);
130
131 // #125325# removes block comment of the general form '/* ... */', returns
132 // an adapted string or the original if no comments included
133 OUString removeBlockComments(const OUString& rCandidate);
134
135} // end of namespace svgio::svgreader
136
137/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SvgAspectRatio(SvgAlign aSvgAlign, bool bMeetOrSlice)
Definition: svgtools.hxx:80
basegfx::B2DHomMatrix createMapping(const basegfx::B2DRange &rTarget, const basegfx::B2DRange &rSource) const
Definition: svgtools.cxx:206
SvgAlign getSvgAlign() const
data read access
Definition: svgtools.hxx:88
static basegfx::B2DHomMatrix createLinearMapping(const basegfx::B2DRange &rTarget, const basegfx::B2DRange &rSource)
tooling
Definition: svgtools.cxx:186
float u
none
void skip_char(std::u16string_view rCandidate, sal_Unicode nChar, sal_Int32 &nPos, const sal_Int32 nLen)
Definition: svgtools.cxx:292
bool readLocalLink(std::u16string_view rCandidate, OUString &rURL)
Definition: svgtools.cxx:1084
std::vector< double > readFilterMatrix(std::u16string_view rCandidate, InfoProvider const &rInfoProvider)
Definition: svgtools.cxx:849
::std::vector< double > solveSvgNumberVector(const SvgNumberVector &rInput, const InfoProvider &rInfoProvider)
Definition: svgtools.cxx:1499
void copySign(std::u16string_view rCandidate, sal_Int32 &nPos, OUStringBuffer &rTarget, const sal_Int32 nLen)
Definition: svgtools.cxx:308
::std::vector< OUString > SvgStringVector
Definition: svgtools.hxx:124
sal_Int32 read_hex(sal_Unicode nChar)
Definition: svgtools.cxx:622
OUString removeBlockComments(const OUString &rCandidate)
Definition: svgtools.cxx:1402
OUString consolidateContiguousSpace(const OUString &rCandidate)
Definition: svgtools.cxx:1452
bool readSingleNumber(std::u16string_view rCandidate, SvgNumber &aNum)
Definition: svgtools.cxx:1076
void copyToLimiter(std::u16string_view rCandidate, sal_Unicode nLimiter, sal_Int32 &nPos, OUStringBuffer &rTarget, const sal_Int32 nLen)
Definition: svgtools.cxx:380
bool readNumber(std::u16string_view rCandidate, sal_Int32 &nPos, double &fNum, const sal_Int32 nLen)
Definition: svgtools.cxx:389
bool readAngle(std::u16string_view rCandidate, sal_Int32 &nPos, double &fAngle, const sal_Int32 nLen)
Definition: svgtools.cxx:559
std::vector< SvgNumber > SvgNumberVector
Definition: SvgNumber.hxx:111
bool readSvgNumberVector(std::u16string_view rCandidate, SvgNumberVector &rSvgNumberVector)
Definition: svgtools.cxx:1174
bool readSvgPaint(const OUString &rCandidate, SvgPaint &rSvgPaint, OUString &rURL, SvgNumber &rOpacity)
Definition: svgtools.cxx:1139
void copyNumber(std::u16string_view rCandidate, sal_Int32 &nPos, OUStringBuffer &rTarget, const sal_Int32 nLen)
Definition: svgtools.cxx:322
bool readLocalUrl(const OUString &rCandidate, OUString &rURL)
Definition: svgtools.cxx:1102
basegfx::B2DHomMatrix readTransform(std::u16string_view rCandidate, InfoProvider const &rInfoProvider)
Definition: svgtools.cxx:871
SvgUnit readUnit(std::u16string_view rCandidate, sal_Int32 &nPos, const sal_Int32 nLen)
Definition: svgtools.cxx:441
bool match_colorKeyword(basegfx::BColor &rColor, const OUString &rName)
Definition: svgtools.cxx:643
bool read_color(const OUString &rCandidate, basegfx::BColor &rColor, SvgNumber &rOpacity)
Definition: svgtools.cxx:658
bool readNumberAndUnit(std::u16string_view rCandidate, sal_Int32 &nPos, SvgNumber &aNum, const sal_Int32 nLen)
Definition: svgtools.cxx:544
SvgAspectRatio readSvgAspectRatio(std::u16string_view rCandidate)
Definition: svgtools.cxx:1197
void copyHex(std::u16string_view rCandidate, sal_Int32 &nPos, OUStringBuffer &rTarget, const sal_Int32 nLen)
Definition: svgtools.cxx:340
bool readSvgStringVector(std::u16string_view rCandidate, SvgStringVector &rSvgStringVector)
Definition: svgtools.cxx:1319
void copyString(std::u16string_view rCandidate, sal_Int32 &nPos, OUStringBuffer &rTarget, const sal_Int32 nLen)
Definition: svgtools.cxx:360
basegfx::B2DRange readViewBox(std::u16string_view rCandidate, InfoProvider const &rInfoProvider)
Definition: svgtools.cxx:808
void readImageLink(const OUString &rCandidate, OUString &rXLink, OUString &rUrl, OUString &rData)
Definition: svgtools.cxx:1346
static constexpr OUStringLiteral aStrEvenOdd
Definition: svgtools.hxx:41
static constexpr OUStringLiteral aStrNonzero
Definition: svgtools.hxx:40
static constexpr OUStringLiteral aStrUserSpaceOnUse
Definition: svgtools.hxx:38
static constexpr OUStringLiteral aStrObjectBoundingBox
Definition: svgtools.hxx:39
sal_uInt16 sal_Unicode