code: private void variable( HashMap<String, Expression> variables, FormattableContainer currentRule ) {
          StringBuilder builder = cachesBuilder;
          builder.append( '@' );
          char ch;
          LOOP: for( ;; ) {
              ch = read();
              switch( ch ) {
                  case ':':
                      if( !isVariableName(builder) ) {
                          builder.append( ch );
                          continue;
                      }
                      break LOOP;
                  case ';':
                      String name = trim( builder );
                      if( name.startsWith( "@import " ) ) {
                          importFile( currentRule, name.substring( 8 ).trim() );
                          return;
                      }
                      if( name.endsWith( "()" ) ) {
                          currentRule.add( new VariableExpression( reader, name.substring( 0, name.length() - 2 ) ) ); // reference to detached ruleset
                      } else {
                          currentRule.add( new CssAtRule( reader, name + ';') ); // directives like @charset "UTF-8";
                      }
                      return;
  //                    throw createException( "Unrecognized input: '" + name + "'" );
                  default:
                      builder.append( ch );
              }
          }
          String name = trim( builder );
          Expression value = parseExpression( (char)0 );
          ch = read();
          if( ch == '}' ) {
              back( ch );
          } else {
              if( ch != ';' ) {
                  throw createException( "Unrecognized input: '" + ch + "'" );
              }
          }
          variables.put( name, value );
      }
docs: Parse an expression which starts with an "@".
  
  @param variables container for variables
  @param currentRule parent container which contains the variable