sassc4 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +16 -0
  5. data/CHANGELOG.md +97 -0
  6. data/CODE_OF_CONDUCT.md +10 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +80 -0
  10. data/Rakefile +51 -0
  11. data/ext/depend +4 -0
  12. data/ext/extconf.rb +92 -0
  13. data/ext/libsass/VERSION +1 -0
  14. data/ext/libsass/contrib/plugin.cpp +60 -0
  15. data/ext/libsass/include/sass/base.h +97 -0
  16. data/ext/libsass/include/sass/context.h +174 -0
  17. data/ext/libsass/include/sass/functions.h +139 -0
  18. data/ext/libsass/include/sass/values.h +145 -0
  19. data/ext/libsass/include/sass/version.h +12 -0
  20. data/ext/libsass/include/sass.h +15 -0
  21. data/ext/libsass/include/sass2scss.h +120 -0
  22. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  23. data/ext/libsass/src/ast.cpp +953 -0
  24. data/ext/libsass/src/ast.hpp +1064 -0
  25. data/ext/libsass/src/ast2c.cpp +80 -0
  26. data/ext/libsass/src/ast2c.hpp +39 -0
  27. data/ext/libsass/src/ast_def_macros.hpp +140 -0
  28. data/ext/libsass/src/ast_fwd_decl.cpp +31 -0
  29. data/ext/libsass/src/ast_fwd_decl.hpp +274 -0
  30. data/ext/libsass/src/ast_helpers.hpp +316 -0
  31. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  32. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  33. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  34. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  35. data/ext/libsass/src/ast_selectors.cpp +1070 -0
  36. data/ext/libsass/src/ast_selectors.hpp +523 -0
  37. data/ext/libsass/src/ast_supports.cpp +114 -0
  38. data/ext/libsass/src/ast_supports.hpp +121 -0
  39. data/ext/libsass/src/ast_values.cpp +1154 -0
  40. data/ext/libsass/src/ast_values.hpp +498 -0
  41. data/ext/libsass/src/b64/cencode.h +32 -0
  42. data/ext/libsass/src/b64/encode.h +79 -0
  43. data/ext/libsass/src/backtrace.cpp +50 -0
  44. data/ext/libsass/src/backtrace.hpp +29 -0
  45. data/ext/libsass/src/base64vlq.cpp +47 -0
  46. data/ext/libsass/src/base64vlq.hpp +30 -0
  47. data/ext/libsass/src/bind.cpp +312 -0
  48. data/ext/libsass/src/bind.hpp +15 -0
  49. data/ext/libsass/src/c2ast.cpp +64 -0
  50. data/ext/libsass/src/c2ast.hpp +14 -0
  51. data/ext/libsass/src/c99func.c +54 -0
  52. data/ext/libsass/src/cencode.c +106 -0
  53. data/ext/libsass/src/check_nesting.cpp +393 -0
  54. data/ext/libsass/src/check_nesting.hpp +70 -0
  55. data/ext/libsass/src/color_maps.cpp +652 -0
  56. data/ext/libsass/src/color_maps.hpp +323 -0
  57. data/ext/libsass/src/color_spaces.cpp +241 -0
  58. data/ext/libsass/src/color_spaces.hpp +227 -0
  59. data/ext/libsass/src/constants.cpp +199 -0
  60. data/ext/libsass/src/constants.hpp +200 -0
  61. data/ext/libsass/src/context.cpp +870 -0
  62. data/ext/libsass/src/context.hpp +140 -0
  63. data/ext/libsass/src/cssize.cpp +521 -0
  64. data/ext/libsass/src/cssize.hpp +71 -0
  65. data/ext/libsass/src/dart_helpers.hpp +199 -0
  66. data/ext/libsass/src/debug.hpp +43 -0
  67. data/ext/libsass/src/debugger.hpp +964 -0
  68. data/ext/libsass/src/emitter.cpp +297 -0
  69. data/ext/libsass/src/emitter.hpp +101 -0
  70. data/ext/libsass/src/environment.cpp +260 -0
  71. data/ext/libsass/src/environment.hpp +124 -0
  72. data/ext/libsass/src/error_handling.cpp +239 -0
  73. data/ext/libsass/src/error_handling.hpp +248 -0
  74. data/ext/libsass/src/eval.cpp +1543 -0
  75. data/ext/libsass/src/eval.hpp +110 -0
  76. data/ext/libsass/src/eval_selectors.cpp +75 -0
  77. data/ext/libsass/src/expand.cpp +875 -0
  78. data/ext/libsass/src/expand.hpp +98 -0
  79. data/ext/libsass/src/extender.cpp +1226 -0
  80. data/ext/libsass/src/extender.hpp +399 -0
  81. data/ext/libsass/src/extension.cpp +43 -0
  82. data/ext/libsass/src/extension.hpp +89 -0
  83. data/ext/libsass/src/file.cpp +531 -0
  84. data/ext/libsass/src/file.hpp +124 -0
  85. data/ext/libsass/src/fn_colors.cpp +836 -0
  86. data/ext/libsass/src/fn_colors.hpp +99 -0
  87. data/ext/libsass/src/fn_lists.cpp +285 -0
  88. data/ext/libsass/src/fn_lists.hpp +34 -0
  89. data/ext/libsass/src/fn_maps.cpp +94 -0
  90. data/ext/libsass/src/fn_maps.hpp +30 -0
  91. data/ext/libsass/src/fn_miscs.cpp +248 -0
  92. data/ext/libsass/src/fn_miscs.hpp +40 -0
  93. data/ext/libsass/src/fn_numbers.cpp +246 -0
  94. data/ext/libsass/src/fn_numbers.hpp +45 -0
  95. data/ext/libsass/src/fn_selectors.cpp +205 -0
  96. data/ext/libsass/src/fn_selectors.hpp +35 -0
  97. data/ext/libsass/src/fn_strings.cpp +268 -0
  98. data/ext/libsass/src/fn_strings.hpp +34 -0
  99. data/ext/libsass/src/fn_utils.cpp +159 -0
  100. data/ext/libsass/src/fn_utils.hpp +62 -0
  101. data/ext/libsass/src/inspect.cpp +1126 -0
  102. data/ext/libsass/src/inspect.hpp +101 -0
  103. data/ext/libsass/src/json.cpp +1436 -0
  104. data/ext/libsass/src/json.hpp +117 -0
  105. data/ext/libsass/src/kwd_arg_macros.hpp +28 -0
  106. data/ext/libsass/src/lexer.cpp +122 -0
  107. data/ext/libsass/src/lexer.hpp +304 -0
  108. data/ext/libsass/src/listize.cpp +70 -0
  109. data/ext/libsass/src/listize.hpp +37 -0
  110. data/ext/libsass/src/mapping.hpp +19 -0
  111. data/ext/libsass/src/memory/allocator.cpp +48 -0
  112. data/ext/libsass/src/memory/allocator.hpp +138 -0
  113. data/ext/libsass/src/memory/config.hpp +20 -0
  114. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  115. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  116. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  117. data/ext/libsass/src/memory.hpp +12 -0
  118. data/ext/libsass/src/operation.hpp +223 -0
  119. data/ext/libsass/src/operators.cpp +267 -0
  120. data/ext/libsass/src/operators.hpp +30 -0
  121. data/ext/libsass/src/ordered_map.hpp +112 -0
  122. data/ext/libsass/src/output.cpp +320 -0
  123. data/ext/libsass/src/output.hpp +47 -0
  124. data/ext/libsass/src/parser.cpp +3059 -0
  125. data/ext/libsass/src/parser.hpp +395 -0
  126. data/ext/libsass/src/parser_selectors.cpp +189 -0
  127. data/ext/libsass/src/permutate.hpp +164 -0
  128. data/ext/libsass/src/plugins.cpp +188 -0
  129. data/ext/libsass/src/plugins.hpp +57 -0
  130. data/ext/libsass/src/position.cpp +163 -0
  131. data/ext/libsass/src/position.hpp +147 -0
  132. data/ext/libsass/src/prelexer.cpp +1780 -0
  133. data/ext/libsass/src/prelexer.hpp +484 -0
  134. data/ext/libsass/src/remove_placeholders.cpp +86 -0
  135. data/ext/libsass/src/remove_placeholders.hpp +37 -0
  136. data/ext/libsass/src/sass.cpp +156 -0
  137. data/ext/libsass/src/sass.hpp +147 -0
  138. data/ext/libsass/src/sass2scss.cpp +895 -0
  139. data/ext/libsass/src/sass_context.cpp +742 -0
  140. data/ext/libsass/src/sass_context.hpp +129 -0
  141. data/ext/libsass/src/sass_functions.cpp +210 -0
  142. data/ext/libsass/src/sass_functions.hpp +50 -0
  143. data/ext/libsass/src/sass_values.cpp +362 -0
  144. data/ext/libsass/src/sass_values.hpp +82 -0
  145. data/ext/libsass/src/settings.hpp +19 -0
  146. data/ext/libsass/src/source.cpp +69 -0
  147. data/ext/libsass/src/source.hpp +95 -0
  148. data/ext/libsass/src/source_data.hpp +32 -0
  149. data/ext/libsass/src/source_map.cpp +202 -0
  150. data/ext/libsass/src/source_map.hpp +65 -0
  151. data/ext/libsass/src/stylesheet.cpp +22 -0
  152. data/ext/libsass/src/stylesheet.hpp +57 -0
  153. data/ext/libsass/src/to_value.cpp +114 -0
  154. data/ext/libsass/src/to_value.hpp +46 -0
  155. data/ext/libsass/src/units.cpp +507 -0
  156. data/ext/libsass/src/units.hpp +110 -0
  157. data/ext/libsass/src/utf8/checked.h +336 -0
  158. data/ext/libsass/src/utf8/core.h +332 -0
  159. data/ext/libsass/src/utf8/unchecked.h +235 -0
  160. data/ext/libsass/src/utf8.h +34 -0
  161. data/ext/libsass/src/utf8_string.cpp +104 -0
  162. data/ext/libsass/src/utf8_string.hpp +38 -0
  163. data/ext/libsass/src/util.cpp +723 -0
  164. data/ext/libsass/src/util.hpp +105 -0
  165. data/ext/libsass/src/util_string.cpp +125 -0
  166. data/ext/libsass/src/util_string.hpp +73 -0
  167. data/ext/libsass/src/values.cpp +140 -0
  168. data/ext/libsass/src/values.hpp +12 -0
  169. data/lib/sassc/dependency.rb +17 -0
  170. data/lib/sassc/engine.rb +141 -0
  171. data/lib/sassc/error.rb +37 -0
  172. data/lib/sassc/functions_handler.rb +73 -0
  173. data/lib/sassc/import_handler.rb +50 -0
  174. data/lib/sassc/importer.rb +31 -0
  175. data/lib/sassc/native/native_context_api.rb +147 -0
  176. data/lib/sassc/native/native_functions_api.rb +159 -0
  177. data/lib/sassc/native/sass2scss_api.rb +10 -0
  178. data/lib/sassc/native/sass_input_style.rb +13 -0
  179. data/lib/sassc/native/sass_output_style.rb +12 -0
  180. data/lib/sassc/native/sass_value.rb +97 -0
  181. data/lib/sassc/native/string_list.rb +10 -0
  182. data/lib/sassc/native.rb +64 -0
  183. data/lib/sassc/sass_2_scss.rb +9 -0
  184. data/lib/sassc/script/functions.rb +8 -0
  185. data/lib/sassc/script/value/bool.rb +32 -0
  186. data/lib/sassc/script/value/color.rb +95 -0
  187. data/lib/sassc/script/value/list.rb +136 -0
  188. data/lib/sassc/script/value/map.rb +69 -0
  189. data/lib/sassc/script/value/number.rb +389 -0
  190. data/lib/sassc/script/value/string.rb +96 -0
  191. data/lib/sassc/script/value.rb +137 -0
  192. data/lib/sassc/script/value_conversion/base.rb +13 -0
  193. data/lib/sassc/script/value_conversion/bool.rb +13 -0
  194. data/lib/sassc/script/value_conversion/color.rb +18 -0
  195. data/lib/sassc/script/value_conversion/list.rb +25 -0
  196. data/lib/sassc/script/value_conversion/map.rb +21 -0
  197. data/lib/sassc/script/value_conversion/number.rb +13 -0
  198. data/lib/sassc/script/value_conversion/string.rb +17 -0
  199. data/lib/sassc/script/value_conversion.rb +69 -0
  200. data/lib/sassc/script.rb +17 -0
  201. data/lib/sassc/util/normalized_map.rb +117 -0
  202. data/lib/sassc/util.rb +231 -0
  203. data/lib/sassc/version.rb +5 -0
  204. data/lib/sassc.rb +57 -0
  205. data/sassc.gemspec +69 -0
  206. data/test/css_color_level4_test.rb +168 -0
  207. data/test/custom_importer_test.rb +127 -0
  208. data/test/engine_test.rb +314 -0
  209. data/test/error_test.rb +29 -0
  210. data/test/fixtures/paths.scss +10 -0
  211. data/test/functions_test.rb +340 -0
  212. data/test/native_test.rb +213 -0
  213. data/test/output_style_test.rb +107 -0
  214. data/test/sass_2_scss_test.rb +14 -0
  215. data/test/test_helper.rb +45 -0
  216. metadata +396 -0
