TikzManager.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* eslint-disable
  2. handle-callback-err,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS101: Remove unnecessary use of Array.from
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * DS207: Consider shorter variations of null checks
  12. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  13. */
  14. let TikzManager
  15. const fs = require('fs')
  16. const Path = require('path')
  17. const ResourceWriter = require('./ResourceWriter')
  18. const SafeReader = require('./SafeReader')
  19. const logger = require('logger-sharelatex')
  20. // for \tikzexternalize or pstool to work the main file needs to match the
  21. // jobname. Since we set the -jobname to output, we have to create a
  22. // copy of the main file as 'output.tex'.
  23. module.exports = TikzManager = {
  24. checkMainFile(compileDir, mainFile, resources, callback) {
  25. // if there's already an output.tex file, we don't want to touch it
  26. if (callback == null) {
  27. callback = function (error, needsMainFile) {}
  28. }
  29. for (const resource of Array.from(resources)) {
  30. if (resource.path === 'output.tex') {
  31. logger.log({ compileDir, mainFile }, 'output.tex already in resources')
  32. return callback(null, false)
  33. }
  34. }
  35. // if there's no output.tex, see if we are using tikz/pgf or pstool in the main file
  36. return ResourceWriter.checkPath(
  37. compileDir,
  38. mainFile,
  39. function (error, path) {
  40. if (error != null) {
  41. return callback(error)
  42. }
  43. return SafeReader.readFile(
  44. path,
  45. 65536,
  46. 'utf8',
  47. function (error, content) {
  48. if (error != null) {
  49. return callback(error)
  50. }
  51. const usesTikzExternalize =
  52. (content != null
  53. ? content.indexOf('\\tikzexternalize')
  54. : undefined) >= 0
  55. const usesPsTool =
  56. (content != null ? content.indexOf('{pstool}') : undefined) >= 0
  57. logger.log(
  58. { compileDir, mainFile, usesTikzExternalize, usesPsTool },
  59. 'checked for packages needing main file as output.tex'
  60. )
  61. const needsMainFile = usesTikzExternalize || usesPsTool
  62. return callback(null, needsMainFile)
  63. }
  64. )
  65. }
  66. )
  67. },
  68. injectOutputFile(compileDir, mainFile, callback) {
  69. if (callback == null) {
  70. callback = function (error) {}
  71. }
  72. return ResourceWriter.checkPath(
  73. compileDir,
  74. mainFile,
  75. function (error, path) {
  76. if (error != null) {
  77. return callback(error)
  78. }
  79. return fs.readFile(path, 'utf8', function (error, content) {
  80. if (error != null) {
  81. return callback(error)
  82. }
  83. logger.log(
  84. { compileDir, mainFile },
  85. 'copied file to output.tex as project uses packages which require it'
  86. )
  87. // use wx flag to ensure that output file does not already exist
  88. return fs.writeFile(
  89. Path.join(compileDir, 'output.tex'),
  90. content,
  91. { flag: 'wx' },
  92. callback
  93. )
  94. })
  95. }
  96. )
  97. },
  98. }