SassyJSON 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +18 -18
- data/README.md +112 -112
- data/lib/JsonImporter.rb +228 -228
- data/lib/SassyJSON.rb +12 -14
- data/stylesheets/SassyJSON.scss +5 -5
- data/stylesheets/decode/api/_json.scss +26 -26
- data/stylesheets/decode/decode.scss +28 -28
- data/stylesheets/decode/helpers/all/_throw.scss +11 -11
- data/stylesheets/decode/helpers/all/_value.scss +49 -49
- data/stylesheets/decode/helpers/color/_color.scss +50 -50
- data/stylesheets/decode/helpers/color/_get-color-value.scss +22 -22
- data/stylesheets/decode/helpers/color/_hex-to-dec.scss +19 -19
- data/stylesheets/decode/helpers/color/_hex.scss +39 -39
- data/stylesheets/decode/helpers/color/_hsl.scss +46 -46
- data/stylesheets/decode/helpers/color/_rgb.scss +46 -46
- data/stylesheets/decode/helpers/map/_consume.scss +33 -33
- data/stylesheets/decode/helpers/number/_find-digits.scss +39 -39
- data/stylesheets/decode/helpers/number/_find-exponent.scss +51 -51
- data/stylesheets/decode/helpers/number/_find-integer.scss +37 -37
- data/stylesheets/decode/helpers/number/_pow.scss +22 -22
- data/stylesheets/decode/helpers/string/_find-ending-quote.scss +57 -57
- data/stylesheets/decode/helpers/string/_length.scss +42 -42
- data/stylesheets/decode/helpers/string/_strip-token.scss +16 -16
- data/stylesheets/decode/types/_bool.scss +40 -40
- data/stylesheets/decode/types/_list.scss +54 -54
- data/stylesheets/decode/types/_map.scss +78 -78
- data/stylesheets/decode/types/_null.scss +19 -19
- data/stylesheets/decode/types/_number.scss +63 -63
- data/stylesheets/decode/types/_string.scss +41 -41
- data/stylesheets/encode/api/_json.scss +17 -17
- data/stylesheets/encode/encode.scss +17 -17
- data/stylesheets/encode/helpers/_quote.scss +9 -9
- data/stylesheets/encode/mixins/_json.scss +36 -36
- data/stylesheets/encode/types/_bool.scss +9 -9
- data/stylesheets/encode/types/_color.scss +9 -9
- data/stylesheets/encode/types/_list.scss +13 -13
- data/stylesheets/encode/types/_map.scss +13 -13
- data/stylesheets/encode/types/_null.scss +9 -9
- data/stylesheets/encode/types/_number.scss +9 -9
- data/stylesheets/encode/types/_string.scss +9 -9
- metadata +8 -10
@@ -1,40 +1,40 @@
|
|
1
|
-
// Cast a JSON encoded string into a hexadecimal color
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $string: JSON string
|
4
|
-
// --------------------------------------------------------------------------------
|
5
|
-
// @return [color|string] string or hex color depending on the match
|
6
|
-
|
7
|
-
@function _from-hex($string) {
|
8
|
-
$string-lower: to-lower-case($string);
|
9
|
-
$r: ""; $g: ""; $b: "";
|
10
|
-
$hex: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f";
|
11
|
-
$length: str-length($string);
|
12
|
-
$max: if($length == 4, 1, 2);
|
13
|
-
|
14
|
-
// Check for length accuracy
|
15
|
-
@if $length != 4 and $length != 7 {
|
16
|
-
@return $string;
|
17
|
-
}
|
18
|
-
|
19
|
-
// Loop from the second character (omitting #)
|
20
|
-
@for $i from 2 through $length {
|
21
|
-
$c: str-slice($string-lower, $i, $i);
|
22
|
-
|
23
|
-
// If wrong character, return
|
24
|
-
@if not index($hex, $c) {
|
25
|
-
@return $string;
|
26
|
-
}
|
27
|
-
|
28
|
-
@if str-length($r) < $max { $r: $r + $c }
|
29
|
-
@else if str-length($g) < $max { $g: $g + $c }
|
30
|
-
@else if str-length($b) < $max { $b: $b + $c }
|
31
|
-
}
|
32
|
-
|
33
|
-
@if $length == 4 {
|
34
|
-
$r: $r + $r;
|
35
|
-
$g: $g + $g;
|
36
|
-
$b: $b + $b;
|
37
|
-
}
|
38
|
-
|
39
|
-
@return rgb(_hex-to-dec($r), _hex-to-dec($g), _hex-to-dec($b));
|
1
|
+
// Cast a JSON encoded string into a hexadecimal color
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $string: JSON string
|
4
|
+
// --------------------------------------------------------------------------------
|
5
|
+
// @return [color|string] string or hex color depending on the match
|
6
|
+
|
7
|
+
@function _from-hex($string) {
|
8
|
+
$string-lower: to-lower-case($string);
|
9
|
+
$r: ""; $g: ""; $b: "";
|
10
|
+
$hex: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f";
|
11
|
+
$length: str-length($string);
|
12
|
+
$max: if($length == 4, 1, 2);
|
13
|
+
|
14
|
+
// Check for length accuracy
|
15
|
+
@if $length != 4 and $length != 7 {
|
16
|
+
@return $string;
|
17
|
+
}
|
18
|
+
|
19
|
+
// Loop from the second character (omitting #)
|
20
|
+
@for $i from 2 through $length {
|
21
|
+
$c: str-slice($string-lower, $i, $i);
|
22
|
+
|
23
|
+
// If wrong character, return
|
24
|
+
@if not index($hex, $c) {
|
25
|
+
@return $string;
|
26
|
+
}
|
27
|
+
|
28
|
+
@if str-length($r) < $max { $r: $r + $c }
|
29
|
+
@else if str-length($g) < $max { $g: $g + $c }
|
30
|
+
@else if str-length($b) < $max { $b: $b + $c }
|
31
|
+
}
|
32
|
+
|
33
|
+
@if $length == 4 {
|
34
|
+
$r: $r + $r;
|
35
|
+
$g: $g + $g;
|
36
|
+
$b: $b + $b;
|
37
|
+
}
|
38
|
+
|
39
|
+
@return rgb(_hex-to-dec($r), _hex-to-dec($g), _hex-to-dec($b));
|
40
40
|
}
|
@@ -1,47 +1,47 @@
|
|
1
|
-
// Cast a JSON encoded string into a hsl(a) color
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $string: JSON string
|
4
|
-
// --------------------------------------------------------------------------------
|
5
|
-
// @return [color|string] string or hsl(a) color, depending on the match
|
6
|
-
|
7
|
-
@function _from-hsl($string) {
|
8
|
-
$frags: ();
|
9
|
-
$string-lower: to-lower-case($string);
|
10
|
-
$is-alpha: str-slice($string-lower, 4, 4) == 'a';
|
11
|
-
$length: str-length($string);
|
12
|
-
$start: str-index($string, "(");
|
13
|
-
|
14
|
-
@for $i from $start through $length {
|
15
|
-
$token: str-slice($string-lower, $i, $i);
|
16
|
-
@if $token == ' ' {
|
17
|
-
// @continue;
|
18
|
-
}
|
19
|
-
@else if $token == '(' or $token == ',' {
|
20
|
-
$frags: append($frags, "");
|
21
|
-
}
|
22
|
-
@else if $token == ')' {
|
23
|
-
@if length($frags) != if($is-alpha, 4, 3) { @return $string; } // Parsing error
|
24
|
-
$hue: _get-color-value(nth($frags, 1));
|
25
|
-
$saturation: _get-color-value(nth($frags, 2));
|
26
|
-
$lightness: _get-color-value(nth($frags, 3));
|
27
|
-
|
28
|
-
@if not $hue or not $saturation or not $lightness {
|
29
|
-
@return $string;
|
30
|
-
}
|
31
|
-
|
32
|
-
@if $is-alpha {
|
33
|
-
@if length($frags) != 4 { @return $string; } // No alpha channel found
|
34
|
-
$alpha: _get-color-value(nth($frags, 4));
|
35
|
-
@if not $alpha { @return $string; } // Error parsing alpha channel
|
36
|
-
@return hsla($hue, $saturation, $lightness, $alpha);
|
37
|
-
}
|
38
|
-
|
39
|
-
@return hsl($hue, $saturation, $lightness);
|
40
|
-
}
|
41
|
-
@else {
|
42
|
-
$frags: set-nth($frags, length($frags), nth($frags, length($frags)) + $token);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
@return $string;
|
1
|
+
// Cast a JSON encoded string into a hsl(a) color
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $string: JSON string
|
4
|
+
// --------------------------------------------------------------------------------
|
5
|
+
// @return [color|string] string or hsl(a) color, depending on the match
|
6
|
+
|
7
|
+
@function _from-hsl($string) {
|
8
|
+
$frags: ();
|
9
|
+
$string-lower: to-lower-case($string);
|
10
|
+
$is-alpha: str-slice($string-lower, 4, 4) == 'a';
|
11
|
+
$length: str-length($string);
|
12
|
+
$start: str-index($string, "(");
|
13
|
+
|
14
|
+
@for $i from $start through $length {
|
15
|
+
$token: str-slice($string-lower, $i, $i);
|
16
|
+
@if $token == ' ' {
|
17
|
+
// @continue;
|
18
|
+
}
|
19
|
+
@else if $token == '(' or $token == ',' {
|
20
|
+
$frags: append($frags, "");
|
21
|
+
}
|
22
|
+
@else if $token == ')' {
|
23
|
+
@if length($frags) != if($is-alpha, 4, 3) { @return $string; } // Parsing error
|
24
|
+
$hue: _get-color-value(nth($frags, 1));
|
25
|
+
$saturation: _get-color-value(nth($frags, 2));
|
26
|
+
$lightness: _get-color-value(nth($frags, 3));
|
27
|
+
|
28
|
+
@if not $hue or not $saturation or not $lightness {
|
29
|
+
@return $string;
|
30
|
+
}
|
31
|
+
|
32
|
+
@if $is-alpha {
|
33
|
+
@if length($frags) != 4 { @return $string; } // No alpha channel found
|
34
|
+
$alpha: _get-color-value(nth($frags, 4));
|
35
|
+
@if not $alpha { @return $string; } // Error parsing alpha channel
|
36
|
+
@return hsla($hue, $saturation, $lightness, $alpha);
|
37
|
+
}
|
38
|
+
|
39
|
+
@return hsl($hue, $saturation, $lightness);
|
40
|
+
}
|
41
|
+
@else {
|
42
|
+
$frags: set-nth($frags, length($frags), nth($frags, length($frags)) + $token);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
@return $string;
|
47
47
|
}
|
@@ -1,47 +1,47 @@
|
|
1
|
-
// Cast a JSON encoded string into a rgb(a) color
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $string: JSON string
|
4
|
-
// --------------------------------------------------------------------------------
|
5
|
-
// @return [color|string] string or rgb(a) color depending on the match
|
6
|
-
|
7
|
-
@function _from-rgb($string) {
|
8
|
-
$string-lower: to-lower-case($string);
|
9
|
-
$frags: ();
|
10
|
-
$is-alpha: str-slice($string-lower, 4, 4) == 'a';
|
11
|
-
$start: str-index($string, "(");
|
12
|
-
$length: str-length($string);
|
13
|
-
|
14
|
-
@for $i from $start through $length {
|
15
|
-
$token: str-slice($string-lower, $i, $i);
|
16
|
-
@if $token == ' ' {
|
17
|
-
// @continue;
|
18
|
-
}
|
19
|
-
@else if $token == '(' or $token == ',' {
|
20
|
-
$frags: append($frags, "");
|
21
|
-
}
|
22
|
-
@else if $token == ')' {
|
23
|
-
@if length($frags) != if($is-alpha, 4, 3) { @return $string; } // Parsing error
|
24
|
-
$red: _get-color-value(nth($frags, 1));
|
25
|
-
$green: _get-color-value(nth($frags, 2));
|
26
|
-
$blue: _get-color-value(nth($frags, 3));
|
27
|
-
|
28
|
-
@if not $red or not $green or not $blue {
|
29
|
-
@return $string;
|
30
|
-
}
|
31
|
-
|
32
|
-
@if $is-alpha {
|
33
|
-
@if length($frags) != 4 { @return $string; } // No alpha channel found
|
34
|
-
$alpha: _get-color-value(nth($frags, 4));
|
35
|
-
@if not $alpha { @return $string; } // Error parsing alpha channel
|
36
|
-
@return rgba($red, $green, $blue, $alpha);
|
37
|
-
}
|
38
|
-
|
39
|
-
@return rgb($red, $green, $blue);
|
40
|
-
}
|
41
|
-
@else {
|
42
|
-
$frags: set-nth($frags, length($frags), nth($frags, length($frags)) + $token);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
@return $string;
|
1
|
+
// Cast a JSON encoded string into a rgb(a) color
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $string: JSON string
|
4
|
+
// --------------------------------------------------------------------------------
|
5
|
+
// @return [color|string] string or rgb(a) color depending on the match
|
6
|
+
|
7
|
+
@function _from-rgb($string) {
|
8
|
+
$string-lower: to-lower-case($string);
|
9
|
+
$frags: ();
|
10
|
+
$is-alpha: str-slice($string-lower, 4, 4) == 'a';
|
11
|
+
$start: str-index($string, "(");
|
12
|
+
$length: str-length($string);
|
13
|
+
|
14
|
+
@for $i from $start through $length {
|
15
|
+
$token: str-slice($string-lower, $i, $i);
|
16
|
+
@if $token == ' ' {
|
17
|
+
// @continue;
|
18
|
+
}
|
19
|
+
@else if $token == '(' or $token == ',' {
|
20
|
+
$frags: append($frags, "");
|
21
|
+
}
|
22
|
+
@else if $token == ')' {
|
23
|
+
@if length($frags) != if($is-alpha, 4, 3) { @return $string; } // Parsing error
|
24
|
+
$red: _get-color-value(nth($frags, 1));
|
25
|
+
$green: _get-color-value(nth($frags, 2));
|
26
|
+
$blue: _get-color-value(nth($frags, 3));
|
27
|
+
|
28
|
+
@if not $red or not $green or not $blue {
|
29
|
+
@return $string;
|
30
|
+
}
|
31
|
+
|
32
|
+
@if $is-alpha {
|
33
|
+
@if length($frags) != 4 { @return $string; } // No alpha channel found
|
34
|
+
$alpha: _get-color-value(nth($frags, 4));
|
35
|
+
@if not $alpha { @return $string; } // Error parsing alpha channel
|
36
|
+
@return rgba($red, $green, $blue, $alpha);
|
37
|
+
}
|
38
|
+
|
39
|
+
@return rgb($red, $green, $blue);
|
40
|
+
}
|
41
|
+
@else {
|
42
|
+
$frags: set-nth($frags, length($frags), nth($frags, length($frags)) + $token);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
@return $string;
|
47
47
|
}
|
@@ -1,33 +1,33 @@
|
|
1
|
-
// Move pointer to position of token
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $source: JSON complete source
|
4
|
-
// @param [number] $pointer: current pointer
|
5
|
-
// @param [string] $token: token to reach
|
6
|
-
// --------------------------------------------------------------------------------
|
7
|
-
// @throw "Expected $token; found {x}."
|
8
|
-
// @throw "Expected $token but reached end of stream."
|
9
|
-
// --------------------------------------------------------------------------------
|
10
|
-
// @return [number|false] new pointer
|
11
|
-
|
12
|
-
@function _consume($source, $pointer, $token) {
|
13
|
-
$length: str-length($source);
|
14
|
-
|
15
|
-
@while $pointer <= $length {
|
16
|
-
$char: str-slice($source, $pointer, $pointer);
|
17
|
-
$pointer: $pointer + 1;
|
18
|
-
|
19
|
-
@if $char == $token {
|
20
|
-
@return $pointer;
|
21
|
-
}
|
22
|
-
|
23
|
-
@else if $char == " " {
|
24
|
-
// @continue;
|
25
|
-
}
|
26
|
-
|
27
|
-
@else {
|
28
|
-
@return _throw("Expected `" + $token + "; ` found `" + $char + "`.", $pointer);
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
@return _throw("Expected `" + $token + "` but reached end of stream.", $pointer);
|
33
|
-
}
|
1
|
+
// Move pointer to position of token
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $source: JSON complete source
|
4
|
+
// @param [number] $pointer: current pointer
|
5
|
+
// @param [string] $token: token to reach
|
6
|
+
// --------------------------------------------------------------------------------
|
7
|
+
// @throw "Expected $token; found {x}."
|
8
|
+
// @throw "Expected $token but reached end of stream."
|
9
|
+
// --------------------------------------------------------------------------------
|
10
|
+
// @return [number|false] new pointer
|
11
|
+
|
12
|
+
@function _consume($source, $pointer, $token) {
|
13
|
+
$length: str-length($source);
|
14
|
+
|
15
|
+
@while $pointer <= $length {
|
16
|
+
$char: str-slice($source, $pointer, $pointer);
|
17
|
+
$pointer: $pointer + 1;
|
18
|
+
|
19
|
+
@if $char == $token {
|
20
|
+
@return $pointer;
|
21
|
+
}
|
22
|
+
|
23
|
+
@else if $char == " " {
|
24
|
+
// @continue;
|
25
|
+
}
|
26
|
+
|
27
|
+
@else {
|
28
|
+
@return _throw("Expected `" + $token + "; ` found `" + $char + "`.", $pointer);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
@return _throw("Expected `" + $token + "` but reached end of stream.", $pointer);
|
33
|
+
}
|
@@ -1,39 +1,39 @@
|
|
1
|
-
// Parses a JSON encoded number to find the digits
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $source: JSON complete source
|
4
|
-
// @param [number] $pointer: current pointer
|
5
|
-
// --------------------------------------------------------------------------------
|
6
|
-
// @throw "Unexpected token $token."
|
7
|
-
// --------------------------------------------------------------------------------
|
8
|
-
// @return [list|false] (new pointer, parsed number)
|
9
|
-
|
10
|
-
@function _find-digits($source, $pointer) {
|
11
|
-
$source: to-lower-case($source);
|
12
|
-
$length: str-length($source);
|
13
|
-
$numbers: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
|
14
|
-
$result: null;
|
15
|
-
$runs: 1;
|
16
|
-
|
17
|
-
@while $pointer <= $length {
|
18
|
-
$token: str-slice($source, $pointer, $pointer);
|
19
|
-
$index: index($numbers, $token);
|
20
|
-
|
21
|
-
@if $token == '.' {
|
22
|
-
// @continue;
|
23
|
-
}
|
24
|
-
@else if $index and $index > 0 {
|
25
|
-
$runs: $runs * 10;
|
26
|
-
$result: if($result == null, ($index - 1), $result * 10 + ($index - 1));
|
27
|
-
}
|
28
|
-
@else {
|
29
|
-
@if index('e' '.' ' ' ',' ']' '}', $token) {
|
30
|
-
@return $pointer, if($result != null, $result / $runs, $result);
|
31
|
-
}
|
32
|
-
@return _throw("Unexpected token `" + $token + "`.", $pointer);
|
33
|
-
}
|
34
|
-
|
35
|
-
$pointer: $pointer + 1;
|
36
|
-
}
|
37
|
-
|
38
|
-
@return $pointer, if($result != null, $result / $runs, $result);
|
39
|
-
}
|
1
|
+
// Parses a JSON encoded number to find the digits
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $source: JSON complete source
|
4
|
+
// @param [number] $pointer: current pointer
|
5
|
+
// --------------------------------------------------------------------------------
|
6
|
+
// @throw "Unexpected token $token."
|
7
|
+
// --------------------------------------------------------------------------------
|
8
|
+
// @return [list|false] (new pointer, parsed number)
|
9
|
+
|
10
|
+
@function _find-digits($source, $pointer) {
|
11
|
+
$source: to-lower-case($source);
|
12
|
+
$length: str-length($source);
|
13
|
+
$numbers: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
|
14
|
+
$result: null;
|
15
|
+
$runs: 1;
|
16
|
+
|
17
|
+
@while $pointer <= $length {
|
18
|
+
$token: str-slice($source, $pointer, $pointer);
|
19
|
+
$index: index($numbers, $token);
|
20
|
+
|
21
|
+
@if $token == '.' {
|
22
|
+
// @continue;
|
23
|
+
}
|
24
|
+
@else if $index and $index > 0 {
|
25
|
+
$runs: $runs * 10;
|
26
|
+
$result: if($result == null, ($index - 1), $result * 10 + ($index - 1));
|
27
|
+
}
|
28
|
+
@else {
|
29
|
+
@if index('e' '.' ' ' ',' ']' '}', $token) {
|
30
|
+
@return $pointer, if($result != null, $result / $runs, $result);
|
31
|
+
}
|
32
|
+
@return _throw("Unexpected token `" + $token + "`.", $pointer);
|
33
|
+
}
|
34
|
+
|
35
|
+
$pointer: $pointer + 1;
|
36
|
+
}
|
37
|
+
|
38
|
+
@return $pointer, if($result != null, $result / $runs, $result);
|
39
|
+
}
|
@@ -1,51 +1,51 @@
|
|
1
|
-
// Parses a JSON encoded number to find the exponent part
|
2
|
-
// --------------------------------------------------------------------------------
|
3
|
-
// @param [string] $source: JSON complete source
|
4
|
-
// @param [number] $pointer: current pointer
|
5
|
-
// --------------------------------------------------------------------------------
|
6
|
-
// @throw "Unexpected token $token."
|
7
|
-
// --------------------------------------------------------------------------------
|
8
|
-
// @return [list|false] (new pointer, parsed number)
|
9
|
-
|
10
|
-
@function _find-exponent($source, $pointer) {
|
11
|
-
$source: to-lower-case($source);
|
12
|
-
$length: str-length($source);
|
13
|
-
$numbers: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
|
14
|
-
$result: null;
|
15
|
-
$minus: null;
|
16
|
-
|
17
|
-
@while $pointer <= $length {
|
18
|
-
$token: str-slice($source, $pointer, $pointer);
|
19
|
-
$index: index($numbers, $token);
|
20
|
-
|
21
|
-
@if $token == 'e' {
|
22
|
-
// @continue;
|
23
|
-
}
|
24
|
-
@else if $token == '-' {
|
25
|
-
@if $minus != null {
|
26
|
-
@return _throw("Unexpected token `-`.", $pointer);
|
27
|
-
}
|
28
|
-
$minus: true;
|
29
|
-
}
|
30
|
-
@else if $token == '+' {
|
31
|
-
@if $minus != null {
|
32
|
-
@return _throw("Unexpected token `+`.", $pointer);
|
33
|
-
}
|
34
|
-
$minus: false;
|
35
|
-
}
|
36
|
-
@else if $index and $index > 0 {
|
37
|
-
$result: if($result == null, ($index - 1), $result * 10 + ($index - 1));
|
38
|
-
}
|
39
|
-
@else {
|
40
|
-
@if not index(' ' ',' ']' '}', $token) {
|
41
|
-
@return _throw("Unexpected token `" + $token + "`.", $pointer);
|
42
|
-
}
|
43
|
-
|
44
|
-
@return $pointer, if($minus and $result != null, $result * -1, $result);
|
45
|
-
}
|
46
|
-
|
47
|
-
$pointer: $pointer + 1;
|
48
|
-
}
|
49
|
-
|
50
|
-
@return $pointer, if($minus and $result != null, $result * -1, $result);
|
51
|
-
}
|
1
|
+
// Parses a JSON encoded number to find the exponent part
|
2
|
+
// --------------------------------------------------------------------------------
|
3
|
+
// @param [string] $source: JSON complete source
|
4
|
+
// @param [number] $pointer: current pointer
|
5
|
+
// --------------------------------------------------------------------------------
|
6
|
+
// @throw "Unexpected token $token."
|
7
|
+
// --------------------------------------------------------------------------------
|
8
|
+
// @return [list|false] (new pointer, parsed number)
|
9
|
+
|
10
|
+
@function _find-exponent($source, $pointer) {
|
11
|
+
$source: to-lower-case($source);
|
12
|
+
$length: str-length($source);
|
13
|
+
$numbers: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
|
14
|
+
$result: null;
|
15
|
+
$minus: null;
|
16
|
+
|
17
|
+
@while $pointer <= $length {
|
18
|
+
$token: str-slice($source, $pointer, $pointer);
|
19
|
+
$index: index($numbers, $token);
|
20
|
+
|
21
|
+
@if $token == 'e' {
|
22
|
+
// @continue;
|
23
|
+
}
|
24
|
+
@else if $token == '-' {
|
25
|
+
@if $minus != null {
|
26
|
+
@return _throw("Unexpected token `-`.", $pointer);
|
27
|
+
}
|
28
|
+
$minus: true;
|
29
|
+
}
|
30
|
+
@else if $token == '+' {
|
31
|
+
@if $minus != null {
|
32
|
+
@return _throw("Unexpected token `+`.", $pointer);
|
33
|
+
}
|
34
|
+
$minus: false;
|
35
|
+
}
|
36
|
+
@else if $index and $index > 0 {
|
37
|
+
$result: if($result == null, ($index - 1), $result * 10 + ($index - 1));
|
38
|
+
}
|
39
|
+
@else {
|
40
|
+
@if not index(' ' ',' ']' '}', $token) {
|
41
|
+
@return _throw("Unexpected token `" + $token + "`.", $pointer);
|
42
|
+
}
|
43
|
+
|
44
|
+
@return $pointer, if($minus and $result != null, $result * -1, $result);
|
45
|
+
}
|
46
|
+
|
47
|
+
$pointer: $pointer + 1;
|
48
|
+
}
|
49
|
+
|
50
|
+
@return $pointer, if($minus and $result != null, $result * -1, $result);
|
51
|
+
}
|