1@function ms-reverse-list($list) { 2 @if length($list) > 1 { 3 @if nth($list, 1) > nth($list, length($list)) { 4 $MS-reversed-list: (); 5 @each $Value in $list { 6 $MS-reversed-list: join($Value, $MS-reversed-list); 7 } 8 @return $MS-reversed-list; 9 } 10 } 11 @return $list; 12} 13 14 15@function ms-generate-list($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) { 16 17 // Create blank lists 18 $MS-list: (); 19 $MS-base-list: (); 20 21 // Loop through each ratio AND each base 22 // to generate all possibilities. 23 @each $Ratio in $Ratios { 24 @each $Base in $Bases { 25 26 // Set base variables 27 $MS-base-list: (); 28 $Base-counter: 0; 29 30 // Seed list with an initial value 31 $MS-base-list: $Base; 32 33 // Find values on a positive scale 34 @if $Value >= 0 { 35 36 // Find lower values on the scale 37 $Base-counter: -1; 38 @while ms-calc($Base-counter, $Base, $Ratio) >= nth($Bases, 1) { 39 $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio)); 40 $Base-counter: $Base-counter - 1; 41 } 42 43 // Ensure the list is smallest to largest 44 $MS-base-list: ms-reverse-list($MS-base-list); 45 46 // Find higher possible values on the scale 47 $Base-counter: 1; 48 @while ms-calc($Base-counter, $Base, $Ratio) <= ms-calc($Value, nth($Bases, 1), $Ratio) { 49 $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio)); 50 $Base-counter: $Base-counter + 1; 51 } 52 } 53 54 // Find values on a negitive scale 55 @else { 56 57 // Find lower values on the scale 58 $Base-counter: 1; 59 @while ms-calc($Base-counter, $Base, $Ratio) <= nth($Bases, 1) { 60 $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio)); 61 $Base-counter: $Base-counter + 1; 62 } 63 64 // Ensure the list is smallest to largest 65 $MS-base-list: ms-reverse-list($MS-base-list); 66 67 // Find higher possible values on the scale 68 $Base-counter: -1; 69 @while ms-calc($Base-counter, $Base, $Ratio) >= ms-calc($Value, nth($Bases, 1), $Ratio) { 70 $MS-calc: ms-calc($Base-counter, $Base, $Ratio); 71 // detect if the value excedes the main base value 72 @if $MS-calc < nth($Bases, 1) { 73 $MS-base-list: join($MS-base-list, $MS-calc); 74 } 75 $Base-counter: $Base-counter - 1; 76 } 77 78 // Trim outlier base. 79 @if length($Bases) > 1 { 80 @for $i from 2 through length($Bases) { 81 @if nth($MS-base-list, 1) > nth($Bases, 1) { 82 $MS-new-list: (); 83 @for $i from 2 through length($MS-base-list) { 84 $MS-new-list: join($MS-new-list, nth($MS-base-list, $i)); 85 } 86 $MS-base-list: $MS-new-list; 87 } 88 } 89 } 90 } 91 92 // reverse list if its largest to smallest 93 $MS-base-list: ms-reverse-list($MS-base-list); 94 95 // Add new possibilities to the master list 96 $MS-list: append($MS-list, $MS-base-list, comma); 97 98 } 99 } 100 101 // After all the possibilities are found, output a master list 102 @return $MS-list; 103}