Donner
C++20 SVG rendering library
Loading...
Searching...
No Matches
donner Namespace Reference

Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css. More...

Namespaces

namespace  css
 Donner CSS library, a standalone composable CSS parser.
 
namespace  svg
 Donner SVG library, which can load, manipulate and render SVG files.
 

Classes

struct  AbsoluteLengthMetrics
 A container with ratios for converting absolute lengths, such as "cm" or "in", see https://www.w3.org/TR/css-values/#absolute-lengths. More...
 
struct  Box
 A 2D axis-aligned bounding box. More...
 
struct  CaseInsensitiveCharTraits
 Type traits for case-insensitive string comparison, usable with algorithms that accept an STL std::char_traits. More...
 
class  ElementTraversalGenerator
 Selectors may need to traverse the tree in different ways to match, and this is abstracted away using C++20 coroutines. More...
 
class  FakeElement
 A test fake for a type that satisfies the ElementLike concept. More...
 
struct  FontMetrics
 A container for font information relevant for computing font-relative lengths, per https://www.w3.org/TR/css-values/#font-relative-lengths. More...
 
struct  Length
 Parses a CSS <length-percentage> type as defined by https://www.w3.org/TR/css-values-3/#typedef-length-percentage. More...
 
struct  MathConstants
 Contains a set of math constants for the specified type (float or double). More...
 
struct  MathConstants< double >
 Math constants for double. More...
 
struct  MathConstants< float >
 Math constants for float. More...
 
class  OptionalRef
 A class that simulates an optional reference to a constant object of type T. More...
 
struct  QuadraticSolution
 Holds the solution of a quadratic equation, as returned by SolveQuadratic. More...
 
class  RcString
 A reference counted string, that is copy-on-write and implements the small-string optimization. More...
 
class  RcStringOrRef
 An in-transit type that can hold either an RcString or std::string_view, to enable transferring the RcString reference or also accepting a non-owning std::string_view from API surfaces. More...
 
class  SmallVector
 A vector with small-size optimization. More...
 
class  StringUtils
 A collection of string utils, such as case-insensitive comparison and StartsWith/EndsWith. More...
 
struct  Transform
 A 2D matrix representing an affine transformation. More...
 
struct  Vector2
 A 2D vector, (x, y). More...
 
struct  XMLQualifiedName
 Represents an XML attribute name with an optional namespace. More...
 
struct  XMLQualifiedNameRef
 Reference type for XMLQualifiedName, to pass the value to APIs without needing to allocate an RcString. More...
 

Concepts

concept  ElementLike
 Concept for types that can be matched against a selector, such as a donner::svg::SVGElement.
 
concept  StringLike
 A concept for types that are string-like, i.e.
 

Typedefs

typedef Box< double > Boxd
 Shorthand for Box<double>.
 
typedef Length< double > Lengthd
 Shorthand for Length<double>.
 
typedef Transform< float > Transformf
 Shorthand for Transform<float>
 
typedef Transform< double > Transformd
 Shorthand for Transform<double>
 
typedef Vector2< float > Vector2f
 Shorthand for Vector2<float>
 
typedef Vector2< double > Vector2d
 Shorthand for Vector2<double>
 
typedef Vector2< int > Vector2i
 Shorthand for Vector2<int>
 

Enumerations

enum class  LengthUnit {
  None ,
  Percent ,
  _ABSOLUTE ,
  Cm ,
  Mm ,
  Q ,
  In ,
  Pc ,
  Pt ,
  Px ,
  _RELATIVE ,
  Em ,
  Ex ,
  Ch ,
  Rem ,
  Vw ,
  Vh ,
  Vmin ,
  Vmax
}
 The unit identifier for a length, corresponding to CSS unit identifiers. More...
 
enum class  StringComparison {
  Default ,
  IgnoreCase
}
 String comparison options, e.g. case sensitivity. More...
 

Functions

template<ElementLike T>
ElementTraversalGenerator< T > singleElementGenerator (T element)
 A generator that yields a single element, if it exists.
 
