overleaf/services/web/app/coffee/Features/Documents/DocumentHelper.coffee
Simon Detheridge 3138919cb7 Merge pull request #1184 from sharelatex/spd-zip-project-name-from-tex-content
zip upload: Read project name from title in zip contents

GitOrigin-RevId: 27122674a0374f86a10c04485d787f4caaf21f5b
2018-12-03 11:20:44 +00:00

25 lines
1.1 KiB
CoffeeScript

module.exports = DocumentHelper =
getTitleFromTexContent: (content, maxContentToScan = 30000) ->
TITLE_WITH_CURLY_BRACES = /\\[tT]itle\*?\s*{([^}]+)}/
TITLE_WITH_SQUARE_BRACES = /\\[tT]itle\s*\[([^\]]+)\]/
ESCAPED_BRACES = /\\([{}\[\]])/g
for line in DocumentHelper._getLinesFromContent(content, maxContentToScan)
match = line.match(TITLE_WITH_SQUARE_BRACES) || line.match(TITLE_WITH_CURLY_BRACES)
if match?
return match[1].replace(ESCAPED_BRACES, (br)->br[1])
return null
contentHasDocumentclass: (content, maxContentToScan = 30000) ->
for line in DocumentHelper._getLinesFromContent(content, maxContentToScan)
# We've had problems with this regex locking up CPU.
# Previously /.*\\documentclass/ would totally lock up on lines of 500kb (data text files :()
# This regex will only look from the start of the line, including whitespace so will return quickly
# regardless of line length.
return true if line.match /^\s*\\documentclass/
return false
_getLinesFromContent: (content, maxContentToScan) ->
return if typeof content is 'string' then content.substring(0, maxContentToScan).split("\n") else content