at_parser.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package css
  2. import (
  3. "github.com/gorilla/css/scanner"
  4. )
  5. func parseAtNoBody(s *scanner.Scanner, ruleType RuleType) *CSSRule {
  6. /*
  7. Syntax:
  8. @charset charset;
  9. Example:
  10. @charset "UTF-8";
  11. Syntax:
  12. @import url; or
  13. @import url list-of-media-queries;
  14. Example:
  15. @import url("fineprint.css") print;
  16. @import url("bluish.css") projection, tv;
  17. @import 'custom.css';
  18. @import url("chrome://communicator/skin/");
  19. @import "common.css" screen, projection;
  20. @import url('landscape.css') screen and (orientation:landscape);
  21. */
  22. parsed := make([]*scanner.Token, 0)
  23. Loop:
  24. for {
  25. token := s.Next()
  26. if token.Type == scanner.TokenEOF || token.Type == scanner.TokenError {
  27. return nil
  28. }
  29. // take everything for now
  30. switch token.Type {
  31. case scanner.TokenEOF, scanner.TokenError:
  32. break Loop
  33. case scanner.TokenChar:
  34. if token.Value == ";" {
  35. break Loop
  36. }
  37. fallthrough
  38. default:
  39. parsed = append(parsed, token)
  40. }
  41. }
  42. rule := NewRule(ruleType)
  43. rule.Style.Selector = &CSSValue{Tokens: parsed}
  44. return rule
  45. }