| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- ENGINE_TO_COMPILER_MAP = {
- latex_dvipdf: "latex"
- pdflatex: "pdflatex"
- xelatex: "xelatex"
- lualatex: "lualatex"
- }
- module.exports = ProjectHelper =
- compilerFromV1Engine: (engine) ->
- return ENGINE_TO_COMPILER_MAP[engine]
- ensureNameIsUnique: (nameList, name, suffixes = [], maxLength, callback = (error, name, changed)->) ->
- # create a set of all project names
- allNames = new Set(nameList)
- isUnique = (x) -> !allNames.has(x)
- # check if the supplied name is already unique
- if isUnique(name)
- return callback(null, name, false)
- # the name already exists, try adding the user-supplied suffixes to generate a unique name
- for suffix in suffixes
- candidateName = ProjectHelper._addSuffixToProjectName(name, suffix, maxLength)
- if isUnique(candidateName)
- return callback(null, candidateName, true)
- # if there are no (more) suffixes, use a numeric one
- uniqueName = ProjectHelper._addNumericSuffixToProjectName(name, allNames, maxLength)
- if uniqueName?
- callback(null, uniqueName, true)
- else
- callback(new Error("Failed to generate a unique name for: #{name}"))
- _addSuffixToProjectName: (name, suffix = '', maxLength) ->
- # append the suffix and truncate the project title if needed
- truncatedLength = maxLength - suffix.length
- return name.substr(0, truncatedLength) + suffix
- _addNumericSuffixToProjectName: (name, allProjectNames, maxLength) ->
- NUMERIC_SUFFIX_MATCH = / \((\d+)\)$/
- suffixedName = (basename, number) ->
- suffix = " (#{number})"
- return basename.substr(0, maxLength - suffix.length) + suffix
- match = name.match(NUMERIC_SUFFIX_MATCH)
- basename = name
- n = 1
- last = allProjectNames.size + n
- if match?
- basename = name.replace(NUMERIC_SUFFIX_MATCH, '')
- n = parseInt(match[1])
- while n <= last
- candidate = suffixedName(basename, n)
- return candidate unless allProjectNames.has(candidate)
- n += 1
- return null
|