/// Parses a JSON encoded number to find the digits
/// @access private
/// @param {String} $source - JSON complete source
/// @param {Number} $pointer - current pointer
/// @throw Unexpected token $token.
/// @return {List} (new pointer, parsed number)
/// @require {function} _throw
@function _find-digits($source, $pointer) {
  $source: to-lower-case($source);
  $length: str-length($source);
  $numbers: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';
  $result: null;
  $runs: 1;

  @while $pointer <= $length {
    $token: str-slice($source, $pointer, $pointer);
    $index: index($numbers, $token);

    @if $token == '.' {
      // @continue;
    } @else if $index and $index > 0 {
      $runs: $runs * 10;
      $result: if($result == null, ($index - 1), $result * 10 + ($index - 1));
    } @else {
      @if index('e' '.' ' ' ',' ']' '}', $token) {
        @return $pointer, if($result != null, $result / $runs, $result);
      }

      @return _throw("Unexpected token `#{$token}`.", $pointer);
    }

    $pointer: $pointer + 1;
  }

  @return $pointer, if($result != null, $result / $runs, $result);
}
