Skip to content

Commit

Permalink
Add built-in variables e and pi.
Browse files Browse the repository at this point in the history
  • Loading branch information
Awjin committed Dec 26, 2019
1 parent 24f84e2 commit afc3950
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -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
Expand Down
5 changes: 4 additions & 1 deletion lib/src/functions/math.dart
Expand Up @@ -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.
Expand Down
15 changes: 11 additions & 4 deletions lib/src/module/built_in.dart
Expand Up @@ -17,19 +17,21 @@ 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 = _variableMap(variables);

/// Returns a map from [callables]' names to their values.
static Map<String, T> _callableMap<T extends AsyncCallable>(
Expand All @@ -39,8 +41,13 @@ class BuiltInModule<T extends AsyncCallable> implements Module<T> {
: UnmodifiableMapView(
{for (var callable in callables) callable.name: callable}));

/// Returns a map from [variables]' names to their values.
static Map<String, V> _variableMap<V>(Map<String, V> variables) =>
UnmodifiableMapView(
variables == null ? {} : UnmodifiableMapView(variables));

void setVariable(String name, Value value, AstNode nodeWithSpan) {
throw SassScriptException("Undefined variable.");
throw SassScriptException("Cannot modify built-in variable \$$name.");
}

Module<T> cloneCss() => this;
Expand Down

0 comments on commit afc3950

Please sign in to comment.