template<ElementLike T>
ElementTraversalGenerator< T > parentsGenerator (T element)
 A generator that yields all parents of an element, repeatedly following parentElement() until reaching the root.
 
template<ElementLike T>
ElementTraversalGenerator< T > previousSiblingsGenerator (T element)
 A generator that yields all siblings of an element, in reverse order.
 
template<ElementLike T>
ElementTraversalGenerator< T > allChildrenRecursiveGenerator (T element)
 A generator that yields all children of an element recursively with pre-order traversal.
 
std::ostream & operator<< (std::ostream &os, LengthUnit unit)
 OStream output operator, writes the enum value as a stream, e.g. Percent or Px.
 
float NarrowToFloat (double from)
 Semantically represent a narrowing conversion, such as converting a double to a float, to make the conversion more visible.
 
template<typename T >
const T & Min (const T &a, const T &b)
 Returns minimum of the provided values.
 
template<typename T , typename... Args>
const T & Min (const T &a, const T &b, Args &&... args)
 Returns minimum of the provided values.
 
template<typename T >
const T & Max (const T &a, const T &b)
 Returns maximum of the provided values.
 
template<typename T , typename... Args>
const T & Max (const T &a, const T &b, Args &&... args)
 Returns maximum of the provided values.
 
float Abs (float a)
 Returns the absolute value of the number.
 
double Abs (double a)
 Returns the absolute value of the number.
 
template<typename T , typename = std::enable_if<std::is_integral<T>::value && std::is_signed<T>::value>>
Abs (T a)
 Returns the absolute value of the number.
 
template<typename T , typename = std::enable_if<std::is_floating_point<T>::value>>
Round (T orig)
 Round a floating point value to an integer.
 
template<typename T >
Lerp (T a, T b, const float t)
 Returns linear interpolation of a and b with ratio t.
 
template<typename T >
const T Clamp (T value, T low, T high)
 Clamps a value between low and high.
 
template<typename T >
bool NearEquals (T a, T b, T tolerance=std::numeric_limits< T >::epsilon())
 Returns if a equals b, taking possible rounding errors into account.
 
template<typename T >
bool NearZero (T a, T tolerance=std::numeric_limits< T >::epsilon())
 Returns if a equals zero, taking rounding errors into account.
 
template<typename T , typename = std::enable_if<std::is_integral<T>::value>>
bool InRange (T var, T start, T end)
 Test if a variable is in a specific range, using an optimized technique that requires only one branch.
 
template<typename T >
QuadraticSolution< T > SolveQuadratic (T a, T b, T c)
 Solve a quadratic equation.
 
 MATCHER_P (ToStringIs, expected, "")
 Matches the string representation of an object, by calling testing::PrintToString and comparing the results with the expected value.
 
 MATCHER_P2 (Vector2Eq, xMatcher, yMatcher, "")
 Matches a Vector.
 
 MATCHER_P2 (Vector2Near, xValue, yValue, "")
 Matches a Vector2 with DoubleNear(0.01).
 
 MATCHER_P (NormalizedEq, expectedVector, "")
 Matches if two vectors are equal when both are normalized, within an error of 0.01.
 
 MATCHER_P (TransformEq, other, "transform eq "+testing::PrintToString(other))
 Matches a transform with near-equals comparison.
 
 MATCHER_P6 (TransformIs, d0, d1, d2, d3, d4, d5, "")
 Matches a transform per-element, with a near-equals comparison using a threshold of 0.0001.
 
 MATCHER (TransformIsIdentity, "")
 Matches if a transform is identity.
 
 MATCHER_P2 (BoxEq, topLeftMatcher, bottomRightMatcher, "")
 Matches a Box.
 
 MATCHER_P2 (LengthIs, valueMatcher, unitMatcher, "")
 Matches a Length.
 

Detailed Description

Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css.


Class Documentation

◆ donner::MathConstants

struct donner::MathConstants
template<typename T>
struct donner::MathConstants< T >

Contains a set of math constants for the specified type (float or double).

