// Column math // ===========

// Is Symmetrical // ————– // Returns true if a grid is symmetrical. // - [$columns] : <number> | <list> @function is-symmetrical(

$columns: susy-get(columns)

) {

$columns: valid-columns($columns);
@return if(type-of($columns) == number, $columns, null);

}

// Susy Count // ———- // Find the number of columns in a given layout // - [$columns] : <number> | <list> @function susy-count(

$columns: susy-get(columns)

) {

$columns: valid-columns($columns);
@return is-symmetrical($columns) or length($columns);

}

// Susy Sum // ——– // Find the total sum of column-units in a layout // - [$columns] : <number> | <list> // - [$gutters] : <ratio> // - [$spread] : false/narrow | wide | wider @function susy-sum(

$columns  : susy-get(columns),
$gutters  : susy-get(gutters),
$spread   : false

) {

$columns: valid-columns($columns);
$gutters: valid-gutters($gutters);

$spread: if($spread == wide, 0, if($spread == wider, 1, -1));
$gutter-sum: (susy-count($columns) + $spread) * $gutters;
$column-sum: is-symmetrical($columns);

@if not($column-sum) {
  @each $column in $columns {
    $column-sum: ($column-sum or 0) + $column;
  }
}

@return $column-sum + $gutter-sum;

}

// Susy Slice // ———- // Return a subset of columns at a given location. // - $span : <number> // - $location : <number> // - [$columns] : <number> | <list> @function susy-slice(

$span,
$location,
$columns: susy-get(columns)

) {

$columns: valid-columns($columns);
$sub-columns: $span;

@if not(is-symmetrical($columns)) {
  $location: $location or 1;
  $sub-columns: ();
  @for $i from $location to ($location + $span) {
    $sub-columns: append($sub-columns, nth($columns, $i));
  }
}

@return $sub-columns;

}

// Susy // —- // Find the sum of a column-span. // - $span : <number> // - $location : <number> // - [$columns] : <number> | <list> // - [$gutters] : <ratio> // - [$spread] : false/narrow | wide | wider @function susy(

$span,
$location     : false,
$columns      : susy-get(columns),
$gutters      : susy-get(gutters),
$spread       : false

) {

$columns: valid-columns($columns);
$gutters: valid-gutters($gutters);
$span: susy-slice($span, $location, $columns);

@return susy-sum($span, $gutters, $spread);

}