/* eslint-disable
    max-len,
    no-cond-assign,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
 * decaffeinate suggestions:
 * DS101: Remove unnecessary use of Array.from
 * DS102: Remove unnecessary code created because of implicit returns
 * DS207: Consider shorter variations of null checks
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
let DocumentHelper
module.exports = DocumentHelper = {
  getTitleFromTexContent(content, maxContentToScan) {
    if (maxContentToScan == null) {
      maxContentToScan = 30000
    }
    const TITLE_WITH_CURLY_BRACES = /\\[tT]itle\*?\s*{([^}]+)}/
    const TITLE_WITH_SQUARE_BRACES = /\\[tT]itle\s*\[([^\]]+)\]/
    for (const line of Array.from(
      DocumentHelper._getLinesFromContent(content, maxContentToScan)
    )) {
      let match
      if (
        (match =
          line.match(TITLE_WITH_CURLY_BRACES) ||
          line.match(TITLE_WITH_SQUARE_BRACES))
      ) {
        return DocumentHelper.detex(match[1])
      }
    }

    return null
  },

  contentHasDocumentclass(content, maxContentToScan) {
    if (maxContentToScan == null) {
      maxContentToScan = 30000
    }
    for (const line of Array.from(
      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.
      if (line.match(/^\s*\\documentclass/)) {
        return true
      }
    }

    return false
  },

  detex(string) {
    return string
      .replace(/\\LaTeX/g, 'LaTeX')
      .replace(/\\TeX/g, 'TeX')
      .replace(/\\TikZ/g, 'TikZ')
      .replace(/\\BibTeX/g, 'BibTeX')
      .replace(/\\\[[A-Za-z0-9. ]*\]/g, ' ') // line spacing
      .replace(/\\(?:[a-zA-Z]+|.|)/g, '')
      .replace(/{}|~/g, ' ')
      .replace(/[${}]/g, '')
      .replace(/ +/g, ' ')
      .trim()
  },

  _getLinesFromContent(content, maxContentToScan) {
    if (typeof content === 'string') {
      return content.substring(0, maxContentToScan).split('\n')
    } else {
      return content
    }
  },
}
