mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-28 07:40:59 +00:00
7f37ba737c
* Update Copybara options in preparation for open-sourcing the source editor * Move files * Update paths * Remove source-editor module and checks for its existence * Explicitly mention CM6 license in files that contain code adapted from CM6 GitOrigin-RevId: 89b7cc2b409db01ad103198ccbd1b126ab56349b
56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const modulePath = path.resolve(__dirname, '../scripts/lezer-latex/generate.js')
|
|
|
|
try {
|
|
fs.accessSync(modulePath, fs.constants.W_OK)
|
|
const { compile, options } = require(modulePath)
|
|
const PLUGIN_NAME = 'lezer-grammar-compiler'
|
|
class LezerGrammarCompilerPlugin {
|
|
apply(compiler) {
|
|
compiler.hooks.make.tap(PLUGIN_NAME, compilation => {
|
|
// Add the grammar file to the file paths watched by webpack
|
|
compilation.fileDependencies.add(options.grammarPath)
|
|
})
|
|
compiler.hooks.beforeCompile.tapAsync(
|
|
PLUGIN_NAME,
|
|
(_compilation, callback) => {
|
|
// Check timestamps on grammar and parser files, and re-compile if needed.
|
|
// (Note: the compiled parser file is watched by webpack, and so will trigger
|
|
// a second compilation immediately after. This seems harmless.)
|
|
if (
|
|
!fs.existsSync(options.parserOutputPath) ||
|
|
!fs.existsSync(options.termsOutputPath)
|
|
) {
|
|
console.log('Parser does not exist, compiling')
|
|
compile()
|
|
return callback()
|
|
}
|
|
fs.stat(options.grammarPath, (err, grammarStat) => {
|
|
if (err) {
|
|
return callback(err)
|
|
}
|
|
fs.stat(options.parserOutputPath, (err, parserStat) => {
|
|
if (err) {
|
|
return callback(err)
|
|
}
|
|
callback()
|
|
if (grammarStat.mtime > parserStat.mtime) {
|
|
console.log('Grammar file newer than parser file, re-compiling')
|
|
compile()
|
|
}
|
|
})
|
|
})
|
|
}
|
|
)
|
|
}
|
|
}
|
|
module.exports = { LezerGrammarCompilerPlugin }
|
|
} catch {
|
|
class NoOpPlugin {
|
|
apply() {
|
|
console.log('lezer-latex module not present, skipping compile')
|
|
}
|
|
}
|
|
module.exports = { LezerGrammarCompilerPlugin: NoOpPlugin }
|
|
}
|