```/* <![CDATA[ */
function get_sym_list(){return [["Variable","xv",[["Base",16],["Base",17],["MS-new-return",33],["MS-new-return",35],["Return",26],["Return",29],["Return",37],["Return",47],["Unit",14],["Unitless-Bases",15],["Unitless-Bases",18],["Value",44],["i",34]]],["Function","xf",[["modular-scale",53],["ms",2]]]];} /* ]]> */1// The main function that brings it all together
2@function ms(\$Value: 0, \$Bases: \$ms-base, \$Ratios: \$ms-ratio) {
3
4  // If no multi-base or multi-ratio stuff is going on
5  // then just retrn the basic calculaiton
6  @if length(\$Bases) == 1 and length(\$Ratios) == 1 {
7    @return ms-calc(\$Value, \$Bases, \$Ratios);
8  }
9
10  // Do calculations directly in Ruby when avalible
11  @if \$MS-gem-exists {
12
13    // Remove units from bases
14    \$Unit: nth(\$Bases, 1) * 0 + 1; // Extracts the unit from the base
15    \$Unitless-Bases: ();
16    @each \$Base in \$Bases {
17      \$Base: \$Base/\$Unit;
18      \$Unitless-Bases: join(\$Unitless-Bases, \$Base);
19    }
20
21    // Calculate natively in Ruby
22    @return ms-gem-func(\$Value, \$Unitless-Bases, \$Ratios) * \$Unit;
23  }
24
25  // Generate a list of all possible values
26  \$Return: ms-generate-list(\$Value, \$Bases, \$Ratios);
27
28  // Sort the generated lists
29  \$Return: ms-sort-list(\$Return);
30
31  // Reverse list if its negitive.
32  @if \$Value < 0 {
33    \$MS-new-return: ();
34    @each \$i in \$Return {
35      \$MS-new-return: join(\$i, \$MS-new-return);
36    }
37    \$Return: \$MS-new-return;
38  }
39
40  // Normalize value for counting from 1
41  // Because CSS counts things from 1
42  // So Sass does as well
43  // So I get to write fun stuff like this
44  \$Value: abs(\$Value) + 1;
45
46  // Find the correct value in the list
47  \$Return: nth(\$Return, \$Value);
48
49  @return \$Return;
50}
51
52// Same function, different name, for good measure.
53@function modular-scale(\$Value: 0, \$Bases: \$ms-base, \$Ratios: \$ms-ratio) {
54  @return ms(\$Value, \$Bases, \$Ratios);
55}```