A templating language that looks like Lisp and compiles to HTML
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

lexer.js 847B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const test = require('tape')
  2. const lexer = require('../src/lexer')
  3. const tt = lexer.tokenTypes
  4. test('lexes simple template correctly', t => {
  5. t.plan(4)
  6. let tokens = lexer.scan(
  7. '(div :class "foobar" (p "Lorem ipsum dolor sit amet"))',
  8. )
  9. t.deepEqual(tokens.map(token => token.type), [
  10. tt.OPAREN,
  11. tt.LITERAL,
  12. tt.ATTRIBUTE,
  13. tt.QUOTE,
  14. tt.LITERAL,
  15. tt.QUOTE,
  16. tt.OPAREN,
  17. tt.LITERAL,
  18. tt.QUOTE,
  19. tt.LITERAL,
  20. tt.QUOTE,
  21. tt.CPAREN,
  22. tt.CPAREN,
  23. tt.EOF,
  24. ])
  25. t.equal(tokens[1].value, 'div')
  26. t.equal(tokens[2].value, 'class')
  27. t.equal(tokens[9].value, 'Lorem ipsum dolor sit amet')
  28. })
  29. test('keeps track of line numbers', t => {
  30. t.plan(2)
  31. let tokens = lexer.scan(`(
  32. (div :class "foobar"
  33. (p :class "bazquux"))
  34. `)
  35. t.equal(tokens[2].line, 2)
  36. t.equal(tokens[7].line, 3)
  37. })