Add built-in variables e and pi. (#907)

This commit is contained in:
Awjin Ahn 2019-12-26 16:31:33 -08:00 committed by GitHub
parent 24f84e2c88
commit 2cb69e70ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 5 deletions

View File

@ -6,6 +6,8 @@
* `hypot()`: given *n* numbers, outputs the length of the *n*-dimensional
vector that has components equal to each of the inputs.
* Add the variables `$pi` and `$e` to the built-in "sass:math" module.
## 1.24.0
* Add an optional `with` clause to the `@forward` rule. This works like the

View File

@ -25,7 +25,10 @@ final global = UnmodifiableListView([
final module = BuiltInModule("math", functions: [
_abs, _ceil, _clamp, _compatible, _floor, _hypot, _isUnitless, _max, _min, //
_percentage, _randomFunction, _round, _unit,
]);
], variables: {
"e": SassNumber(math.e),
"pi": SassNumber(math.pi),
});
/// Returns a [Callable] named [name] that transforms a number's value
/// using [transform] and preserves its units.

View File

@ -17,19 +17,22 @@ class BuiltInModule<T extends AsyncCallable> implements Module<T> {
final Uri url;
final Map<String, T> functions;
final Map<String, T> mixins;
final Map<String, Value> variables;
List<Module<T>> get upstream => const [];
Map<String, Value> get variables => const {};
Map<String, AstNode> get variableNodes => const {};
Extender get extender => Extender.empty;
CssStylesheet get css => CssStylesheet.empty(url: url);
bool get transitivelyContainsCss => false;
bool get transitivelyContainsExtensions => false;
BuiltInModule(String name, {Iterable<T> functions, Iterable<T> mixins})
BuiltInModule(String name,
{Iterable<T> functions, Iterable<T> mixins, Map<String, Value> variables})
: url = Uri(scheme: "sass", path: name),
functions = _callableMap(functions),
mixins = _callableMap(mixins);
mixins = _callableMap(mixins),
variables =
variables == null ? const {} : UnmodifiableMapView(variables);
/// Returns a map from [callables]' names to their values.
static Map<String, T> _callableMap<T extends AsyncCallable>(
@ -40,7 +43,10 @@ class BuiltInModule<T extends AsyncCallable> implements Module<T> {
{for (var callable in callables) callable.name: callable}));
void setVariable(String name, Value value, AstNode nodeWithSpan) {
throw SassScriptException("Undefined variable.");
if (!variables.containsKey(name)) {
throw SassScriptException("Undefined variable.");
}
throw SassScriptException("Cannot modify built-in variable.");
}
Module<T> cloneCss() => this;