selector.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var TYPE = require('../../tokenizer').TYPE;
  2. var CHARCODE = require('../../tokenizer').CHARCODE;
  3. var DELIM = TYPE.Delim;
  4. var IDENT = TYPE.Ident;
  5. var DIMENSION = TYPE.Dimension;
  6. var PERCENTAGE = TYPE.Percentage;
  7. var NUMBER = TYPE.Number;
  8. var HASH = TYPE.Hash;
  9. var COLON = TYPE.Colon;
  10. var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
  11. var NUMBERSIGN = CHARCODE.NumberSign;
  12. var PLUSSIGN = CHARCODE.PlusSign;
  13. var SOLIDUS = CHARCODE.Solidus;
  14. var ASTERISK = CHARCODE.Asterisk;
  15. var FULLSTOP = CHARCODE.FullStop;
  16. var GREATERTHANSIGN = CHARCODE.GreaterThanSign;
  17. var VERTICALLINE = CHARCODE.VerticalLine;
  18. var TILDE = CHARCODE.Tilde;
  19. function getNode(context) {
  20. switch (this.scanner.tokenType) {
  21. case LEFTSQUAREBRACKET:
  22. return this.AttributeSelector();
  23. case HASH:
  24. return this.IdSelector();
  25. case COLON:
  26. if (this.scanner.lookupType(1) === COLON) {
  27. return this.PseudoElementSelector();
  28. } else {
  29. return this.PseudoClassSelector();
  30. }
  31. case IDENT:
  32. return this.TypeSelector();
  33. case NUMBER:
  34. case PERCENTAGE:
  35. return this.Percentage();
  36. case DIMENSION:
  37. // throws when .123ident
  38. if (this.scanner.source.charCodeAt(this.scanner.tokenStart) === FULLSTOP) {
  39. this.error('Identifier is expected', this.scanner.tokenStart + 1);
  40. }
  41. break;
  42. case DELIM:
  43. var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);
  44. switch (code) {
  45. case PLUSSIGN:
  46. case GREATERTHANSIGN:
  47. case TILDE:
  48. context.space = null;
  49. context.ignoreWSAfter = true;
  50. return this.Combinator();
  51. case SOLIDUS: // /deep/
  52. return this.Combinator();
  53. case FULLSTOP:
  54. return this.ClassSelector();
  55. case ASTERISK:
  56. case VERTICALLINE:
  57. return this.TypeSelector();
  58. case NUMBERSIGN:
  59. return this.IdSelector();
  60. }
  61. break;
  62. }
  63. };
  64. module.exports = {
  65. getNode: getNode
  66. };