Template Parameters
T

◆ donner::QuadraticSolution

struct donner::QuadraticSolution
template<typename T>
struct donner::QuadraticSolution< T >

Holds the solution of a quadratic equation, as returned by SolveQuadratic.

Template Parameters
T
Collaboration diagram for donner::QuadraticSolution< T >:
[legend]
Class Members
bool hasSolution = false True if the equation has solutions.
array< T, 2 > solution Solutions to the equation, valid if hasSolution is true.

Enumeration Type Documentation

◆ LengthUnit

enum class donner::LengthUnit
strong

The unit identifier for a length, corresponding to CSS unit identifiers.

See https://www.w3.org/TR/css-values-3/#lengths for definitions.

Enumerator
None 

Unitless.

Percent 

Percentage, using the '%' symbol.

_ABSOLUTE 

Absolute lengths, https://www.w3.org/TR/css-values-3/#absolute-lengths.

Cm 

Centimeters, 1cm = 96px/2.54.

Mm 

Millimeters, 1mm = 1/10th of 1cm.

Quarter-millimeters, 1Q = 1/40th of 1cm.

In 

Inches, 1in = 2.54cm = 96px.

Pc 

Picas, 1pc = 1/6th of 1in.

Pt 

Points, 1pt = 1/72nd of 1in.

Px 

Pixels, 1px = 1/96th of 1in.

_RELATIVE 

Relative lengths, https://www.w3.org/TR/css-values-3/#relative-lengths.

Em 

Font size, 1em = current font size.

Ex 

x-height of the current font, 1ex = x-height of current font.

Ch 

Width of the glyph '0' in the current font, 1ch = width of '0' in current font.

Rem 

Root font size, 1rem = font size of the root element.

Vw 

Viewport width, 1vw = 1% of viewport width.

Vh 

Viewport height, 1vh = 1% of viewport height.

Vmin 

Smaller of viewport width and height, 1vmin = 1% of smaller of viewport width and height.

Vmax 

Larger of viewport width and height, 1vmax = 1% of larger of viewport width and height.

◆ StringComparison

enum class donner::StringComparison
strong

String comparison options, e.g. case sensitivity.

Enumerator
Default 

The default case-sensitive string comparison.

IgnoreCase 

Case-insensitive string comparison.

Function Documentation

◆ InRange()

template<typename T , typename = std::enable_if<std::is_integral<T>::value>>
bool donner::InRange ( T var,
T start,
T end )
inline

Test if a variable is in a specific range, using an optimized technique that requires only one branch.

Some compilers do this automatically.

Example:

if (InRange(var, 'a', 'z')) // ...
bool InRange(T var, T start, T end)
Test if a variable is in a specific range, using an optimized technique that requires only one branch...
Definition MathUtils.h:217

◆ Lerp()

template<typename T >
T donner::Lerp ( T a,
T b,
const float t )
inline

Returns linear interpolation of a and b with ratio t.

Returns
a if t == 0, b if t == 1, and the linear interpolation else.

◆ MATCHER_P() [1/3]

donner::MATCHER_P ( NormalizedEq ,
expectedVector ,
""  )

Matches if two vectors are equal when both are normalized, within an error of 0.01.

Example:

EXPECT_THAT(Vector2d(1.0, 2.0), NormalizedEq(Vector2d(2.0, 4.0)));
Vector2< double > Vector2d
Shorthand for Vector2<double>
Definition Vector2.h:394
Parameters
expectedVectorExpected value vector, which will be normalized.

◆ MATCHER_P() [2/3]

donner::MATCHER_P ( ToStringIs ,
expected ,
""  )

Matches the string representation of an object, by calling testing::PrintToString and comparing the results with the expected value.

Example:

EXPECT_THAT(myObject, ToStringIs("MyObject(foo)"));
Parameters
expectedExpected string representation.

◆ MATCHER_P() [3/3]

donner::MATCHER_P ( TransformEq ,
other ,
"transform eq "+ testing::PrintToStringother )

Matches a transform with near-equals comparison.

