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.

compiler.js 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const test = require('tape')
  2. const Compiler = require('../src/compiler')
  3. const Lexer = require('../src/lexer')
  4. const Parser = require('../src/parser')
  5. const tt = require('../src/tokenTypes')
  6. test('compiles a simple template', t => {
  7. t.plan(1)
  8. const lexer = new Lexer()
  9. const tokenStream = lexer.scan(`
  10. (div :class "foobar"
  11. (p :class "bazquux" "Lorem ipsum dolor sit amet."))
  12. `)
  13. const parser = new Parser(tokenStream)
  14. const tree = parser.parse()
  15. const compiler = new Compiler(tree)
  16. const result = compiler.compile()
  17. t.deepEqual(
  18. result.replace(/\n/g, '').replace(/ +/g, ''),
  19. '<div class="foobar"><p class="bazquux">Lorem ipsum dolor sit amet.</p></div>',
  20. )
  21. })
  22. test('renders variables according to passed-in context', t => {
  23. t.plan(1)
  24. const lexer = new Lexer()
  25. const tokenStream = lexer.scan(`
  26. (div :class classOne
  27. (p :class classTwo bodyText))
  28. `)
  29. const parser = new Parser(tokenStream)
  30. const tree = parser.parse()
  31. const compiler = new Compiler(tree, {
  32. classOne: 'foobar',
  33. classTwo: 'bazquux',
  34. bodyText: 'Lorem ipsum dolor sit amet.',
  35. })
  36. const result = compiler.compile()
  37. t.deepEqual(
  38. result.replace(/\n/g, '').replace(/ +/g, ''),
  39. '<div class="foobar"><p class="bazquux">Lorem ipsum dolor sit amet.</p></div>',
  40. )
  41. })
  42. test('self closing tags are respected', function(t) {
  43. t.plan(1)
  44. const lexer = new Lexer()
  45. const tokenStream = lexer.scan(`
  46. (meta :charset "UTF-8")
  47. (img :src "test.png")
  48. `)
  49. const parser = new Parser(tokenStream)
  50. const tree = parser.parse()
  51. const compiler = new Compiler(tree)
  52. const result = compiler.compile()
  53. t.deepEqual(
  54. result.replace(/\n/g, '').replace(/ +/g, ''),
  55. '<meta charset="UTF-8"><img src="test.png">',
  56. )
  57. })