1#ifndef SASS_UNITS_H
2#define SASS_UNITS_H
3
4#include <cmath>
5#include <string>
6#include <sstream>
7#include <vector>
8
9namespace Sass {
10
11 const double PI = std::acos(x: -1);
12
13 enum UnitClass {
14 LENGTH = 0x000,
15 ANGLE = 0x100,
16 TIME = 0x200,
17 FREQUENCY = 0x300,
18 RESOLUTION = 0x400,
19 INCOMMENSURABLE = 0x500
20 };
21
22 enum UnitType {
23
24 // size units
25 IN = UnitClass::LENGTH,
26 CM,
27 PC,
28 MM,
29 PT,
30 PX,
31
32 // angle units
33 DEG = ANGLE,
34 GRAD,
35 RAD,
36 TURN,
37
38 // time units
39 SEC = TIME,
40 MSEC,
41
42 // frequency units
43 HERTZ = FREQUENCY,
44 KHERTZ,
45
46 // resolutions units
47 DPI = RESOLUTION,
48 DPCM,
49 DPPX,
50
51 // for unknown units
52 UNKNOWN = INCOMMENSURABLE
53
54 };
55
56 class Units {
57 public:
58 sass::vector<sass::string> numerators;
59 sass::vector<sass::string> denominators;
60 public:
61 // default constructor
62 Units() :
63 numerators(),
64 denominators()
65 { }
66 // copy constructor
67 Units(const Units* ptr) :
68 numerators(ptr->numerators),
69 denominators(ptr->denominators)
70 { }
71 // convert to string
72 sass::string unit() const;
73 // get if units are empty
74 bool is_unitless() const;
75 // return if valid for css
76 bool is_valid_css_unit() const;
77 // reduce units for output
78 // returns conversion factor
79 double reduce();
80 // normalize units for compare
81 // returns conversion factor
82 double normalize();
83 // compare operations
84 bool operator< (const Units& rhs) const;
85 bool operator== (const Units& rhs) const;
86 bool operator!= (const Units& rhs) const;
87 // factor to convert into given units
88 double convert_factor(const Units&) const;
89 };
90
91 extern const double size_conversion_factors[6][6];
92 extern const double angle_conversion_factors[4][4];
93 extern const double time_conversion_factors[2][2];
94 extern const double frequency_conversion_factors[2][2];
95 extern const double resolution_conversion_factors[3][3];
96
97 UnitType get_main_unit(const UnitClass unit);
98 enum Sass::UnitType string_to_unit(const sass::string&);
99 const char* unit_to_string(Sass::UnitType unit);
100 enum Sass::UnitClass get_unit_type(Sass::UnitType unit);
101 sass::string get_unit_class(Sass::UnitType unit);
102 sass::string unit_to_class(const sass::string&);
103 // throws incompatibleUnits exceptions
104 double conversion_factor(const sass::string&, const sass::string&);
105 double conversion_factor(UnitType, UnitType, UnitClass, UnitClass);
106 double convert_units(const sass::string&, const sass::string&, int&, int&);
107
108}
109
110#endif
111

source code of gtk/subprojects/libsass/src/units.hpp