generate.mjs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /* eslint-disable @overleaf/require-script-runner */
  2. // This script doesn't work with ScriptRunner because it is run during the build process.
  3. import { buildParserFile } from '@lezer/generator'
  4. import { writeFileSync, readFileSync } from 'node:fs'
  5. import path from 'node:path'
  6. const grammars = [
  7. {
  8. grammarPath: path.resolve(
  9. import.meta.dirname,
  10. '../../frontend/js/features/source-editor/lezer-latex/latex.grammar'
  11. ),
  12. parserOutputPath: path.resolve(
  13. import.meta.dirname,
  14. '../../frontend/js/features/source-editor/lezer-latex/latex.mjs'
  15. ),
  16. termsOutputPath: path.resolve(
  17. import.meta.dirname,
  18. '../../frontend/js/features/source-editor/lezer-latex/latex.terms.mjs'
  19. ),
  20. },
  21. {
  22. grammarPath: path.resolve(
  23. import.meta.dirname,
  24. '../../frontend/js/features/source-editor/lezer-bibtex/bibtex.grammar'
  25. ),
  26. parserOutputPath: path.resolve(
  27. import.meta.dirname,
  28. '../../frontend/js/features/source-editor/lezer-bibtex/bibtex.mjs'
  29. ),
  30. termsOutputPath: path.resolve(
  31. import.meta.dirname,
  32. '../../frontend/js/features/source-editor/lezer-bibtex/bibtex.terms.mjs'
  33. ),
  34. },
  35. ]
  36. function compile(grammar) {
  37. const { grammarPath, termsOutputPath, parserOutputPath } = grammar
  38. const moduleStyle = 'es'
  39. console.info(`Compiling ${grammarPath}`)
  40. const grammarText = readFileSync(grammarPath, 'utf8')
  41. console.info(`Loaded grammar from ${grammarPath}`)
  42. const { parser, terms } = buildParserFile(grammarText, {
  43. fileName: grammarPath,
  44. moduleStyle,
  45. })
  46. console.info(`Built parser`)
  47. writeFileSync(parserOutputPath, parser)
  48. console.info(`Wrote parser to ${parserOutputPath}`)
  49. writeFileSync(termsOutputPath, terms)
  50. console.info(`Wrote terms to ${termsOutputPath}`)
  51. console.info('Done!')
  52. }
  53. export default { compile, grammars }
  54. if (
  55. import.meta.url === process.argv[1] ||
  56. import.meta.url === `file://${process.argv[1]}`
  57. ) {
  58. try {
  59. grammars.forEach(compile)
  60. process.exit(0)
  61. } catch (err) {
  62. console.error(err)
  63. process.exit(1)
  64. }
  65. }