@@ -0,0 +1,227 @@
1
+ #ifndef SASS_COLOR_SPACES_H
2
+ #define SASS_COLOR_SPACES_H
3
+
4
+ #include "sass.hpp"
5
+ #include <cmath>
6
+ #include <array>
7
+
8
+ namespace Sass {
9
+
10
+ // Forward declarations
11
+ class Color;
12
+ class Color_RGBA;
13
+ class Color_HSLA;
14
+
15
+ // Color space constants for CSS Color Level 4
16
+ namespace ColorSpaces {
17
+
18
+ // Constants from https://www.w3.org/TR/css-color-4/
19
+ constexpr double D50[3] = {0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585};
20
+
21
+ // Lab constants
22
+ constexpr double LAB_KAPPA = 24389.0 / 27.0; // 29^3/3^3
23
+ constexpr double LAB_EPSILON = 216.0 / 24389.0; // 6^3/29^3
24
+
25
+ // Conversion matrices
26
+ // Matrix for converting linear sRGB to XYZ D50
27
+ constexpr double LINEAR_SRGB_TO_XYZ_D50[9] = {
28
+ 0.43606574687426936, 0.38515150959015960, 0.14307841996513868,
29
+ 0.22249317711056518, 0.71688701309448240, 0.06061980979495235,
30
+ 0.01392392146316939, 0.09708132423141015, 0.71409935681588070
31
+ };
32
+
33
+ // Matrix for converting XYZ D50 to linear sRGB
34
+ constexpr double XYZ_D50_TO_LINEAR_SRGB[9] = {
35
+ 3.13413585290011780, -1.61738599801804200, -0.49066221791109754,
36
+ -0.97879547655577770, 1.91625437739598840, 0.03344287339036693,
37
+ 0.07195539255794733, -0.22897675981518200, 1.40538603511311820
38
+ };
39
+
40
+ // Matrix for converting linear sRGB to XYZ D65
41
+ constexpr double LINEAR_SRGB_TO_XYZ_D65[9] = {
42
+ 0.41239079926595950, 0.35758433938387796, 0.18048078840183430,
43
+ 0.21263900587151036, 0.71516867876775590, 0.07219231536073371,
44
+ 0.01933081871559185, 0.11919477979462598, 0.95053215224966060
45
+ };
46
+
47
+ // Matrix for converting XYZ D65 to linear sRGB
48
+ constexpr double XYZ_D65_TO_LINEAR_SRGB[9] = {
49
+ 3.24096994190452130, -1.53738317757009350, -0.49861076029300330,
50
+ -0.96924363628087980, 1.87596750150772060, 0.04155505740717561,
51
+ 0.05563007969699360, -0.20397695888897657, 1.05697151424287860
52
+ };
53
+
54
+ // Matrix for converting linear sRGB to LMS
55
+ constexpr double LINEAR_SRGB_TO_LMS[9] = {
56
+ 0.41222146947076300, 0.53633253726173480, 0.05144599326750220,
57
+ 0.21190349581782520, 0.68069955064523420, 0.10739695353694050,
58
+ 0.08830245919005641, 0.28171883913612150, 0.62997870167382210
59
+ };
60
+
61
+ // Matrix for converting LMS to linear sRGB
62
+ constexpr double LMS_TO_LINEAR_SRGB[9] = {
63
+ 4.07674163607595800, -3.30771153925806200, 0.23096990318210417,
64
+ -1.26843797328503200, 2.60975734928768900, -0.34131937600265710,
65
+ -0.00419607613867551, -0.70341861793593630, 1.70761469407461200
66
+ };
67
+
68
+ // Matrix for converting LMS to OKLab
69
+ constexpr double LMS_TO_OKLAB[9] = {
70
+ 0.21045426830931400, 0.79361777470230540, -0.00407204301161930,
71
+ 1.97799853243116840, -2.42859224204858000, 0.45059370961741100,
72
+ 0.02590404246554780, 0.78277171245752960, -0.80867575492307740
73
+ };
74
+
75
+ // Matrix for converting OKLab to LMS
76
+ constexpr double OKLAB_TO_LMS[9] = {
77
+ 1.00000000000000020, 0.39633777737617490, 0.21580375730991360,
78
+ 0.99999999999999980, -0.10556134581565854, -0.06385417282581334,
79
+ 0.99999999999999990, -0.08948417752981180, -1.29148554801940940
80
+ };
81
+
82
+ // Utility functions for matrix multiplication
83
+ inline std::array<double, 3> multiplyMatrix(const double matrix[9], double a, double b, double c) {
84
+ return {
85
+ matrix[0] * a + matrix[1] * b + matrix[2] * c,
86
+ matrix[3] * a + matrix[4] * b + matrix[5] * c,
87
+ matrix[6] * a + matrix[7] * b + matrix[8] * c
88
+ };
89
+ }
90
+
91
+ // sRGB gamma encoding/decoding
92
+ inline double gammaEncode(double linear) {
93
+ if (linear <= 0.0031308) {
94
+ return 12.92 * linear;
95
+ }
96
+ return 1.055 * std::pow(linear, 1.0 / 2.4) - 0.055;
97
+ }
98
+
99
+ inline double gammaDecode(double encoded) {
100
+ if (encoded <= 0.04045) {
101
+ return encoded / 12.92;
102
+ }
103
+ return std::pow((encoded + 0.055) / 1.055, 2.4);
104
+ }
105
+
106
+ // HWB conversion helpers
107
+ inline double hueToRgb(double m1, double m2, double h) {
108
+ h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
109
+ if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
110
+ if (h * 2 < 1) return m2;
111
+ if (h * 3 < 2) return m1 + (m2 - m1) * (2.0 / 3.0 - h) * 6;
112
+ return m1;
113
+ }
114
+
115
+ // Lab conversion helpers
116
+ inline double labF(double t) {
117
+ if (t > LAB_EPSILON) {
118
+ return std::cbrt(t);
119
+ }
120
+ return (LAB_KAPPA * t + 16) / 116;
121
+ }
122
+
123
+ inline double labFinv(double t) {
124
+ double cubed = t * t * t;
125
+ if (cubed > LAB_EPSILON) {
126
+ return cubed;
127
+ }
128
+ return (116 * t - 16) / LAB_KAPPA;
129
+ }
130
+
131
+ // LCH/Lab conversion
132
+ inline void labToLch(double L, double a, double b, double& l, double& c, double& h) {
133
+ l = L;
134
+ c = std::sqrt(a * a + b * b);
135
+ h = std::atan2(b, a) * 180.0 / M_PI;
136
+ if (h < 0) h += 360;
137
+ }
138
+
139
+ inline void lchToLab(double l, double c, double h, double& L, double& a, double& b) {
140
+ L = l;
141
+ double hRad = h * M_PI / 180.0;
142
+ a = c * std::cos(hRad);
143
+ b = c * std::sin(hRad);
144
+ }
145
+
146
+ } // namespace ColorSpaces
147
+
148
+ // New color classes for CSS Color Level 4
149
+
150
+ // HWB Color
151
+ struct HWB {
152
+ double h; // Hue (0-360)
153
+ double w; // Whiteness (0-100)
154
+ double b; // Blackness (0-100)
155
+ double a; // Alpha (0-1)
156
+
157
+ HWB(double hue = 0, double white = 0, double black = 0, double alpha = 1.0)
158
+ : h(hue), w(white), b(black), a(alpha) {}
159
+
160
+ Color_RGBA* toRGBA() const;
161
+ static HWB fromRGBA(const Color_RGBA* rgb);
162
+ };
163
+
164
+ // Lab Color
165
+ struct Lab {
166
+ double l; // Lightness (0-100)
167
+ double a; // a-axis (-125 to 125)
168
+ double b; // b-axis (-125 to 125)
169
+ double alpha; // Alpha (0-1)
170
+
171
+ Lab(double lightness = 0, double aAxis = 0, double bAxis = 0, double alphaVal = 1.0)
172
+ : l(lightness), a(aAxis), b(bAxis), alpha(alphaVal) {}
173
+
174
+ Color_RGBA* toRGBA() const;
175
+ static Lab fromRGBA(const Color_RGBA* rgb);
176
+ };
177
+
178
+ // LCH Color
179
+ struct LCH {
180
+ double l; // Lightness (0-100)
181
+ double c; // Chroma (0-150)
182
+ double h; // Hue (0-360)
183
+ double alpha; // Alpha (0-1)
184
+
185
+ LCH(double lightness = 0, double chroma = 0, double hue = 0, double alphaVal = 1.0)
186
+ : l(lightness), c(chroma), h(hue), alpha(alphaVal) {}
187
+
188
+ Color_RGBA* toRGBA() const;
189
+ static LCH fromRGBA(const Color_RGBA* rgb);
190
+ Lab toLab() const;
191
+ static LCH fromLab(const Lab& lab);
192
+ };
193
+
194
+ // OKLab Color
195
+ struct OKLab {
196
+ double l; // Lightness (0-1)
197
+ double a; // a-axis (-0.4 to 0.4)
198
+ double b; // b-axis (-0.4 to 0.4)
199
+ double alpha; // Alpha (0-1)
200
+
201
+ OKLab(double lightness = 0, double aAxis = 0, double bAxis = 0, double alphaVal = 1.0)
202
+ : l(lightness), a(aAxis), b(bAxis), alpha(alphaVal) {}
203
+
204
+ Color_RGBA* toRGBA() const;
205
+ static OKLab fromRGBA(const Color_RGBA* rgb);
206
+ };
207
+
208
+ // OKLCH Color
209
+ struct OKLCH {
210
+ double l; // Lightness (0-1)
211
+ double c; // Chroma (0-0.4)
212
+ double h; // Hue (0-360)
213
+ double alpha; // Alpha (0-1)
214
+
215
+ OKLCH(double lightness = 0, double chroma = 0, double hue = 0, double alphaVal = 1.0)
216
+ : l(lightness), c(chroma), h(hue), alpha(alphaVal) {}
217
+
218
+ Color_RGBA* toRGBA() const;
219
+ static OKLCH fromRGBA(const Color_RGBA* rgb);
220
+ OKLab toOKLab() const;
221
+ static OKLCH fromOKLab(const OKLab& oklab);
222
+ };
223
+
224
+ } // namespace Sass
225
+
226
+ #endif
227
+
@@ -0,0 +1,199 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "constants.hpp"
6
+
7
+ namespace Sass {
8
+ namespace Constants {
9
+
10
+ extern const unsigned long MaxCallStack = 1024;
11
+
12
+ // https://github.com/sass/libsass/issues/592
13
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
14
+ // https://github.com/sass/sass/issues/1495#issuecomment-61189114
15
+ extern const unsigned long Specificity_Star = 0;
16
+ extern const unsigned long Specificity_Universal = 0;
17
+ extern const unsigned long Specificity_Element = 1;
18
+ extern const unsigned long Specificity_Base = 1000;
19
+ extern const unsigned long Specificity_Class = 1000;
20
+ extern const unsigned long Specificity_Attr = 1000;
21
+ extern const unsigned long Specificity_Pseudo = 1000;
22
+ extern const unsigned long Specificity_ID = 1000000;
23
+
24
+ extern const int UnificationOrder_Element = 1;
25
+ extern const int UnificationOrder_Id = 2;
26
+ extern const int UnificationOrder_Class = 2;
27
+ extern const int UnificationOrder_Attribute = 3;
28
+ extern const int UnificationOrder_PseudoClass = 4;
29
+ extern const int UnificationOrder_Wrapped = 5;
30
+ extern const int UnificationOrder_PseudoElement = 6;
31
+ extern const int UnificationOrder_Placeholder = 7;
32
+
33
+ // sass keywords
34
+ extern const char at_root_kwd[] = "@at-root";
35
+ extern const char import_kwd[] = "@import";
36
+ extern const char mixin_kwd[] = "@mixin";
37
+ extern const char function_kwd[] = "@function";
38
+ extern const char return_kwd[] = "@return";
39
+ extern const char include_kwd[] = "@include";
40
+ extern const char content_kwd[] = "@content";
41
+ extern const char extend_kwd[] = "@extend";
42
+ extern const char if_kwd[] = "@if";
43
+ extern const char else_kwd[] = "@else";
44
+ extern const char if_after_else_kwd[] = "if";
45
+ extern const char for_kwd[] = "@for";
46
+ extern const char from_kwd[] = "from";
47
+ extern const char to_kwd[] = "to";
48
+ extern const char of_kwd[] = "of";
49
+ extern const char through_kwd[] = "through";
50
+ extern const char each_kwd[] = "@each";
51
+ extern const char in_kwd[] = "in";
52
+ extern const char while_kwd[] = "@while";
53
+ extern const char warn_kwd[] = "@warn";
54
+ extern const char error_kwd[] = "@error";
55
+ extern const char debug_kwd[] = "@debug";
56
+ extern const char default_kwd[] = "default";
57
+ extern const char global_kwd[] = "global";
58
+ extern const char null_kwd[] = "null";
59
+ extern const char optional_kwd[] = "optional";
60
+ extern const char with_kwd[] = "with";
61
+ extern const char without_kwd[] = "without";
62
+ extern const char all_kwd[] = "all";
63
+ extern const char rule_kwd[] = "rule";
64
+
65
+ // css standard units
66
+ extern const char em_kwd[] = "em";
67
+ extern const char ex_kwd[] = "ex";
68
+ extern const char px_kwd[] = "px";
69
+ extern const char cm_kwd[] = "cm";
70
+ extern const char mm_kwd[] = "mm";
71
+ extern const char pt_kwd[] = "pt";
72
+ extern const char pc_kwd[] = "pc";
73
+ extern const char deg_kwd[] = "deg";
74
+ extern const char rad_kwd[] = "rad";
75
+ extern const char grad_kwd[] = "grad";
76
+ extern const char turn_kwd[] = "turn";
77
+ extern const char ms_kwd[] = "ms";
78
+ extern const char s_kwd[] = "s";
79
+ extern const char Hz_kwd[] = "Hz";
80
+ extern const char kHz_kwd[] = "kHz";
81
+
82
+ // vendor prefixes
83
+ extern const char vendor_opera_kwd[] = "-o-";
84
+ extern const char vendor_webkit_kwd[] = "-webkit-";
85
+ extern const char vendor_mozilla_kwd[] = "-moz-";
86
+ extern const char vendor_ms_kwd[] = "-ms-";
87
+ extern const char vendor_khtml_kwd[] = "-khtml-";
88
+
89
+ // css functions and keywords
90
+ extern const char charset_kwd[] = "@charset";
91
+ extern const char media_kwd[] = "@media";
92
+ extern const char supports_kwd[] = "@supports";
93
+ extern const char keyframes_kwd[] = "keyframes";
94
+ extern const char only_kwd[] = "only";
95
+ extern const char rgb_fn_kwd[] = "rgb(";
96
+ extern const char url_fn_kwd[] = "url(";
97
+ extern const char url_kwd[] = "url";
98
+ // extern const char url_prefix_fn_kwd[] = "url-prefix(";
99
+ extern const char important_kwd[] = "important";
100
+ extern const char pseudo_not_fn_kwd[] = ":not(";
101
+ extern const char even_kwd[] = "even";
102
+ extern const char odd_kwd[] = "odd";
103
+ extern const char progid_kwd[] = "progid";
104
+ extern const char expression_kwd[] = "expression";
105
+ extern const char calc_fn_kwd[] = "calc";
106
+
107
+ extern const char almost_any_value_class[] = "\"'#!;{}";
108
+
109
+ // css selector keywords
110
+ extern const char sel_deep_kwd[] = "/deep/";
111
+
112
+ // css attribute-matching operators
113
+ extern const char tilde_equal[] = "~=";
114
+ extern const char pipe_equal[] = "|=";
115
+ extern const char caret_equal[] = "^=";
116
+ extern const char dollar_equal[] = "$=";
117
+ extern const char star_equal[] = "*=";
118
+
119
+ // relational & logical operators and constants
120
+ extern const char and_kwd[] = "and";
121
+ extern const char or_kwd[] = "or";
122
+ extern const char not_kwd[] = "not";
123
+ extern const char gt[] = ">";
124
+ extern const char gte[] = ">=";
125
+ extern const char lt[] = "<";
126
+ extern const char lte[] = "<=";
127
+ extern const char eq[] = "==";
128
+ extern const char neq[] = "!=";
129
+ extern const char true_kwd[] = "true";
130
+ extern const char false_kwd[] = "false";
131
+
132
+ // definition keywords
133
+ extern const char using_kwd[] = "using";
134
+
135
+ // miscellaneous punctuation and delimiters
136
+ extern const char percent_str[] = "%";
137
+ extern const char empty_str[] = "";
138
+ extern const char slash_slash[] = "//";
139
+ extern const char slash_star[] = "/*";
140
+ extern const char star_slash[] = "*/";
141
+ extern const char hash_lbrace[] = "#{";
142
+ extern const char rbrace[] = "}";
143
+ extern const char rparen[] = ")";
144
+ extern const char sign_chars[] = "-+";
145
+ extern const char op_chars[] = "-+";
146
+ extern const char hyphen[] = "-";
147
+ extern const char ellipsis[] = "...";
148
+ // extern const char url_space_chars[] = " \t\r\n\f";
149
+ // type names
150
+ extern const char numeric_name[] = "numeric value";
151
+ extern const char number_name[] = "number";
152
+ extern const char percentage_name[] = "percentage";
153
+ extern const char dimension_name[] = "numeric dimension";
154
+ extern const char string_name[] = "string";
155
+ extern const char bool_name[] = "bool";
156
+ extern const char color_name[] = "color";
157
+ extern const char list_name[] = "list";
158
+ extern const char map_name[] = "map";
159
+ extern const char arglist_name[] = "arglist";
160
+
161
+ // constants for uri parsing (RFC 3986 Appendix A.)
162
+ extern const char uri_chars[] = ":;/?!%&#@|[]{}'`^\"*+-.,_=~";
163
+ extern const char real_uri_chars[] = "#%&";
164
+
165
+ extern const char selector_combinator_child[] = ">";
166
+ extern const char selector_combinator_general[] = "~";
167
+ extern const char selector_combinator_adjacent[] = "+";
168
+
169
+ // some specific constant character classes
170
+ // they must be static to be useable by lexer
171
+ extern const char static_ops[] = "*/%";
172
+ // some character classes for the parser
173
+ extern const char selector_list_delims[] = "){};!";
174
+ extern const char complex_selector_delims[] = ",){};!";
175
+ extern const char selector_combinator_ops[] = "+~>";
176
+ // optional modifiers for alternative compare context
177
+ extern const char attribute_compare_modifiers[] = "~|^$*";
178
+ extern const char selector_lookahead_ops[] = "*&%,()[]";
179
+
180
+ // byte order marks
181
+ // (taken from http://en.wikipedia.org/wiki/Byte_order_mark)
182
+ extern const unsigned char utf_8_bom[] = { 0xEF, 0xBB, 0xBF };
183
+ extern const unsigned char utf_16_bom_be[] = { 0xFE, 0xFF };
184
+ extern const unsigned char utf_16_bom_le[] = { 0xFF, 0xFE };
185
+ extern const unsigned char utf_32_bom_be[] = { 0x00, 0x00, 0xFE, 0xFF };
186
+ extern const unsigned char utf_32_bom_le[] = { 0xFF, 0xFE, 0x00, 0x00 };
187
+ extern const unsigned char utf_7_bom_1[] = { 0x2B, 0x2F, 0x76, 0x38 };
188
+ extern const unsigned char utf_7_bom_2[] = { 0x2B, 0x2F, 0x76, 0x39 };
189
+ extern const unsigned char utf_7_bom_3[] = { 0x2B, 0x2F, 0x76, 0x2B };
190
+ extern const unsigned char utf_7_bom_4[] = { 0x2B, 0x2F, 0x76, 0x2F };
191
+ extern const unsigned char utf_7_bom_5[] = { 0x2B, 0x2F, 0x76, 0x38, 0x2D };
192
+ extern const unsigned char utf_1_bom[] = { 0xF7, 0x64, 0x4C };
193
+ extern const unsigned char utf_ebcdic_bom[] = { 0xDD, 0x73, 0x66, 0x73 };
194
+ extern const unsigned char scsu_bom[] = { 0x0E, 0xFE, 0xFF };
195
+ extern const unsigned char bocu_1_bom[] = { 0xFB, 0xEE, 0x28 };
196
+ extern const unsigned char gb_18030_bom[] = { 0x84, 0x31, 0x95, 0x33 };
197
+
198
+ }
199
+ }
@@ -0,0 +1,200 @@
1
+ #ifndef SASS_CONSTANTS_H
2
+ #define SASS_CONSTANTS_H
3
+
4
+ namespace Sass {
5
+ namespace Constants {
6
+
7
+ // The maximum call stack that can be created
8
+ extern const unsigned long MaxCallStack;
9
+
10
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
11
+ // The following list of selectors is by increasing specificity:
12
+ extern const unsigned long Specificity_Star;
13
+ extern const unsigned long Specificity_Universal;
14
+ extern const unsigned long Specificity_Element;
15
+ extern const unsigned long Specificity_Base;
16
+ extern const unsigned long Specificity_Class;
17
+ extern const unsigned long Specificity_Attr;
18
+ extern const unsigned long Specificity_Pseudo;
19
+ extern const unsigned long Specificity_ID;
20
+
21
+ // Selector unification order;
22
+ extern const int UnificationOrder_Element;
23
+ extern const int UnificationOrder_Id;
24
+ extern const int UnificationOrder_Class;
25
+ extern const int UnificationOrder_Attribute;
26
+ extern const int UnificationOrder_PseudoClass;
27
+ extern const int UnificationOrder_Wrapped;
28
+ extern const int UnificationOrder_PseudoElement;
29
+ extern const int UnificationOrder_Placeholder;
30
+
31
+ // sass keywords
32
+ extern const char at_root_kwd[];
33
+ extern const char import_kwd[];
34
+ extern const char mixin_kwd[];
35
+ extern const char function_kwd[];
36
+ extern const char return_kwd[];
37
+ extern const char include_kwd[];
38
+ extern const char content_kwd[];
39
+ extern const char extend_kwd[];
40
+ extern const char if_kwd[];
41
+ extern const char else_kwd[];
42
+ extern const char if_after_else_kwd[];
43
+ extern const char for_kwd[];
44
+ extern const char from_kwd[];
45
+ extern const char to_kwd[];
46
+ extern const char of_kwd[];
47
+ extern const char through_kwd[];
48
+ extern const char each_kwd[];
49
+ extern const char in_kwd[];
50
+ extern const char while_kwd[];
51
+ extern const char warn_kwd[];
52
+ extern const char error_kwd[];
53
+ extern const char debug_kwd[];
54
+ extern const char default_kwd[];
55
+ extern const char global_kwd[];
56
+ extern const char null_kwd[];
57
+ extern const char optional_kwd[];
58
+ extern const char with_kwd[];
59
+ extern const char without_kwd[];
60
+ extern const char all_kwd[];
61
+ extern const char rule_kwd[];
62
+
63
+ // css standard units
64
+ extern const char em_kwd[];
65
+ extern const char ex_kwd[];
66
+ extern const char px_kwd[];
67
+ extern const char cm_kwd[];
68
+ extern const char mm_kwd[];
69
+ extern const char pt_kwd[];
70
+ extern const char pc_kwd[];
71
+ extern const char deg_kwd[];
72
+ extern const char rad_kwd[];
73
+ extern const char grad_kwd[];
74
+ extern const char turn_kwd[];
75
+ extern const char ms_kwd[];
76
+ extern const char s_kwd[];
77
+ extern const char Hz_kwd[];
78
+ extern const char kHz_kwd[];
79
+
80
+ // vendor prefixes
81
+ extern const char vendor_opera_kwd[];
82
+ extern const char vendor_webkit_kwd[];
83
+ extern const char vendor_mozilla_kwd[];
84
+ extern const char vendor_ms_kwd[];
85
+ extern const char vendor_khtml_kwd[];
86
+
87
+ // css functions and keywords
88
+ extern const char charset_kwd[];
89
+ extern const char media_kwd[];
90
+ extern const char supports_kwd[];
91
+ extern const char keyframes_kwd[];
92
+ extern const char only_kwd[];
93
+ extern const char rgb_fn_kwd[];
94
+ extern const char url_fn_kwd[];
95
+ extern const char url_kwd[];
96
+ // extern const char url_prefix_fn_kwd[];
97
+ extern const char important_kwd[];
98
+ extern const char pseudo_not_fn_kwd[];
99
+ extern const char even_kwd[];
100
+ extern const char odd_kwd[];
101
+ extern const char progid_kwd[];
102
+ extern const char expression_kwd[];
103
+ extern const char calc_fn_kwd[];
104
+
105
+ // char classes for "regular expressions"
106
+ extern const char almost_any_value_class[];
107
+
108
+ // css selector keywords
109
+ extern const char sel_deep_kwd[];
110
+
111
+ // css attribute-matching operators
112
+ extern const char tilde_equal[];
113
+ extern const char pipe_equal[];
114
+ extern const char caret_equal[];
115
+ extern const char dollar_equal[];
116
+ extern const char star_equal[];
117
+
118
+ // relational & logical operators and constants
119
+ extern const char and_kwd[];
120
+ extern const char or_kwd[];
121
+ extern const char not_kwd[];
122
+ extern const char gt[];
123
+ extern const char gte[];
124
+ extern const char lt[];
125
+ extern const char lte[];
126
+ extern const char eq[];
127
+ extern const char neq[];
128
+ extern const char true_kwd[];
129
+ extern const char false_kwd[];
130
+
131
+ // definition keywords
132
+ extern const char using_kwd[];
133
+
134
+ // miscellaneous punctuation and delimiters
135
+ extern const char percent_str[];
136
+ extern const char empty_str[];
137
+ extern const char slash_slash[];
138
+ extern const char slash_star[];
139
+ extern const char star_slash[];
140
+ extern const char hash_lbrace[];
141
+ extern const char rbrace[];
142
+ extern const char rparen[];
143
+ extern const char sign_chars[];
144
+ extern const char op_chars[];
145
+ extern const char hyphen[];
146
+ extern const char ellipsis[];
147
+ // extern const char url_space_chars[];
148
+
149
+ // type names
150
+ extern const char numeric_name[];
151
+ extern const char number_name[];
152
+ extern const char percentage_name[];
153
+ extern const char dimension_name[];
154
+ extern const char string_name[];
155
+ extern const char bool_name[];
156
+ extern const char color_name[];
157
+ extern const char list_name[];
158
+ extern const char map_name[];
159
+ extern const char arglist_name[];
160
+
161
+ // constants for uri parsing (RFC 3986 Appendix A.)
162
+ extern const char uri_chars[];
163
+ extern const char real_uri_chars[];
164
+
165
+ // constants for selector combinators
166
+ extern const char selector_combinator_child[];
167
+ extern const char selector_combinator_general[];
168
+ extern const char selector_combinator_adjacent[];
169
+
170
+ // some specific constant character classes
171
+ // they must be static to be useable by lexer
172
+ extern const char static_ops[];
173
+ extern const char selector_list_delims[];
174
+ extern const char complex_selector_delims[];
175
+ extern const char selector_combinator_ops[];
176
+ extern const char attribute_compare_modifiers[];
177
+ extern const char selector_lookahead_ops[];
178
+
179
+ // byte order marks
180
+ // (taken from http://en.wikipedia.org/wiki/Byte_order_mark)
181
+ extern const unsigned char utf_8_bom[];
182
+ extern const unsigned char utf_16_bom_be[];
183
+ extern const unsigned char utf_16_bom_le[];
184
+ extern const unsigned char utf_32_bom_be[];
185
+ extern const unsigned char utf_32_bom_le[];
186
+ extern const unsigned char utf_7_bom_1[];
187
+ extern const unsigned char utf_7_bom_2[];
188
+ extern const unsigned char utf_7_bom_3[];
189
+ extern const unsigned char utf_7_bom_4[];
190
+ extern const unsigned char utf_7_bom_5[];
191
+ extern const unsigned char utf_1_bom[];
192
+ extern const unsigned char utf_ebcdic_bom[];
193
+ extern const unsigned char scsu_bom[];
194
+ extern const unsigned char bocu_1_bom[];
195
+ extern const unsigned char gb_18030_bom[];
196
+
197
+ }
198
+ }
199
+
200
+ #endif