Example:

EXPECT_THAT(result, TransformEq(Transformd::Scale({2.0, 2.0})));
static Transform Scale(const Vector2< double > &extent)
Return a 2D scale matrix.
Definition Transform.h:107
Parameters
otherTransform object to compare.

◆ MATCHER_P2() [1/4]

donner::MATCHER_P2 ( BoxEq ,
topLeftMatcher ,
bottomRightMatcher ,
""  )

Matches a Box.

Parameters
topLeftMatcherMatcher for topLeft field.
bottomRightMatcherMatcher for bottomRight field.

◆ MATCHER_P2() [2/4]

donner::MATCHER_P2 ( LengthIs ,
valueMatcher ,
unitMatcher ,
""  )

Matches a Length.

Example:

EXPECT_THAT(Length(10.0, Lengthd::Unit::Cm), LengthIs(10.0, Lengthd::Unit::Cm));
Parses a CSS <length-percentage> type as defined by https://www.w3.org/TR/css-values-3/#typedef-lengt...
Definition Length.h:99
Parameters
valueMatcherMatcher for value field.
unitMatcherMatcher for unit field.

◆ MATCHER_P2() [3/4]

donner::MATCHER_P2 ( Vector2Eq ,
xMatcher ,
yMatcher ,
""  )

Matches a Vector.

Example:

EXPECT_THAT(Vector2i(1, 2), Vector2Eq(1, 2));
Vector2< int > Vector2i
Shorthand for Vector2<int>
Definition Vector2.h:397
Parameters
xMatcherX coordinate matcher.
yMatcherY coordinate matcher.

◆ MATCHER_P2() [4/4]

donner::MATCHER_P2 ( Vector2Near ,
xValue ,
yValue ,
""  )

Matches a Vector2 with DoubleNear(0.01).

Parameters
xValueX coordinate, note that this is not a matcher.
yValueY coordinate, note that this is not a matcher.

◆ MATCHER_P6()

donner::MATCHER_P6 ( TransformIs ,
d0 ,
d1 ,
d2 ,
d3 ,
d4 ,
d5 ,
""  )

Matches a transform per-element, with a near-equals comparison using a threshold of 0.0001.

Example:

EXPECT_THAT(result, TransformIs(1.0, 0.0, 0.0, 1.0, 0.0, 0.0));
Parameters
d0Corresponds to Transform::data[0]
d1Corresponds to Transform::data[1]
d2Corresponds to Transform::data[2]
d3Corresponds to Transform::data[3]
d4Corresponds to Transform::data[4]
d5Corresponds to Transform::data[5]

◆ NarrowToFloat()

float donner::NarrowToFloat ( double from)
inline

Semantically represent a narrowing conversion, such as converting a double to a float, to make the conversion more visible.

For example: const float f = NarrowToFloat(1.0);

◆ parentsGenerator()

template<ElementLike T>
ElementTraversalGenerator< T > donner::parentsGenerator ( T element)

A generator that yields all parents of an element, repeatedly following parentElement() until reaching the root.

Parameters
elementThe element to start from, which is not yielded.

◆ previousSiblingsGenerator()

template<ElementLike T>
ElementTraversalGenerator< T > donner::previousSiblingsGenerator ( T element)

A generator that yields all siblings of an element, in reverse order.

This repeatedly follows previousSibling().

Parameters
elementThe element to start from, which is not yielded.

◆ singleElementGenerator()

template<ElementLike T>
ElementTraversalGenerator< T > donner::singleElementGenerator ( T element)

A generator that yields a single element, if it exists.

Parameters
elementThe element to yield. If this is std::nullopt, the generator will yield nothing.

◆ SolveQuadratic()

template<typename T >
QuadraticSolution< T > donner::SolveQuadratic ( T a,
T b,
T c )

Solve a quadratic equation.

\( a x^2 + b x + c = 0 \)

Parameters
aFirst coefficient.
bSecond coefficient.
cThird coefficient.
Returns
QuadraticSolution, containing 0-2 solutions.