# File lib/syntax/lang/css21.rb, line 207
    def step

      case

      # scanning selectors only
      when @selector && scan(@tokens[:LBRACE])
        @selector = false
        start_group :normal, matched
      when @selector && scan(@tokens[:IMPORT_SYM])
        start_group :import, matched
      when @selector && scan(@tokens[:PAGE_SYM])
        start_group :page, matched
      when @selector && scan(@tokens[:MEDIA_SYM])
        start_group :media, matched
      when @selector && scan(@tokens[:CHARSET_SYM])
        start_group :charset, matched
      when @selector && scan(@tokens[:HASH])
        start_group :normal, matched
      when @selector && scan(@tokens[:URI])
        start_group :uri, matched

      when @selector && scan(@tokens[:IDENT])
        if MY_TAGS.include?( matched )
          start_group :tag, matched
        else
          start_group :ident, matched
        end

      # scanning declarations only
      when !@selector && scan(@tokens[:RBRACE])
        @selector = true
        start_group :normal, matched
      when !@selector && scan(@tokens[:FUNCTION])
        start_group :function, matched
      when !@selector && scan(@tokens[:EMS])
        start_group :ems, matched
      when !@selector && scan(@tokens[:EXS])
        start_group :exs, matched
      when !@selector && scan(@tokens[:LENGTH])
        start_group :length, matched
      when !@selector && scan(@tokens[:ANGLE])
        start_group :angle, matched
      when !@selector && scan(@tokens[:TIME])
        start_group :time, matched
      when !@selector && scan(@tokens[:FREQ])
        start_group :freq, matched
      when !@selector && scan(@tokens[:PERCENTAGE])
        start_group :percentage, matched
      when !@selector && scan(@tokens[:DIMENSION])
        start_group :dimension, matched
      when !@selector && scan(@tokens[:NUMBER])
        start_group :number, matched
      when !@selector && scan(@tokens[:HEXNUM])
        start_group :number, matched
      when !@selector && scan(@tokens[:IMPORTANT_SYM])
        start_group :important, matched

      when !@selector && scan(@tokens[:IDENT])
        if CSS21_PROPERTIES.include?( matched ) # are they disjoint?
          start_group :property, matched
        elsif CSS21_KEYWORDS.include?( matched )
          start_group :keyword, matched
        else
          start_group :ident, matched
        end

      # scanning both
      when scan(@tokens[:S])
        start_group :normal, matched
      when scan(@tokens[:COMMENT])
        start_group :comment, matched
      when scan(@tokens[:STRING])
        start_group :string, matched
      when scan(@tokens[:CDO])
        start_group :cdo, matched
      when scan(@tokens[:CDC])
        start_group :cdc, matched
      when scan(@tokens[:INVALID])
        start_group :invalid, matched
      else
        start_group :normal, scan(/./x)
      end

    end