code: boolean nextIsMixinParam( boolean isBlock ) {
          boolean isFirst = true;
          for( int i=cachePos; i < cache.length(); i++ ) {
              char ch = cache.charAt( i );
              switch( ch ) {
                  case ')':
                      return true;
                  case '@':
                      return cache.charAt( i+1 ) != '{';
                  case '~':
                      return true;
                  case '"':
                      return !isBlock;
                  case '.':
                      if( !isFirst ) {
                          continue;
                      } else {
                          if( Character.isDigit( cache.charAt( i + 1 ) ) ) { //Number with a starting point
                              return true;
                          }
                      }
                      if( i + 2 < cache.length() && cache.charAt( i + 1 ) == '.' && cache.charAt( i + 2 ) == '.' ) { // ...
                          return true;
                      }
                      return false;
                  case ':':
                  case '[':
                      return false;
                  case '{':
                      return true; // detached ruleset as mixin parameter
                  case ' ':
                      continue;
                  default:
                      isFirst = false;
              }
          }
          return false;
      }
docs: If the next data which are already in the cache are a mixin parameter or part of a selector name.
  This is call after a left parenthesis.
  Samples for selectors:<ul>
  <li>(min-resolution: 192dpi)
  <li>(.clearfix all)
  <li>(audio:not([controls]))
  <li>(odd)
  <li>(@{color})
  </ul>
  Samples for mixin params<ul>
  <li>(.65)
  <li>(@color)
  <li>()
  <li>(...)
  <li>(red)
  <li>(1)
  <li>({color: green})
  </ul>
  @param isBlock selector of a block or a semicolon line
  @return true, if it is a mixin parameter