Просмотр исходного кода

Merge pull request #5104 from overleaf/hb-move-log-parsers-to-web

Move log parsers to web

GitOrigin-RevId: c9983e168aba6e690809f45c2a056228dc69e0f3
Hugh O'Brien 4 лет назад
Родитель
Сommit
9c83d58caa
19 измененных файлов с 4424 добавлено и 611 удалено
  1. 3 2
      services/web/frontend/js/ide/human-readable-logs/HumanReadableLogs.js
  2. 248 0
      services/web/frontend/js/ide/log-parser/bib-log-parser.js
  3. 377 0
      services/web/frontend/js/ide/log-parser/latex-log-parser.js
  4. 3 2
      services/web/frontend/js/ide/pdf/controllers/PdfController.js
  5. 0 219
      services/web/frontend/js/vendor/libs/bib-log-parser.js
  6. 0 388
      services/web/frontend/js/vendor/libs/latex-log-parser.js
  7. 167 0
      services/web/test/frontend/helpers/fixtures/logs/bad-boxes.log
  8. 353 0
      services/web/test/frontend/helpers/fixtures/logs/biber-warnings.log
  9. 14 0
      services/web/test/frontend/helpers/fixtures/logs/biber.blg
  10. 87 0
      services/web/test/frontend/helpers/fixtures/logs/bibtex.blg
  11. 339 0
      services/web/test/frontend/helpers/fixtures/logs/caption-warnings.log
  12. 573 0
      services/web/test/frontend/helpers/fixtures/logs/errors.log
  13. 375 0
      services/web/test/frontend/helpers/fixtures/logs/file-line-error.log
  14. 391 0
      services/web/test/frontend/helpers/fixtures/logs/filenames.log
  15. 275 0
      services/web/test/frontend/helpers/fixtures/logs/geometry-warnings.log
  16. 72 0
      services/web/test/frontend/helpers/fixtures/logs/natbib-warnings.log
  17. 74 0
      services/web/test/frontend/helpers/fixtures/logs/runaway-arguments.log
  18. 527 0
      services/web/test/frontend/helpers/fixtures/logs/warnings.log
  19. 546 0
      services/web/test/frontend/ide/log-parser/logParserTests.js

+ 3 - 2
services/web/frontend/js/ide/human-readable-logs/HumanReadableLogs.js

@@ -1,11 +1,12 @@
-import LogParser from '../../vendor/libs/latex-log-parser'
+import LatexLogParser from '../log-parser/latex-log-parser'
 import ruleset from './HumanReadableLogsRules'
 
 export default {
   parse(rawLog, options) {
     let parsedLogEntries
     if (typeof rawLog === 'string') {
-      parsedLogEntries = LogParser.parse(rawLog, options)
+      const latexLogParser = new LatexLogParser(rawLog, options)
+      parsedLogEntries = latexLogParser.parse()
     } else {
       parsedLogEntries = rawLog
     }

+ 248 - 0
services/web/frontend/js/ide/log-parser/bib-log-parser.js

@@ -0,0 +1,248 @@
+// [fullLine, lineNumber, messageType, message]
+const LINE_SPLITTER_REGEX = /^\[(\d+)].*>\s(INFO|WARN|ERROR)\s-\s(.*)$/
+
+const MULTILINE_WARNING_REGEX = /^Warning--(.+)\n--line (\d+) of file (.+)$/m
+const SINGLELINE_WARNING_REGEX = /^Warning--(.+)$/m
+const MULTILINE_ERROR_REGEX = /^(.*)---line (\d+) of file (.*)\n([^]+?)\nI'm skipping whatever remains of this entry$/m
+const BAD_CROSS_REFERENCE_REGEX = /^(A bad cross reference---entry ".+?"\nrefers to entry.+?, which doesn't exist)$/m
+const MULTILINE_COMMAND_ERROR_REGEX = /^(.*)\n?---line (\d+) of file (.*)\n([^]+?)\nI'm skipping whatever remains of this command$/m
+// Errors hit in BST file have a slightly different format
+const BST_ERROR_REGEX = /^(.*?)\nwhile executing---line (\d+) of file (.*)/m
+
+const MESSAGE_LEVELS = {
+  INFO: 'info',
+  WARN: 'warning',
+  ERROR: 'error',
+}
+
+const parserReducer = function (accumulator, parser) {
+  const consume = function (logText, regex, process) {
+    let match
+    let text = logText
+    const result = []
+    const re = regex
+    let iterationCount = 0
+    while ((match = re.exec(text))) {
+      iterationCount += 1
+      const newEntry = process(match)
+
+      // Too many log entries can cause browser crashes
+      // Construct a too many files error from the last match
+      var maxErrors = 100
+      if (iterationCount >= maxErrors) {
+        var level = newEntry.level + 's'
+        newEntry.message = [
+          'Over',
+          maxErrors,
+          level,
+          'returned. Download raw logs to see full list',
+        ].join(' ')
+        newEntry.line = undefined
+        result.unshift(newEntry)
+        return [result, '']
+      }
+
+      result.push(newEntry)
+      text =
+        match.input.slice(0, match.index) +
+        match.input.slice(match.index + match[0].length + 1, match.input.length)
+    }
+    return [result, text]
+  }
+
+  const [currentErrors, text] = accumulator
+  const [regex, process] = parser
+  const [errors, _remainingText] = consume(text, regex, process)
+  return [currentErrors.concat(errors), _remainingText]
+}
+
+export default class BibLogParser {
+  constructor(text, options) {
+    if (typeof text !== 'string') {
+      throw new Error('BibLogParser Error: text parameter must be a string')
+    }
+    this.text = text.replace(/(\r\n)|\r/g, '\n')
+    this.options = options || {}
+    this.lines = text.split('\n')
+
+    // each parser is a pair of [regex, processFunction], where processFunction
+    // describes how to transform the regex mactch into a log entry object.
+    this.warningParsers = [
+      [
+        MULTILINE_WARNING_REGEX,
+        function (match) {
+          const [fullMatch, message, lineNumber, fileName] = match
+          return {
+            file: fileName,
+            level: 'warning',
+            message,
+            line: lineNumber,
+            raw: fullMatch,
+          }
+        },
+      ],
+      [
+        SINGLELINE_WARNING_REGEX,
+        function (match) {
+          const [fullMatch, message] = match
+          return {
+            file: '',
+            level: 'warning',
+            message,
+            line: '',
+            raw: fullMatch,
+          }
+        },
+      ],
+    ]
+    this.errorParsers = [
+      [
+        MULTILINE_ERROR_REGEX,
+        function (match) {
+          const [
+            fullMatch,
+            firstMessage,
+            lineNumber,
+            fileName,
+            secondMessage,
+          ] = match
+          return {
+            file: fileName,
+            level: 'error',
+            message: firstMessage + '\n' + secondMessage,
+            line: lineNumber,
+            raw: fullMatch,
+          }
+        },
+      ],
+      [
+        BAD_CROSS_REFERENCE_REGEX,
+        function (match) {
+          const [fullMatch, message] = match
+          return {
+            file: '',
+            level: 'error',
+            message,
+            line: '',
+            raw: fullMatch,
+          }
+        },
+      ],
+      [
+        MULTILINE_COMMAND_ERROR_REGEX,
+        function (match) {
+          const [
+            fullMatch,
+            firstMessage,
+            lineNumber,
+            fileName,
+            secondMessage,
+          ] = match
+          return {
+            file: fileName,
+            level: 'error',
+            message: firstMessage + '\n' + secondMessage,
+            line: lineNumber,
+            raw: fullMatch,
+          }
+        },
+      ],
+      [
+        BST_ERROR_REGEX,
+        function (match) {
+          const [fullMatch, firstMessage, lineNumber, fileName] = match
+          return {
+            file: fileName,
+            level: 'error',
+            message: firstMessage,
+            line: lineNumber,
+            raw: fullMatch,
+          }
+        },
+      ],
+    ]
+  }
+
+  parseBibtex() {
+    let allErrors
+    const result = {
+      all: [],
+      errors: [],
+      warnings: [],
+      files: [], // not used
+      typesetting: [], // not used
+    }
+    // reduce over the parsers, starting with the log text,
+    let [allWarnings, remainingText] = this.warningParsers.reduce(
+      parserReducer,
+      [[], this.text]
+    )
+    ;[allErrors, remainingText] = this.errorParsers.reduce(parserReducer, [
+      [],
+      remainingText,
+    ])
+    result.warnings = allWarnings
+    result.errors = allErrors
+    result.all = allWarnings.concat(allErrors)
+    return result
+  }
+
+  parseBiber() {
+    const result = {
+      all: [],
+      errors: [],
+      warnings: [],
+      files: [], // not used
+      typesetting: [], // not used
+    }
+    this.lines.forEach(function (line) {
+      const match = line.match(LINE_SPLITTER_REGEX)
+      if (match) {
+        const fullLine = match[0]
+        const messageType = match[2]
+        const message = match[3]
+        const newEntry = {
+          file: '',
+          level: MESSAGE_LEVELS[messageType] || 'INFO',
+          message,
+          line: '',
+          raw: fullLine,
+        }
+        // try extract file, line-number and the 'real' message from lines like:
+        //   BibTeX subsystem: /.../original.bib_123.utf8, line 8, syntax error: it's bad
+        const lineMatch = newEntry.message.match(
+          /^BibTeX subsystem: \/.+\/(\w+\.\w+)_.+, line (\d+), (.+)$/
+        )
+        if (lineMatch && lineMatch.length === 4) {
+          const fileName = lineMatch[1]
+          const lineNumber = lineMatch[2]
+          const realMessage = lineMatch[3]
+          newEntry.file = fileName
+          newEntry.line = lineNumber
+          newEntry.message = realMessage
+        }
+        result.all.push(newEntry)
+        switch (newEntry.level) {
+          case 'error':
+            return result.errors.push(newEntry)
+          case 'warning':
+            return result.warnings.push(newEntry)
+        }
+      }
+    })
+    return result
+  }
+
+  parse() {
+    const firstLine = this.lines[0]
+    if (firstLine.match(/^.*INFO - This is Biber.*$/)) {
+      return this.parseBiber()
+    } else if (firstLine.match(/^This is BibTeX, Version.+$/)) {
+      return this.parseBibtex()
+    } else {
+      throw new Error(
+        'BibLogParser Error: cannot determine whether text is biber or bibtex output'
+      )
+    }
+  }
+}

+ 377 - 0
services/web/frontend/js/ide/log-parser/latex-log-parser.js

@@ -0,0 +1,377 @@
+// Define some constants
+const LOG_WRAP_LIMIT = 79
+const LATEX_WARNING_REGEX = /^LaTeX Warning: (.*)$/
+const HBOX_WARNING_REGEX = /^(Over|Under)full \\(v|h)box/
+const PACKAGE_WARNING_REGEX = /^(Package \b.+\b Warning:.*)$/
+// This is used to parse the line number from common latex warnings
+const LINES_REGEX = /lines? ([0-9]+)/
+// This is used to parse the package name from the package warnings
+const PACKAGE_REGEX = /^Package (\b.+\b) Warning/
+
+const STATE = {
+  NORMAL: 0,
+  ERROR: 1,
+}
+
+export default class LatexParser {
+  constructor(text, options) {
+    this.state = STATE.NORMAL
+    options = options || {}
+    this.fileBaseNames = options.fileBaseNames || [/compiles/, /\/usr\/local/]
+    this.ignoreDuplicates = options.ignoreDuplicates
+    this.data = []
+    this.fileStack = []
+    this.currentFileList = this.rootFileList = []
+    this.openParens = 0
+    this.log = new LogText(text)
+  }
+
+  parse() {
+    while ((this.currentLine = this.log.nextLine()) !== false) {
+      if (this.state === STATE.NORMAL) {
+        if (this.currentLineIsError()) {
+          this.state = STATE.ERROR
+          this.currentError = {
+            line: null,
+            file: this.currentFilePath,
+            level: 'error',
+            message: this.currentLine.slice(2),
+            content: '',
+            raw: this.currentLine + '\n',
+          }
+        } else if (this.currentLineIsFileLineError()) {
+          this.state = STATE.ERROR
+          this.parseFileLineError()
+        } else if (this.currentLineIsRunawayArgument()) {
+          this.parseRunawayArgumentError()
+        } else if (this.currentLineIsWarning()) {
+          this.parseSingleWarningLine(LATEX_WARNING_REGEX)
+        } else if (this.currentLineIsHboxWarning()) {
+          this.parseHboxLine()
+        } else if (this.currentLineIsPackageWarning()) {
+          this.parseMultipleWarningLine()
+        } else {
+          this.parseParensForFilenames()
+        }
+      }
+      if (this.state === STATE.ERROR) {
+        this.currentError.content += this.log
+          .linesUpToNextMatchingLine(/^l\.[0-9]+/)
+          .join('\n')
+        this.currentError.content += '\n'
+        this.currentError.content += this.log
+          .linesUpToNextWhitespaceLine()
+          .join('\n')
+        this.currentError.content += '\n'
+        this.currentError.content += this.log
+          .linesUpToNextWhitespaceLine()
+          .join('\n')
+        this.currentError.raw += this.currentError.content
+        const lineNo = this.currentError.raw.match(/l\.([0-9]+)/)
+        if (lineNo && this.currentError.line === null) {
+          this.currentError.line = parseInt(lineNo[1], 10)
+        }
+        this.data.push(this.currentError)
+        this.state = STATE.NORMAL
+      }
+    }
+    return this.postProcess(this.data)
+  }
+
+  currentLineIsError() {
+    return this.currentLine[0] === '!'
+  }
+
+  currentLineIsFileLineError() {
+    return /^\/.*:\d+: .*/.test(this.currentLine)
+  }
+
+  currentLineIsRunawayArgument() {
+    return this.currentLine.match(/^Runaway argument/)
+  }
+
+  currentLineIsWarning() {
+    return !!this.currentLine.match(LATEX_WARNING_REGEX)
+  }
+
+  currentLineIsPackageWarning() {
+    return !!this.currentLine.match(PACKAGE_WARNING_REGEX)
+  }
+
+  currentLineIsHboxWarning() {
+    return !!this.currentLine.match(HBOX_WARNING_REGEX)
+  }
+
+  parseFileLineError() {
+    const result = this.currentLine.match(/^(\/.*):(\d+): (.*)/)
+    this.currentError = {
+      line: result[2],
+      file: result[1],
+      level: 'error',
+      message: result[3],
+      content: '',
+      raw: this.currentLine + '\n',
+    }
+  }
+
+  parseRunawayArgumentError() {
+    this.currentError = {
+      line: null,
+      file: this.currentFilePath,
+      level: 'error',
+      message: this.currentLine,
+      content: '',
+      raw: this.currentLine + '\n',
+    }
+    this.currentError.content += this.log
+      .linesUpToNextWhitespaceLine()
+      .join('\n')
+    this.currentError.content += '\n'
+    this.currentError.content += this.log
+      .linesUpToNextWhitespaceLine()
+      .join('\n')
+    this.currentError.raw += this.currentError.content
+    const lineNo = this.currentError.raw.match(/l\.([0-9]+)/)
+    if (lineNo) {
+      this.currentError.line = parseInt(lineNo[1], 10)
+    }
+    return this.data.push(this.currentError)
+  }
+
+  parseSingleWarningLine(prefixRegex) {
+    const warningMatch = this.currentLine.match(prefixRegex)
+    if (!warningMatch) {
+      return
+    }
+    const warning = warningMatch[1]
+    const lineMatch = warning.match(LINES_REGEX)
+    const line = lineMatch ? parseInt(lineMatch[1], 10) : null
+    this.data.push({
+      line,
+      file: this.currentFilePath,
+      level: 'warning',
+      message: warning,
+      raw: warning,
+    })
+  }
+
+  parseMultipleWarningLine() {
+    // Some package warnings are multiple lines, let's parse the first line
+    let warningMatch = this.currentLine.match(PACKAGE_WARNING_REGEX)
+    if (!warningMatch) {
+      return
+    }
+    // Something strange happened, return early
+    const warningLines = [warningMatch[1]]
+    let lineMatch = this.currentLine.match(LINES_REGEX)
+    let line = lineMatch ? parseInt(lineMatch[1], 10) : null
+    const packageMatch = this.currentLine.match(PACKAGE_REGEX)
+    const packageName = packageMatch[1]
+    // Regex to get rid of the unnecesary (packagename) prefix in most multi-line warnings
+    const prefixRegex = new RegExp(
+      '(?:\\(' + packageName + '\\))*[\\s]*(.*)',
+      'i'
+    )
+    // After every warning message there's a blank line, let's use it
+    while ((this.currentLine = this.log.nextLine())) {
+      lineMatch = this.currentLine.match(LINES_REGEX)
+      line = lineMatch ? parseInt(lineMatch[1], 10) : line
+      warningMatch = this.currentLine.match(prefixRegex)
+      warningLines.push(warningMatch[1])
+    }
+    const rawMessage = warningLines.join(' ')
+    this.data.push({
+      line,
+      file: this.currentFilePath,
+      level: 'warning',
+      message: rawMessage,
+      raw: rawMessage,
+    })
+  }
+
+  parseHboxLine() {
+    const lineMatch = this.currentLine.match(LINES_REGEX)
+    const line = lineMatch ? parseInt(lineMatch[1], 10) : null
+    this.data.push({
+      line,
+      file: this.currentFilePath,
+      level: 'typesetting',
+      message: this.currentLine,
+      raw: this.currentLine,
+    })
+  }
+
+  // Check if we're entering or leaving a new file in this line
+
+  parseParensForFilenames() {
+    const pos = this.currentLine.search(/\(|\)/)
+    if (pos !== -1) {
+      const token = this.currentLine[pos]
+      this.currentLine = this.currentLine.slice(pos + 1)
+      if (token === '(') {
+        const filePath = this.consumeFilePath()
+        if (filePath) {
+          this.currentFilePath = filePath
+          const newFile = {
+            path: filePath,
+            files: [],
+          }
+          this.fileStack.push(newFile)
+          this.currentFileList.push(newFile)
+          this.currentFileList = newFile.files
+        } else {
+          this.openParens++
+        }
+      } else if (token === ')') {
+        if (this.openParens > 0) {
+          this.openParens--
+        } else {
+          if (this.fileStack.length > 1) {
+            this.fileStack.pop()
+            const previousFile = this.fileStack[this.fileStack.length - 1]
+            this.currentFilePath = previousFile.path
+            this.currentFileList = previousFile.files
+          }
+        }
+      }
+      // else {
+      //		 Something has gone wrong but all we can do now is ignore it :(
+      // }
+      // Process the rest of the line
+      this.parseParensForFilenames()
+    }
+  }
+
+  consumeFilePath() {
+    // Our heuristic for detecting file names are rather crude
+    // A file may not contain a ')' in it
+    // To be a file path it must have at least one /
+    if (!this.currentLine.match(/^\/?([^ )]+\/)+/)) {
+      return false
+    }
+    let endOfFilePath = this.currentLine.search(/ |\)/)
+
+    // handle the case where there is a space in a filename
+    while (endOfFilePath !== -1 && this.currentLine[endOfFilePath] === ' ') {
+      const partialPath = this.currentLine.slice(0, endOfFilePath)
+      // consider the file matching done if the space is preceded by a file extension (e.g. ".tex")
+      if (/\.\w+$/.test(partialPath)) {
+        break
+      }
+      // advance to next space or ) or end of line
+      const remainingPath = this.currentLine.slice(endOfFilePath + 1)
+      // consider file matching done if current path is followed by any of "()[]
+      if (/^\s*["()[\]]/.test(remainingPath)) {
+        break
+      }
+      const nextEndOfPath = remainingPath.search(/[ "()[\]]/)
+      if (nextEndOfPath === -1) {
+        endOfFilePath = -1
+      } else {
+        endOfFilePath += nextEndOfPath + 1
+      }
+    }
+    let path
+    if (endOfFilePath === -1) {
+      path = this.currentLine
+      this.currentLine = ''
+    } else {
+      path = this.currentLine.slice(0, endOfFilePath)
+      this.currentLine = this.currentLine.slice(endOfFilePath)
+    }
+    return path
+  }
+
+  postProcess(data) {
+    const all = []
+    const errors = []
+    const warnings = []
+    const typesetting = []
+    const hashes = []
+
+    const hashEntry = entry => entry.raw
+
+    let i = 0
+    while (i < data.length) {
+      if (this.ignoreDuplicates && hashes.indexOf(hashEntry(data[i])) > -1) {
+        i++
+        continue
+      }
+      if (data[i].level === 'error') {
+        errors.push(data[i])
+      } else if (data[i].level === 'typesetting') {
+        typesetting.push(data[i])
+      } else if (data[i].level === 'warning') {
+        warnings.push(data[i])
+      }
+      all.push(data[i])
+      hashes.push(hashEntry(data[i]))
+      i++
+    }
+    return {
+      errors,
+      warnings,
+      typesetting,
+      all,
+      files: this.rootFileList,
+    }
+  }
+}
+
+const LogText = class LogText {
+  constructor(text) {
+    this.text = text.replace(/(\r\n)|\r/g, '\n')
+    // Join any lines which look like they have wrapped.
+    const wrappedLines = this.text.split('\n')
+    this.lines = [wrappedLines[0]]
+    let i = 1
+    while (i < wrappedLines.length) {
+      // If the previous line is as long as the wrap limit then
+      // append this line to it.
+      // Some lines end with ... when LaTeX knows it's hit the limit
+      // These shouldn't be wrapped.
+      if (
+        wrappedLines[i - 1].length === LOG_WRAP_LIMIT &&
+        wrappedLines[i - 1].slice(-3) !== '...'
+      ) {
+        this.lines[this.lines.length - 1] += wrappedLines[i]
+      } else {
+        this.lines.push(wrappedLines[i])
+      }
+      i++
+    }
+    this.row = 0
+  }
+
+  nextLine() {
+    this.row++
+    if (this.row >= this.lines.length) {
+      return false
+    } else {
+      return this.lines[this.row]
+    }
+  }
+
+  rewindLine() {
+    this.row--
+  }
+
+  linesUpToNextWhitespaceLine() {
+    return this.linesUpToNextMatchingLine(/^ *$/)
+  }
+
+  linesUpToNextMatchingLine(match) {
+    const lines = []
+    let nextLine = this.nextLine()
+    if (nextLine !== false) {
+      lines.push(nextLine)
+    }
+    while (nextLine !== false && !nextLine.match(match) && nextLine !== false) {
+      nextLine = this.nextLine()
+      if (nextLine !== false) {
+        lines.push(nextLine)
+      }
+    }
+    return lines
+  }
+}

+ 3 - 2
services/web/frontend/js/ide/pdf/controllers/PdfController.js

@@ -1,6 +1,6 @@
 import App from '../../../base'
 import HumanReadableLogs from '../../human-readable-logs/HumanReadableLogs'
-import BibLogParser from '../../../vendor/libs/bib-log-parser'
+import BibLogParser from '../../log-parser/bib-log-parser'
 import PreviewPane from '../../../features/preview/components/preview-pane'
 import { react2angular } from 'react2angular'
 import { rootContext } from '../../../shared/context/root-context'
@@ -650,7 +650,8 @@ App.controller(
       }
 
       function processBiber(log) {
-        const { errors, warnings } = BibLogParser.parse(log, {})
+        const bibLogParser = new BibLogParser(log, {})
+        const { errors, warnings } = bibLogParser.parse(log, {})
         const all = [].concat(errors, warnings)
         accumulateResults({ type: 'BibTeX:', all, errors, warnings })
       }

+ 0 - 219
services/web/frontend/js/vendor/libs/bib-log-parser.js

@@ -1,219 +0,0 @@
-// Generated by CoffeeScript 1.10.0
-define(function() {
-  var BAD_CROSS_REFERENCE_REGEX, BibLogParser, LINE_SPLITTER_REGEX, MESSAGE_LEVELS, MULTILINE_COMMAND_ERROR_REGEX, MULTILINE_ERROR_REGEX, MULTILINE_WARNING_REGEX, SINGLELINE_WARNING_REGEX, consume, errorParsers, warningParsers;
-  LINE_SPLITTER_REGEX = /^\[(\d+)].*>\s(INFO|WARN|ERROR)\s-\s(.*)$/;
-  MESSAGE_LEVELS = {
-    "INFO": "info",
-    "WARN": "warning",
-    "ERROR": "error"
-  };
-  BibLogParser = function(text, options) {
-    if (typeof text !== 'string') {
-      throw new Error("BibLogParser Error: text parameter must be a string");
-    }
-    this.text = text.replace(/(\r\n)|\r/g, '\n');
-    this.options = options || {};
-    this.lines = text.split('\n');
-  };
-  consume = function(logText, regex, process) {
-    var iterationCount, match, newEntry, re, result, text;
-    text = logText;
-    result = [];
-    re = regex;
-    iterationCount = 0;
-    while (match = re.exec(text)) {
-      iterationCount += 1;
-      newEntry = process(match);
-
-      // Too many log entries can cause browser crashes
-      // Construct a too many files error from the last match
-      var maxErrors = 100;
-      if (iterationCount >= maxErrors) {
-        var level = newEntry.level + "s";
-        newEntry.message = [
-          "Over",
-          maxErrors,
-          level,
-          "returned. Download raw logs to see full list"
-        ].join(" ");
-        newEntry.line = undefined;
-        result.unshift(newEntry);
-        return [result, ""];
-      }
-
-      result.push(newEntry);
-      text = (match.input.slice(0, match.index)) + (match.input.slice(match.index + match[0].length + 1, match.input.length));
-    }
-    return [result, text];
-  };
-  MULTILINE_WARNING_REGEX = /^Warning--(.+)\n--line (\d+) of file (.+)$/m;
-  SINGLELINE_WARNING_REGEX = /^Warning--(.+)$/m;
-  MULTILINE_ERROR_REGEX = /^(.*)---line (\d+) of file (.*)\n([^]+?)\nI'm skipping whatever remains of this entry$/m;
-  BAD_CROSS_REFERENCE_REGEX = /^(A bad cross reference---entry ".+?"\nrefers to entry.+?, which doesn't exist)$/m;
-  MULTILINE_COMMAND_ERROR_REGEX = /^(.*)\n?---line (\d+) of file (.*)\n([^]+?)\nI'm skipping whatever remains of this command$/m;
-  // Errors hit in BST file have a slightly different format
-  BST_ERROR_REGEX = /^(.*?)\nwhile executing---line (\d+) of file (.*)/m;
-  warningParsers = [
-    [
-      MULTILINE_WARNING_REGEX, function(match) {
-        var fileName, fullMatch, lineNumber, message;
-        fullMatch = match[0], message = match[1], lineNumber = match[2], fileName = match[3];
-        return {
-          file: fileName,
-          level: "warning",
-          message: message,
-          line: lineNumber,
-          raw: fullMatch
-        };
-      }
-    ], [
-      SINGLELINE_WARNING_REGEX, function(match) {
-        var fullMatch, message;
-        fullMatch = match[0], message = match[1];
-        return {
-          file: '',
-          level: "warning",
-          message: message,
-          line: '',
-          raw: fullMatch
-        };
-      }
-    ]
-  ];
-  errorParsers = [
-    [
-      MULTILINE_ERROR_REGEX, function(match) {
-        var fileName, firstMessage, fullMatch, lineNumber, secondMessage;
-        fullMatch = match[0], firstMessage = match[1], lineNumber = match[2], fileName = match[3], secondMessage = match[4];
-        return {
-          file: fileName,
-          level: "error",
-          message: firstMessage + '\n' + secondMessage,
-          line: lineNumber,
-          raw: fullMatch
-        };
-      }
-    ], [
-      BAD_CROSS_REFERENCE_REGEX, function(match) {
-        var fullMatch, message;
-        fullMatch = match[0], message = match[1];
-        return {
-          file: '',
-          level: "error",
-          message: message,
-          line: '',
-          raw: fullMatch
-        };
-      }
-    ], [
-      MULTILINE_COMMAND_ERROR_REGEX, function(match) {
-        var fileName, firstMessage, fullMatch, lineNumber, secondMessage;
-        fullMatch = match[0], firstMessage = match[1], lineNumber = match[2], fileName = match[3], secondMessage = match[4];
-        return {
-          file: fileName,
-          level: "error",
-          message: firstMessage + '\n' + secondMessage,
-          line: lineNumber,
-          raw: fullMatch
-        };
-      }
-    ],[
-      BST_ERROR_REGEX, function(match) {
-        var fileName, firstMessage, fullMatch, lineNumber, secondMessage;
-        fullMatch = match[0], firstMessage = match[1], lineNumber = match[2], fileName = match[3];
-        return {
-          file: fileName,
-          level: "error",
-          message: firstMessage,
-          line: lineNumber,
-          raw: fullMatch
-        };
-      }
-    ]
-  ];
-
-  (function() {
-    this.parseBibtex = function() {
-      var allErrors, allWarnings, ref, ref1, remainingText, result;
-      result = {
-        all: [],
-        errors: [],
-        warnings: [],
-        files: [],
-        typesetting: []
-      };
-      ref = warningParsers.reduce(function(accumulator, parser) {
-        var _remainingText, currentWarnings, process, ref, regex, text, warnings;
-        currentWarnings = accumulator[0], text = accumulator[1];
-        regex = parser[0], process = parser[1];
-        ref = consume(text, regex, process), warnings = ref[0], _remainingText = ref[1];
-        return [currentWarnings.concat(warnings), _remainingText];
-      }, [[], this.text]), allWarnings = ref[0], remainingText = ref[1];
-      ref1 = errorParsers.reduce(function(accumulator, parser) {
-        var _remainingText, currentErrors, errors, process, ref1, regex, text;
-        currentErrors = accumulator[0], text = accumulator[1];
-        regex = parser[0], process = parser[1];
-        ref1 = consume(text, regex, process), errors = ref1[0], _remainingText = ref1[1];
-        return [currentErrors.concat(errors), _remainingText];
-      }, [[], remainingText]), allErrors = ref1[0], remainingText = ref1[1];
-      result.warnings = allWarnings;
-      result.errors = allErrors;
-      result.all = allWarnings.concat(allErrors);
-      return result;
-    };
-    this.parseBiber = function() {
-      var result;
-      result = {
-        all: [],
-        errors: [],
-        warnings: [],
-        files: [],
-        typesetting: []
-      };
-      this.lines.forEach(function(line) {
-        var _, fileName, fullLine, lineMatch, lineNumber, match, message, messageType, newEntry, realMessage;
-        match = line.match(LINE_SPLITTER_REGEX);
-        if (match) {
-          fullLine = match[0], lineNumber = match[1], messageType = match[2], message = match[3];
-          newEntry = {
-            file: '',
-            level: MESSAGE_LEVELS[messageType] || "INFO",
-            message: message,
-            line: '',
-            raw: fullLine
-          };
-          lineMatch = newEntry.message.match(/^BibTeX subsystem: \/.+\/(\w+\.\w+)_.+, line (\d+), (.+)$/);
-          if (lineMatch && lineMatch.length === 4) {
-            _ = lineMatch[0], fileName = lineMatch[1], lineNumber = lineMatch[2], realMessage = lineMatch[3];
-            newEntry.file = fileName;
-            newEntry.line = lineNumber;
-            newEntry.message = realMessage;
-          }
-          result.all.push(newEntry);
-          switch (newEntry.level) {
-            case 'error':
-              return result.errors.push(newEntry);
-            case 'warning':
-              return result.warnings.push(newEntry);
-          }
-        }
-      });
-      return result;
-    };
-    return this.parse = function() {
-      var firstLine;
-      firstLine = this.lines[0];
-      if (firstLine.match(/^.*INFO - This is Biber.*$/)) {
-        return this.parseBiber();
-      } else if (firstLine.match(/^This is BibTeX, Version.+$/)) {
-        return this.parseBibtex();
-      } else {
-        throw new Error("BibLogParser Error: cannot determine whether text is biber or bibtex output");
-      }
-    };
-  }).call(BibLogParser.prototype);
-  BibLogParser.parse = function(text, options) {
-    return new BibLogParser(text, options).parse();
-  };
-  return BibLogParser;
-});

+ 0 - 388
services/web/frontend/js/vendor/libs/latex-log-parser.js

@@ -1,388 +0,0 @@
-define(function () {
-  // Define some constants
-  const LOG_WRAP_LIMIT = 79
-  const LATEX_WARNING_REGEX = /^LaTeX Warning: (.*)$/
-  const HBOX_WARNING_REGEX = /^(Over|Under)full \\(v|h)box/
-  const PACKAGE_WARNING_REGEX = /^(Package \b.+\b Warning:.*)$/
-  // This is used to parse the line number from common latex warnings
-  const LINES_REGEX = /lines? ([0-9]+)/
-  // This is used to parse the package name from the package warnings
-  const PACKAGE_REGEX = /^Package (\b.+\b) Warning/
-
-  const LogText = function (text) {
-    this.text = text.replace(/(\r\n)|\r/g, '\n')
-    // Join any lines which look like they have wrapped.
-    const wrappedLines = this.text.split('\n')
-    this.lines = [wrappedLines[0]]
-    let i = 1
-    while (i < wrappedLines.length) {
-      // If the previous line is as long as the wrap limit then
-      // append this line to it.
-      // Some lines end with ... when LaTeX knows it's hit the limit
-      // These shouldn't be wrapped.
-      if (
-        wrappedLines[i - 1].length === LOG_WRAP_LIMIT &&
-        wrappedLines[i - 1].slice(-3) !== '...'
-      ) {
-        this.lines[this.lines.length - 1] += wrappedLines[i]
-      } else {
-        this.lines.push(wrappedLines[i])
-      }
-      i++
-    }
-    this.row = 0
-  }
-
-  ;(function () {
-    this.nextLine = function () {
-      this.row++
-      if (this.row >= this.lines.length) {
-        return false
-      } else {
-        return this.lines[this.row]
-      }
-    }
-
-    this.rewindLine = function () {
-      this.row--
-    }
-
-    this.linesUpToNextWhitespaceLine = function () {
-      return this.linesUpToNextMatchingLine(/^ *$/)
-    }
-
-    this.linesUpToNextMatchingLine = function (match) {
-      const lines = []
-      let nextLine = this.nextLine()
-      if (nextLine !== false) {
-        lines.push(nextLine)
-      }
-      while (
-        nextLine !== false &&
-        !nextLine.match(match) &&
-        nextLine !== false
-      ) {
-        nextLine = this.nextLine()
-        if (nextLine !== false) {
-          lines.push(nextLine)
-        }
-      }
-      return lines
-    }
-  }.call(LogText.prototype))
-
-  const state = {
-    NORMAL: 0,
-    ERROR: 1,
-  }
-
-  const LatexParser = function (text, options) {
-    this.log = new LogText(text)
-    this.state = state.NORMAL
-    options = options || {}
-    this.fileBaseNames = options.fileBaseNames || [/compiles/, /\/usr\/local/]
-    this.ignoreDuplicates = options.ignoreDuplicates
-    this.data = []
-    this.fileStack = []
-    this.currentFileList = this.rootFileList = []
-    this.openParens = 0
-  }
-
-  ;(function () {
-    this.parse = function () {
-      while ((this.currentLine = this.log.nextLine()) !== false) {
-        if (this.state === state.NORMAL) {
-          if (this.currentLineIsError()) {
-            this.state = state.ERROR
-            this.currentError = {
-              line: null,
-              file: this.currentFilePath,
-              level: 'error',
-              message: this.currentLine.slice(2),
-              content: '',
-              raw: this.currentLine + '\n',
-            }
-          } else if (this.currentLineIsFileLineError()) {
-            this.state = state.ERROR
-            this.parseFileLineError()
-          } else if (this.currentLineIsRunawayArgument()) {
-            this.parseRunawayArgumentError()
-          } else if (this.currentLineIsWarning()) {
-            this.parseSingleWarningLine(LATEX_WARNING_REGEX)
-          } else if (this.currentLineIsHboxWarning()) {
-            this.parseHboxLine()
-          } else if (this.currentLineIsPackageWarning()) {
-            this.parseMultipleWarningLine()
-          } else {
-            this.parseParensForFilenames()
-          }
-        }
-        if (this.state === state.ERROR) {
-          this.currentError.content += this.log
-            .linesUpToNextMatchingLine(/^l\.[0-9]+/)
-            .join('\n')
-          this.currentError.content += '\n'
-          this.currentError.content += this.log
-            .linesUpToNextWhitespaceLine()
-            .join('\n')
-          this.currentError.content += '\n'
-          this.currentError.content += this.log
-            .linesUpToNextWhitespaceLine()
-            .join('\n')
-          this.currentError.raw += this.currentError.content
-          const lineNo = this.currentError.raw.match(/l\.([0-9]+)/)
-          if (lineNo && this.currentError.line === null) {
-            this.currentError.line = parseInt(lineNo[1], 10)
-          }
-          this.data.push(this.currentError)
-          this.state = state.NORMAL
-        }
-      }
-      return this.postProcess(this.data)
-    }
-
-    this.currentLineIsError = function () {
-      return this.currentLine[0] === '!'
-    }
-
-    this.currentLineIsFileLineError = function () {
-      return /^\/.*:\d+: .*/.test(this.currentLine)
-    }
-
-    this.currentLineIsRunawayArgument = function () {
-      return this.currentLine.match(/^Runaway argument/)
-    }
-
-    this.currentLineIsWarning = function () {
-      return !!this.currentLine.match(LATEX_WARNING_REGEX)
-    }
-
-    this.currentLineIsPackageWarning = function () {
-      return !!this.currentLine.match(PACKAGE_WARNING_REGEX)
-    }
-
-    this.currentLineIsHboxWarning = function () {
-      return !!this.currentLine.match(HBOX_WARNING_REGEX)
-    }
-
-    this.parseFileLineError = function () {
-      const result = this.currentLine.match(/^(\/.*):(\d+): (.*)/)
-      this.currentError = {
-        line: result[2],
-        file: result[1],
-        level: 'error',
-        message: result[3],
-        content: '',
-        raw: this.currentLine + '\n',
-      }
-    }
-
-    this.parseRunawayArgumentError = function () {
-      this.currentError = {
-        line: null,
-        file: this.currentFilePath,
-        level: 'error',
-        message: this.currentLine,
-        content: '',
-        raw: this.currentLine + '\n',
-      }
-      this.currentError.content += this.log
-        .linesUpToNextWhitespaceLine()
-        .join('\n')
-      this.currentError.content += '\n'
-      this.currentError.content += this.log
-        .linesUpToNextWhitespaceLine()
-        .join('\n')
-      this.currentError.raw += this.currentError.content
-      const lineNo = this.currentError.raw.match(/l\.([0-9]+)/)
-      if (lineNo) {
-        this.currentError.line = parseInt(lineNo[1], 10)
-      }
-      return this.data.push(this.currentError)
-    }
-
-    this.parseSingleWarningLine = function (prefix_regex) {
-      const warningMatch = this.currentLine.match(prefix_regex)
-      if (!warningMatch) {
-        return
-      }
-      const warning = warningMatch[1]
-      const lineMatch = warning.match(LINES_REGEX)
-      const line = lineMatch ? parseInt(lineMatch[1], 10) : null
-      this.data.push({
-        line,
-        file: this.currentFilePath,
-        level: 'warning',
-        message: warning,
-        raw: warning,
-      })
-    }
-
-    this.parseMultipleWarningLine = function () {
-      // Some package warnings are multiple lines, let's parse the first line
-      let warningMatch = this.currentLine.match(PACKAGE_WARNING_REGEX)
-      if (!warningMatch) {
-        return
-      }
-      // Something strange happened, return early
-      const warning_lines = [warningMatch[1]]
-      let lineMatch = this.currentLine.match(LINES_REGEX)
-      let line = lineMatch ? parseInt(lineMatch[1], 10) : null
-      const packageMatch = this.currentLine.match(PACKAGE_REGEX)
-      const packageName = packageMatch[1]
-      // Regex to get rid of the unnecesary (packagename) prefix in most multi-line warnings
-      const prefixRegex = new RegExp(
-        '(?:\\(' + packageName + '\\))*[\\s]*(.*)',
-        'i'
-      )
-      // After every warning message there's a blank line, let's use it
-      while (!!(this.currentLine = this.log.nextLine())) {
-        lineMatch = this.currentLine.match(LINES_REGEX)
-        line = lineMatch ? parseInt(lineMatch[1], 10) : line
-        warningMatch = this.currentLine.match(prefixRegex)
-        warning_lines.push(warningMatch[1])
-      }
-      const raw_message = warning_lines.join(' ')
-      this.data.push({
-        line,
-        file: this.currentFilePath,
-        level: 'warning',
-        message: raw_message,
-        raw: raw_message,
-      })
-    }
-
-    this.parseHboxLine = function () {
-      const lineMatch = this.currentLine.match(LINES_REGEX)
-      const line = lineMatch ? parseInt(lineMatch[1], 10) : null
-      this.data.push({
-        line,
-        file: this.currentFilePath,
-        level: 'typesetting',
-        message: this.currentLine,
-        raw: this.currentLine,
-      })
-    }
-
-    // Check if we're entering or leaving a new file in this line
-
-    this.parseParensForFilenames = function () {
-      const pos = this.currentLine.search(/\(|\)/)
-      if (pos !== -1) {
-        const token = this.currentLine[pos]
-        this.currentLine = this.currentLine.slice(pos + 1)
-        if (token === '(') {
-          const filePath = this.consumeFilePath()
-          if (filePath) {
-            this.currentFilePath = filePath
-            const newFile = {
-              path: filePath,
-              files: [],
-            }
-            this.fileStack.push(newFile)
-            this.currentFileList.push(newFile)
-            this.currentFileList = newFile.files
-          } else {
-            this.openParens++
-          }
-        } else if (token === ')') {
-          if (this.openParens > 0) {
-            this.openParens--
-          } else {
-            if (this.fileStack.length > 1) {
-              this.fileStack.pop()
-              const previousFile = this.fileStack[this.fileStack.length - 1]
-              this.currentFilePath = previousFile.path
-              this.currentFileList = previousFile.files
-            }
-          }
-        }
-        // else {
-        //		 Something has gone wrong but all we can do now is ignore it :(
-        // }
-        // Process the rest of the line
-        this.parseParensForFilenames()
-      }
-    }
-
-    this.consumeFilePath = function () {
-      // Our heuristic for detecting file names are rather crude
-      // A file may not contain a ')' in it
-      // To be a file path it must have at least one /
-      if (!this.currentLine.match(/^\/?([^ )]+\/)+/)) {
-        return false
-      }
-
-      let endOfFilePath = this.currentLine.search(/ |\)/)
-
-      // handle the case where there is a space in a filename
-      while (endOfFilePath !== -1 && this.currentLine[endOfFilePath] === ' ') {
-        const partialPath = this.currentLine.slice(0, endOfFilePath)
-        // consider the file matching done if the space is preceded by a file extension (e.g. ".tex")
-        if (/\.\w+$/.test(partialPath)) {
-          break
-        }
-        // advance to next space or ) or end of line
-        const remainingPath = this.currentLine.slice(endOfFilePath + 1)
-        // consider file matching done if current path is followed by any of "()[]
-        if (/^\s*["()[\]]/.test(remainingPath)) {
-          break
-        }
-        const nextEndOfPath = remainingPath.search(/[ "()[\]]/)
-        if (nextEndOfPath === -1) {
-          endOfFilePath = -1
-        } else {
-          endOfFilePath += nextEndOfPath + 1
-        }
-      }
-      let path
-      if (endOfFilePath === -1) {
-        path = this.currentLine
-        this.currentLine = ''
-      } else {
-        path = this.currentLine.slice(0, endOfFilePath)
-        this.currentLine = this.currentLine.slice(endOfFilePath)
-      }
-      return path
-    }
-
-    this.postProcess = function (data) {
-      const all = []
-      const errors = []
-      const warnings = []
-      const typesetting = []
-      const hashes = []
-
-      const hashEntry = entry => entry.raw
-
-      let i = 0
-      while (i < data.length) {
-        if (this.ignoreDuplicates && hashes.indexOf(hashEntry(data[i])) > -1) {
-          i++
-          continue
-        }
-        if (data[i].level === 'error') {
-          errors.push(data[i])
-        } else if (data[i].level === 'typesetting') {
-          typesetting.push(data[i])
-        } else if (data[i].level === 'warning') {
-          warnings.push(data[i])
-        }
-        all.push(data[i])
-        hashes.push(hashEntry(data[i]))
-        i++
-      }
-      return {
-        errors,
-        warnings,
-        typesetting,
-        all,
-        files: this.rootFileList,
-      }
-    }
-  }.call(LatexParser.prototype))
-
-  LatexParser.parse = (text, options) => new LatexParser(text, options).parse()
-
-  return LatexParser
-})

+ 167 - 0
services/web/test/frontend/helpers/fixtures/logs/bad-boxes.log

@@ -0,0 +1,167 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009) (format=pdflatex 2010.5.16)  16 APR 2012 09:05
+entering extended mode
+ %&-line parsing enabled.
+**logs/bad-boxes.tex
+(compiles/b6cf470376785e64ad84c57e3296c912/logs/bad-boxes.tex
+LaTeX2e <2009/09/24>
+Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh
+yphenation, german-x-2009-06-19, ngerman-x-2009-06-19, ancientgreek, ibycus, ar
+abic, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danish, dutc
+h, esperanto, estonian, farsi, finnish, french, galician, german, ngerman, mono
+greek, greek, hungarian, icelandic, assamese, bengali, gujarati, hindi, kannada
+, malayalam, marathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, i
+rish, italian, kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, b
+okmal, nynorsk, polish, portuguese, romanian, russian, sanskrit, serbian, slova
+k, slovenian, spanish, swedish, turkish, turkmen, ukenglish, ukrainian, upperso
+rbian, welsh, loaded.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/multirow/multirow.sty
+\bigstrutjot=\dimen103
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/polynom/polynom.sty
+Package: polynom 2006/04/20 0.17 (CH,HA)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks14
+)
+\pld@currstage=\count87
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2000/07/18 v2.13 AMS math features
+\@mathmargin=\skip43
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0
+\@emptytoks=\toks15
+\ex@=\dimen104
+)) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d
+\pmbraise@=\dimen105
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 1999/12/14 v2.01 operator names
+)
+\inf@bad=\count88
+LaTeX Info: Redefining \frac on input line 211.
+\uproot@=\count89
+\leftroot@=\count90
+LaTeX Info: Redefining \overline on input line 307.
+\classnum@=\count91
+\DOTSCASE@=\count92
+LaTeX Info: Redefining \ldots on input line 379.
+LaTeX Info: Redefining \dots on input line 382.
+LaTeX Info: Redefining \cdots on input line 467.
+\Mathstrutbox@=\box26
+\strutbox@=\box27
+\big@size=\dimen106
+LaTeX Font Info:    Redeclaring font encoding OML on input line 567.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 568.
+\macc@depth=\count93
+\c@MaxMatrixCols=\count94
+\dotsspace@=\muskip10
+\c@parentequation=\count95
+\dspbrk@lvl=\count96
+\tag@help=\toks16
+\row@=\count97
+\column@=\count98
+\maxfields@=\count99
+\andhelp@=\toks17
+\eqnshift@=\dimen107
+\alignsep@=\dimen108
+\tagshift@=\dimen109
+\tagwidth@=\dimen110
+\totwidth@=\dimen111
+\lineht@=\dimen112
+\@envbody=\toks18
+\multlinegap=\skip44
+\multlinetaggap=\skip45
+\mathdisplay@stack=\toks19
+LaTeX Info: Redefining \[ on input line 2666.
+LaTeX Info: Redefining \] on input line 2667.
+)
+No file output.aux.
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 7.
+LaTeX Font Info:    ... okay on input line 7.
+
+Overfull \hbox (29.11179pt too wide) in paragraph at lines 9--10
+[]\OT1/cmr/m/n/10 This line will be too long thanks to an email ad-dress james-
+james-james@scribtex.com 
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 11--13
+
+ []
+
+
+Overfull \vbox (12.00034pt too high) detected at line 27
+ []
+
+
+Underfull \vbox (badness 10000) detected at line 46
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 54--55
+
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 58--60
+
+ []
+
+[1
+
+{/usr/local/texlive/2009/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2] (co
+mpiles/b6cf470376785e64ad84c57e3296c912/output.aux) ) 
+Here is how much of TeX's memory you used:
+ 1219 strings out of 493773
+ 15510 string characters out of 3145367
+ 73808 words of memory out of 3000000
+ 4559 multiletter control sequences out of 15000+200000
+ 4709 words of font info for 18 fonts, out of 3000000 for 9000
+ 714 hyphenation exceptions out of 8191
+ 27i,16n,35p,210b,192s stack positions out of 5000i,500n,10000p,200000b,50000s
+</usr/local/texlive/2009/t
+exmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/local/texlive/2009/te
+xmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2009/tex
+mf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2009/texm
+f-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2009/texmf
+-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2009/texmf-d
+ist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2009/texmf-dis
+t/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive/2009/texmf-dist/f
+onts/type1/public/amsfonts/cm/cmsy10.pfb>
+Output written on compiles/b6cf470376785e64ad84c57e3296c912/output.pdf (2 pages
+, 77420 bytes).
+PDF statistics:
+ 41 PDF objects out of 1000 (max. 8388607)
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)
+

+ 353 - 0
services/web/test/frontend/helpers/fixtures/logs/biber-warnings.log

@@ -0,0 +1,353 @@
+This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013) (format=pdflatex 2014.4.2)  30 MAY 2014 14:44
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2011/06/27>
+Babel <3.9k> and hyphenation patterns for 78 languages loaded.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2013/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex.sty
+Package: biblatex 2013/11/25 v2.8a programmable bibliographies (PK/JW/AB)
+
+Package biblatex Warning: No "backend" specified, using Biber backend.
+(biblatex)                To use BibTeX, load biblatex with
+(biblatex)                the "backend=bibtex" option.
+
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex2.sty
+Package: biblatex2 2013/11/25 v2.8a programmable bibliographies (biber) (PK/JW/
+AB)
+(/usr/local/texlive/2013/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+Package: etoolbox 2011/01/03 v2.1 e-TeX tools for LaTeX
+(/usr/local/texlive/2013/texmf-dist/tex/latex/etex-pkg/etex.sty
+Package: etex 1998/03/26 v2.0 eTeX basic definition package (PEB)
+\et@xins=\count87
+)
+\etb@tempcnta=\count88
+) (/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks14
+) (/usr/local/texlive/2013/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
+(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
+(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
+) (/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
+(/usr/local/texlive/2013/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+))) (/usr/local/texlive/2013/texmf-dist/tex/latex/logreq/logreq.sty
+Package: logreq 2010/08/04 v1.0 xml request logger
+\lrq@indent=\count89
+(/usr/local/texlive/2013/texmf-dist/tex/latex/logreq/logreq.def
+File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+)) (/usr/local/texlive/2013/texmf-dist/tex/latex/base/ifthen.sty
+Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
+) (/usr/local/texlive/2013/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+\c@tabx@nest=\count90
+\c@listtotal=\count91
+\c@listcount=\count92
+\c@liststart=\count93
+\c@liststop=\count94
+\c@citecount=\count95
+\c@citetotal=\count96
+\c@multicitecount=\count97
+\c@multicitetotal=\count98
+\c@instcount=\count99
+\c@maxnames=\count100
+\c@minnames=\count101
+\c@maxitems=\count102
+\c@minitems=\count103
+\c@citecounter=\count104
+\c@savedcitecounter=\count105
+\c@uniquelist=\count106
+\c@uniquename=\count107
+\c@refsection=\count108
+\c@refsegment=\count109
+\c@maxextratitle=\count110
+\c@maxextratitleyear=\count111
+\c@maxextrayear=\count112
+\c@maxextraalpha=\count113
+\c@abbrvpenalty=\count114
+\c@highnamepenalty=\count115
+\c@lownamepenalty=\count116
+\c@maxparens=\count117
+\c@parenlevel=\count118
+\blx@tempcnta=\count119
+\blx@tempcntb=\count120
+\blx@tempcntc=\count121
+\blx@maxsection=\count122
+\blx@maxsegment@0=\count123
+\blx@notetype=\count124
+\blx@parenlevel@text=\count125
+\blx@parenlevel@foot=\count126
+\blx@sectionciteorder@0=\count127
+\labelnumberwidth=\skip43
+\labelalphawidth=\skip44
+\shorthandwidth=\skip45
+\biblabelsep=\skip46
+\bibitemsep=\skip47
+\bibnamesep=\skip48
+\bibinitsep=\skip49
+\bibparsep=\skip50
+\bibhang=\skip51
+\blx@bcfin=\read1
+\blx@bcfout=\write3
+\c@mincomprange=\count128
+\c@maxcomprange=\count129
+\c@mincompwidth=\count130
+Package biblatex Info: Trying to load biblatex default data model...
+Package biblatex Info: ... file 'blx-dm.def' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/blx-dm.def)
+Package biblatex Info: Trying to load biblatex style data model...
+Package biblatex Info: ... file 'ieee.dbx' not found.
+Package biblatex Info: Trying to load biblatex custom data model...
+Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+\c@afterword=\count131
+\c@savedafterword=\count132
+\c@annotator=\count133
+\c@savedannotator=\count134
+\c@author=\count135
+\c@savedauthor=\count136
+\c@bookauthor=\count137
+\c@savedbookauthor=\count138
+\c@commentator=\count139
+\c@savedcommentator=\count140
+\c@editor=\count141
+\c@savededitor=\count142
+\c@editora=\count143
+\c@savededitora=\count144
+\c@editorb=\count145
+\c@savededitorb=\count146
+\c@editorc=\count147
+\c@savededitorc=\count148
+\c@foreword=\count149
+\c@savedforeword=\count150
+\c@holder=\count151
+\c@savedholder=\count152
+\c@introduction=\count153
+\c@savedintroduction=\count154
+\c@namea=\count155
+\c@savednamea=\count156
+\c@nameb=\count157
+\c@savednameb=\count158
+\c@namec=\count159
+\c@savednamec=\count160
+\c@shortauthor=\count161
+\c@savedshortauthor=\count162
+\c@shorteditor=\count163
+\c@savedshorteditor=\count164
+\c@translator=\count165
+\c@savedtranslator=\count166
+\c@labelname=\count167
+\c@savedlabelname=\count168
+\c@institution=\count169
+\c@savedinstitution=\count170
+\c@lista=\count171
+\c@savedlista=\count172
+\c@listb=\count173
+\c@savedlistb=\count174
+\c@listc=\count175
+\c@savedlistc=\count176
+\c@listd=\count177
+\c@savedlistd=\count178
+\c@liste=\count179
+\c@savedliste=\count180
+\c@listf=\count181
+\c@savedlistf=\count182
+\c@location=\count183
+\c@savedlocation=\count184
+\c@organization=\count185
+\c@savedorganization=\count186
+\c@origlocation=\count187
+\c@savedoriglocation=\count188
+\c@origpublisher=\count189
+\c@savedorigpublisher=\count190
+\c@publisher=\count191
+\c@savedpublisher=\count192
+\c@language=\count193
+\c@savedlanguage=\count194
+\c@pageref=\count195
+\c@savedpageref=\count196
+Package biblatex Info: Trying to load compatibility code...
+Package biblatex Info: ... file 'blx-compat.def' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/blx-compat.def
+File: blx-compat.def 2013/11/25 v2.8a biblatex compatibility (PK/JW/AB)
+)
+Package biblatex Info: Trying to load generic definitions...
+Package biblatex Info: ... file 'biblatex.def' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex.def
+File: biblatex.def
+\c@textcitecount=\count197
+\c@textcitetotal=\count198
+\c@textcitemaxnames=\count199
+\c@biburlnumpenalty=\count200
+\c@biburlucpenalty=\count201
+\c@biburllcpenalty=\count202
+\c@smartand=\count203
+)
+Package biblatex Info: Trying to load bibliography style 'ieee'...
+Package biblatex Info: ... file 'ieee.bbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex-ieee/ieee.bbx
+File: ieee.bbx 2013/10/25 v1.1j biblatex bibliography style
+Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.bbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
+File: numeric-comp.bbx 2013/11/25 v2.8a biblatex bibliography style (PK/JW/AB)
+Package biblatex Info: Trying to load bibliography style 'numeric'...
+Package biblatex Info: ... file 'numeric.bbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
+File: numeric.bbx 2013/11/25 v2.8a biblatex bibliography style (PK/JW/AB)
+Package biblatex Info: Trying to load bibliography style 'standard'...
+Package biblatex Info: ... file 'standard.bbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+File: standard.bbx 2013/11/25 v2.8a biblatex bibliography style (PK/JW/AB)
+\c@bbx:relatedcount=\count204
+\c@bbx:relatedtotal=\count205
+))))
+Package biblatex Info: Trying to load citation style 'ieee'...
+Package biblatex Info: ... file 'ieee.cbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex-ieee/ieee.cbx
+File: ieee.cbx 2013/10/25 v1.1j biblatex citation style
+Package biblatex Info: Trying to load citation style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.cbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
+File: numeric-comp.cbx 2013/11/25 v2.8a biblatex citation style (PK/JW/AB)
+\c@cbx@tempcnta=\count206
+\c@cbx@tempcntb=\count207
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\footcite'.
+Package biblatex Info: Redefining '\footcitetext'.
+Package biblatex Info: Redefining '\smartcite'.
+Package biblatex Info: Redefining '\supercite'.
+Package biblatex Info: Redefining '\textcite'.
+Package biblatex Info: Redefining '\textcites'.
+Package biblatex Info: Redefining '\cites'.
+Package biblatex Info: Redefining '\parencites'.
+Package biblatex Info: Redefining '\smartcites'.
+)
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\cites'.
+)
+Package biblatex Info: Trying to load configuration file...
+Package biblatex Info: ... file 'biblatex.cfg' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex.cfg
+File: biblatex.cfg
+)))
+Package biblatex Info: Trying to load language 'english'...
+Package biblatex Info: ... file 'english.lbx' found.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/lbx/english.lbx
+File: english.lbx 2013/11/25 v2.8a biblatex localization (PK/JW/AB)
+)
+\@quotelevel=\count208
+\@quotereset=\count209
+(/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 5.
+LaTeX Font Info:    ... okay on input line 5.
+Package biblatex Info: No input encoding detected.
+(biblatex)             Assuming 'ascii'.
+Package biblatex Info: Automatic encoding selection.
+(biblatex)             Assuming data encoding 'ascii'.
+\openout3 = `output.bcf'.
+
+Package biblatex Info: Trying to load bibliographic data...
+Package biblatex Info: ... file 'output.bbl' found.
+(/compile/output.bbl
+
+Package biblatex Warning: The following entry could not be found
+(biblatex)                in the database:
+(biblatex)                Missing3
+(biblatex)                Please verify the spelling and rerun
+(biblatex)                LaTeX afterwards.
+
+
+Package biblatex Warning: The following entry could not be found
+(biblatex)                in the database:
+(biblatex)                Missing2
+(biblatex)                Please verify the spelling and rerun
+(biblatex)                LaTeX afterwards.
+
+
+Package biblatex Warning: The following entry could not be found
+(biblatex)                in the database:
+(biblatex)                Missing1
+(biblatex)                Please verify the spelling and rerun
+(biblatex)                LaTeX afterwards.
+
+)
+Package biblatex Info: Reference section=0 on input line 5.
+Package biblatex Info: Reference segment=0 on input line 5.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <12> on input line 11.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <8> on input line 11.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <6> on input line 11.
+[1
+
+{/usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (/compi
+le/output.aux)
+Package logreq Info: Writing requests to 'output.run.xml'.
+\openout1 = `output.run.xml'.
+
+ )
+Here is how much of TeX's memory you used:
+ 5875 strings out of 493308
+ 101409 string characters out of 6137823
+ 481464 words of memory out of 5000000
+ 9308 multiletter control sequences out of 15000+600000
+ 8233 words of font info for 29 fonts, out of 8000000 for 9000
+ 957 hyphenation exceptions out of 8191
+ 44i,6n,49p,820b,967s stack positions out of 5000i,500n,10000p,200000b,80000s
+</usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb
+></usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb>
+</usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></
+usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></us
+r/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/
+local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb>
+Output written on /compile/output.pdf (1 page, 68642 bytes).
+PDF statistics:
+ 32 PDF objects out of 1000 (max. 8388607)
+ 22 compressed objects within 1 object stream
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)

+ 14 - 0
services/web/test/frontend/helpers/fixtures/logs/biber.blg

@@ -0,0 +1,14 @@
+[0] Config.pm:324> INFO - This is Biber 2.1
+[0] Config.pm:327> INFO - Logfile is 'output.blg'
+[44] biber-darwin:276> INFO - === Thu Mar  3, 2016, 16:00:52
+[45] Biber.pm:333> INFO - Reading 'output.bcf'
+[148] Biber.pm:645> INFO - Found 1 citekeys in bib section 0
+[168] Biber.pm:2977> INFO - Processing section 0
+[184] Biber.pm:3115> INFO - Looking for bibtex format file 'bibliography.bib' for section 0
+[186] bibtex.pm:1021> INFO - Decoding LaTeX character macros into UTF-8
+[187] bibtex.pm:895> INFO - Found BibTeX data source 'bibliography.bib'
+[187] Utils.pm:146> WARN - Entry small does not parse correctly
+[187] Utils.pm:146> WARN - BibTeX subsystem: /var/folders/xz/jm214r5n7dv36_q3nclqxvpm0000gn/T/w5cKkglymq/bibliography.bib_46723.utf8, line 4, warning: possible runaway string started at line 3
+[187] Utils.pm:162> ERROR - BibTeX subsystem: /var/folders/xz/jm214r5n7dv36_q3nclqxvpm0000gn/T/w5cKkglymq/bibliography.bib_46723.utf8, line 8, syntax error: at end of input, expected end of entry ("}" or ")") (skipping to next "@")
+[188] Biber.pm:106> INFO - WARNINGS: 2
+[188] Biber.pm:110> INFO - ERRORS: 1

+ 87 - 0
services/web/test/frontend/helpers/fixtures/logs/bibtex.blg

@@ -0,0 +1,87 @@
+This is BibTeX, Version 0.99d (TeX Live 2014)
+Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
+The top-level auxiliary file: output.aux
+The style file: apj.bst
+Database file #1: outputNotes.bib
+Database file #2: references.bib
+I was expecting a `,' or a `}'---line 196 of file references.bib
+ :
+ : @ARTICLE{Biviano03,
+(Error may have been on previous line)
+I'm skipping whatever remains of this entry
+I was expecting a `,' or a `}'---line 1133 of file references.bib
+ :
+ : @ARTICLE{Saro13,
+(Error may have been on previous line)
+I'm skipping whatever remains of this entry
+Repeated entry---line 541 of file references.bib
+ :  @article{abe1984influence
+ :                           ,
+I'm skipping whatever remains of this entry
+I was expecting a `,' or a `}'---line 1213 of file references.bib
+ :
+ : @ARTICLE{Springel05,
+(Error may have been on previous line)
+I'm skipping whatever remains of this entry
+You're missing a field part---line 1255 of file references.bib
+ :     month =
+ :             ,
+I'm skipping whatever remains of this entry
+Reallocated wiz_functions (elt_size=4) to 6000 items from 3000.
+Warning--string name "something" is undefined
+--line 152 of file references.bib
+Warning--can't use both author and editor fields in Binney87
+Warning--empty booktitle in Dietterich-00
+Warning--empty publisher in Binney87
+Warning--string name "august" is undefined
+--line 152 of file references.bib
+Warning--empty note in Svensmark14
+A bad cross reference---entry "conf/icde/FilhoTTF01"
+refers to entry "conf/icde/2001", which doesn't exist
+I couldn't open style file aa.bst
+---line 31 of file output.aux
+ : \bibstyle{aa
+ :             }
+I'm skipping whatever remains of this command
+You've used 48 entries,
+            3010 wiz_defined-function locations,
+            957 strings with 17710 characters,
+and the built_in function-call counts, 25881 in all, are:
+= -- 1937
+> -- 2358
+< -- 11
++ -- 783
+- -- 852
+* -- 2444
+:= -- 5047
+add.period$ -- 48
+call.type$ -- 48
+change.case$ -- 320
+chr.to.int$ -- 48
+cite$ -- 51
+duplicate$ -- 899
+empty$ -- 1291
+format.name$ -- 904
+if$ -- 4963
+int.to.chr$ -- 1
+int.to.str$ -- 1
+missing$ -- 47
+newline$ -- 148
+num.names$ -- 193
+pop$ -- 349
+preamble$ -- 1
+purify$ -- 320
+quote$ -- 0
+skip$ -- 744
+stack$ -- 0
+substring$ -- 989
+swap$ -- 1
+text.length$ -- 0
+text.prefix$ -- 0
+top$ -- 0
+type$ -- 429
+warning$ -- 3
+while$ -- 173
+width$ -- 0
+write$ -- 478
+(There were 4 error messages)

+ 339 - 0
services/web/test/frontend/helpers/fixtures/logs/caption-warnings.log

@@ -0,0 +1,339 @@
+This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2015.3.24)  28 OCT 2015 00:36
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2014/05/01>
+Babel <3.9l> and hyphenation patterns for 79 languages loaded.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/IEEEtran/IEEEtran.cls
+Document Class: IEEEtran 2014/09/17 V1.8a by Michael Shell
+-- See the "IEEEtran_HOWTO" manual for usage information.
+-- http://www.michaelshell.org/tex/ieeetran/
+\@IEEEtrantmpdimenA=\dimen102
+\@IEEEtrantmpdimenB=\dimen103
+\@IEEEtrantmpdimenC=\dimen104
+\@IEEEtrantmpcountA=\count79
+\@IEEEtrantmpcountB=\count80
+\@IEEEtrantmpcountC=\count81
+\@IEEEtrantmptoksA=\toks14
+LaTeX Font Info:    Try loading font information for OT1+ptm on input line 458.
+
+(/usr/local/texlive/2014/texmf-dist/tex/latex/psnfss/ot1ptm.fd
+File: ot1ptm.fd 2001/06/04 font definitions for OT1/ptm.
+)
+-- Using 8.5in x 11in (letter) paper.
+-- Using PDF output.
+\@IEEEnormalsizeunitybaselineskip=\dimen105
+-- This is a 10 point document.
+\CLASSINFOnormalsizebaselineskip=\dimen106
+\CLASSINFOnormalsizeunitybaselineskip=\dimen107
+\IEEEnormaljot=\dimen108
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <5> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <5> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <7> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <7> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <8> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <8> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <9> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <9> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <10> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <10> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <11> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <11> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <12> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <12> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <17> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <17> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <20> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <20> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+LaTeX Font Info:    Font shape `OT1/ptm/bx/n' in size <24> not available
+(Font)              Font shape `OT1/ptm/b/n' tried instead on input line 1039.
+LaTeX Font Info:    Font shape `OT1/ptm/bx/it' in size <24> not available
+(Font)              Font shape `OT1/ptm/b/it' tried instead on input line 1039.
+
+\IEEEquantizedlength=\dimen109
+\IEEEquantizedlengthdiff=\dimen110
+\IEEEquantizedtextheightdiff=\dimen111
+\IEEEilabelindentA=\dimen112
+\IEEEilabelindentB=\dimen113
+\IEEEilabelindent=\dimen114
+\IEEEelabelindent=\dimen115
+\IEEEdlabelindent=\dimen116
+\IEEElabelindent=\dimen117
+\IEEEiednormlabelsep=\dimen118
+\IEEEiedmathlabelsep=\dimen119
+\IEEEiedtopsep=\skip41
+\c@section=\count82
+\c@subsection=\count83
+\c@subsubsection=\count84
+\c@paragraph=\count85
+\c@IEEEsubequation=\count86
+\abovecaptionskip=\skip42
+\belowcaptionskip=\skip43
+\c@figure=\count87
+\c@table=\count88
+\@IEEEeqnnumcols=\count89
+\@IEEEeqncolcnt=\count90
+\@IEEEsubeqnnumrollback=\count91
+\@IEEEquantizeheightA=\dimen120
+\@IEEEquantizeheightB=\dimen121
+\@IEEEquantizeheightC=\dimen122
+\@IEEEquantizeprevdepth=\dimen123
+\@IEEEquantizemultiple=\count92
+\@IEEEquantizeboxA=\box26
+\@IEEEtmpitemindent=\dimen124
+\c@IEEEbiography=\count93
+\@IEEEtranrubishbin=\box27
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/caption/subcaption.sty
+Package: subcaption 2013/02/03 v1.1-62 Sub-captions (AR)
+(/usr/local/texlive/2014/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2013/05/02 v3.3-89 Customizing captions (AR)
+(/usr/local/texlive/2014/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2013/05/02 v1.6-88 caption3 kernel (AR)
+Package caption3 Info: TeX engine: e-TeX on input line 57.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+)
+\captionmargin=\dimen125
+\captionmargin@=\dimen126
+\captionwidth=\dimen127
+\caption@tempdima=\dimen128
+\caption@indent=\dimen129
+\caption@parindent=\dimen130
+\caption@hangindent=\dimen131
+Package caption Info: Unknown document class (or package),
+(caption)             standard defaults will be used.
+)
+
+Package caption Warning: Unsupported document class (or package) detected,
+(caption)                usage of the caption package is not recommended.
+See the caption package documentation for explanation.
+
+Package caption Info: \@makecaption = \long macro:#1#2->\ifx \@captype \@IEEEta
+blestring \footnotesize \bgroup \par \centering \@IEEEtabletopskipstrut {\norma
+lfont \footnotesize #1}\\{\normalfont \footnotesize \scshape #2}\par \addvspace
+ {0.5\baselineskip }\egroup \@IEEEtablecaptionsepspace \else \@IEEEfigurecaptio
+nsepspace \setbox \@tempboxa \hbox {\normalfont \footnotesize {#1.}\nobreakspac
+e \nobreakspace #2}\ifdim \wd \@tempboxa >\hsize \setbox \@tempboxa \hbox {\nor
+malfont \footnotesize {#1.}\nobreakspace \nobreakspace }\parbox [t]{\hsize }{\n
+ormalfont \footnotesize \noindent \unhbox \@tempboxa #2}\else \ifCLASSOPTIONcon
+ference \hbox to\hsize {\normalfont \footnotesize \hfil \box \@tempboxa \hfil }
+\else \hbox to\hsize {\normalfont \footnotesize \box \@tempboxa \hfil }\fi \fi 
+\fi .
+\c@ContinuedFloat=\count94
+)
+\c@subfigure=\count95
+\c@subtable=\count96
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/listing/listing.sty
+Package: listing 1999/05/25
+Package `listing', V1.2, <1999/05/25>
+\c@listing=\count97
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
+Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO)
+
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
+Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO)
+Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO)
+Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
+Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO)
+Package ifvtex Info: VTeX not detected.
+Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO)
+Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in PDF mode is detected.
+Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
+Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
+Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO)
+Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO
+)
+Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO)
+Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO)
+)
+Package hobsub Info: Skipping package `hobsub' (already loaded).
+Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
+Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO)
+Package: xcolor-patch 2011/01/30 xcolor patch
+Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO)
+Package atveryend Info: \enddocument detected (standard20110627).
+Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO)
+Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO)
+Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty
+Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO)
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
+)
+\@linkdim=\dimen132
+\Hy@linkcounter=\count98
+\Hy@pagecounter=\count99
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO)
+)
+\Hy@SavedSpaceFactor=\count100
+(/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+)
+Package hyperref Info: Hyper figures OFF on input line 4443.
+Package hyperref Info: Link nesting OFF on input line 4448.
+Package hyperref Info: Hyper index ON on input line 4451.
+Package hyperref Info: Plain pages OFF on input line 4458.
+Package hyperref Info: Backreferencing OFF on input line 4463.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4688.
+\c@Hy@tempcnt=\count101
+(/usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 5041.
+\XeTeXLinkMargin=\dimen133
+\Fld@menulength=\count102
+\Field@Width=\dimen134
+\Fld@charsize=\dimen135
+Package hyperref Info: Hyper figures OFF on input line 6295.
+Package hyperref Info: Link nesting OFF on input line 6300.
+Package hyperref Info: Hyper index ON on input line 6303.
+Package hyperref Info: backreferencing OFF on input line 6310.
+Package hyperref Info: Link coloring OFF on input line 6315.
+Package hyperref Info: Link coloring with OCG OFF on input line 6320.
+Package hyperref Info: PDF/A mode OFF on input line 6325.
+LaTeX Info: Redefining \ref on input line 6365.
+LaTeX Info: Redefining \pageref on input line 6369.
+\Hy@abspage=\count103
+\c@Item=\count104
+\c@Hfootnote=\count105
+)
+
+Package hyperref Message: Driver (autodetected): hpdftex.
+
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX
+\Fld@listcount=\count106
+\c@bookmark@seq@number=\count107
+(/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
+Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
+82.
+)
+\Hy@SectionHShift=\skip44
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 36.
+LaTeX Font Info:    ... okay on input line 36.
+-- Lines per column: 58 (exact).
+Package caption Info: Begin \AtBeginDocument code.
+Package caption Info: hyperref package is loaded.
+Package caption Info: End \AtBeginDocument code.
+\AtBeginShipoutBox=\box28
+Package hyperref Info: Link coloring OFF on input line 36.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
+Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
+)
+\c@section@level=\count108
+)
+LaTeX Info: Redefining \ref on input line 36.
+LaTeX Info: Redefining \pageref on input line 36.
+LaTeX Info: Redefining \nameref on input line 36.
+(/compile/output.out) (/compile/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+
+Package caption Warning: The option `hypcap=true' will be ignored for this
+(caption)                particular \caption on input line 46.
+See the caption package documentation for explanation.
+
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <7> on input line 53.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <5> on input line 53.
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 68.
+[1{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}
+
+
+]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 68.
+(/compile/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 68.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 68.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: D41D8CD98F00B204E9800998ECF8427E;0.
+Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 68.
+ ) 
+Here is how much of TeX's memory you used:
+ 6094 strings out of 493109
+ 99653 string characters out of 6135010
+ 179577 words of memory out of 5000000
+ 9567 multiletter control sequences out of 15000+600000
+ 27944 words of font info for 57 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 42i,6n,44p,244b,359s stack positions out of 5000i,500n,10000p,200000b,80000s
+{/usr/local/texlive/2014/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/local/t
+exlive/2014/texmf-dist/fonts/type1/urw/times/utmr8a.pfb>
+Output written on /compile/output.pdf (1 page, 13958 bytes).
+PDF statistics:
+ 23 PDF objects out of 1000 (max. 8388607)
+ 18 compressed objects within 1 object stream
+ 4 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)

+ 573 - 0
services/web/test/frontend/helpers/fixtures/logs/errors.log

@@ -0,0 +1,573 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009) (format=pdflatex 2010.5.16)  13 APR 2012 21:52
+entering extended mode
+ %&-line parsing enabled.
+**instantons.tex
+(compiles/dff0c37d892f346e58fc14975a16bf69/instantons.tex
+LaTeX2e <2009/09/24>
+Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh
+yphenation, german-x-2009-06-19, ngerman-x-2009-06-19, ancientgreek, ibycus, ar
+abic, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danish, dutc
+h, esperanto, estonian, farsi, finnish, french, galician, german, ngerman, mono
+greek, greek, hungarian, icelandic, assamese, bengali, gujarati, hindi, kannada
+, malayalam, marathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, i
+rish, italian, kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, b
+okmal, nynorsk, polish, portuguese, romanian, russian, sanskrit, serbian, slova
+k, slovenian, spanish, swedish, turkish, turkmen, ukenglish, ukrainian, upperso
+rbian, welsh, loaded.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/relsize/relsize.sty
+Package: relsize 2003/07/04 ver 3.1
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/preprint/fullpage.sty
+Package: fullpage 1999/02/23 1.1 (PWD)
+\FP@margin=\skip43
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2000/07/18 v2.13 AMS math features
+\@mathmargin=\skip44
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0
+\@emptytoks=\toks14
+\ex@=\dimen103
+)) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d
+\pmbraise@=\dimen104
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 1999/12/14 v2.01 operator names
+)
+\inf@bad=\count87
+LaTeX Info: Redefining \frac on input line 211.
+\uproot@=\count88
+\leftroot@=\count89
+LaTeX Info: Redefining \overline on input line 307.
+\classnum@=\count90
+\DOTSCASE@=\count91
+LaTeX Info: Redefining \ldots on input line 379.
+LaTeX Info: Redefining \dots on input line 382.
+LaTeX Info: Redefining \cdots on input line 467.
+\Mathstrutbox@=\box26
+\strutbox@=\box27
+\big@size=\dimen105
+LaTeX Font Info:    Redeclaring font encoding OML on input line 567.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 568.
+\macc@depth=\count92
+\c@MaxMatrixCols=\count93
+\dotsspace@=\muskip10
+\c@parentequation=\count94
+\dspbrk@lvl=\count95
+\tag@help=\toks15
+\row@=\count96
+\column@=\count97
+\maxfields@=\count98
+\andhelp@=\toks16
+\eqnshift@=\dimen106
+\alignsep@=\dimen107
+\tagshift@=\dimen108
+\tagwidth@=\dimen109
+\totwidth@=\dimen110
+\lineht@=\dimen111
+\@envbody=\toks17
+\multlinegap=\skip45
+\multlinetaggap=\skip46
+\mathdisplay@stack=\toks18
+LaTeX Info: Redefining \[ on input line 2666.
+LaTeX Info: Redefining \] on input line 2667.
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amscls/amsthm.sty
+Package: amsthm 2004/08/06 v2.20
+\thm@style=\toks19
+\thm@bodyfont=\toks20
+\thm@headfont=\toks21
+\thm@notefont=\toks22
+\thm@headpunct=\toks23
+\thm@preskip=\skip47
+\thm@postskip=\skip48
+\thm@headsep=\skip49
+\dth@everypar=\toks24
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/amsfonts.sty
+Package: amsfonts 2009/06/22 v3.00 Basic AMSFonts support
+\symAMSa=\mathgroup4
+\symAMSb=\mathgroup5
+LaTeX Font Info:    Overwriting math alphabet `\mathfrak' in version `bold'
+(Font)                  U/euf/m/n --> U/euf/b/n on input line 96.
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2010/05/04 v6.81a Hypertext links for LaTeX
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+Package: ltxcmds 2010/04/26 v1.7 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks25
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2010/03/01 v1.9 Key value parser (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2010/04/08 v1.3 Providing info/warning/message (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2010/01/28 v1.3 Prefix for e-TeX command names (HO)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+)) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/pdfescape.sty
+Package: pdfescape 2010/03/01 v1.9 Provides hex, PDF name and string conversion
+s (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+Package: pdftexcmds 2010/04/01 v0.9 Utility functions of pdfTeX for LuaTeX (HO)
+
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+)) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2010/01/28 v2.1 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in pdf mode detected.
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifvtex.sty
+Package: ifvtex 2010/03/01 v1.5 Switches for detecting VTeX and its modes (HO)
+Package ifvtex Info: VTeX not detected.
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/hycolor.sty
+Package: hycolor 2009/12/12 v1.6 Color options of hyperref/bookmark (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/xcolor-patch.sty
+Package: xcolor-patch 2009/12/12 xcolor patch
+)) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/letltxmacro.sty
+Package: letltxmacro 2008/06/24 v1.3 Let assignment for LaTeX macros (HO)
+)
+\@linkdim=\dimen112
+\Hy@linkcounter=\count99
+\Hy@pagecounter=\count100
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2010/05/04 v6.81a Hyperref: PDFDocEncoding definition (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/intcalc.sty
+Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/latexconfig/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2010/02/22 v3.7 Keyval support for LaTeX options (HO)
+)
+Package hyperref Info: Hyper figures OFF on input line 3639.
+Package hyperref Info: Link nesting OFF on input line 3644.
+Package hyperref Info: Hyper index ON on input line 3647.
+Package hyperref Info: Plain pages OFF on input line 3654.
+Package hyperref Info: Backreferencing OFF on input line 3659.
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks ON on input line 3855.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip11
+Package: url 2006/04/12  ver 3.3  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 4140.
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/bitset.sty
+Package: bitset 2007/09/28 v1.0 Data type bit set (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/bigintcalc.sty
+Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO)
+))
+\Fld@menulength=\count101
+\Field@Width=\dimen113
+\Fld@charsize=\dimen114
+\Field@toks=\toks26
+Package hyperref Info: Hyper figures OFF on input line 5118.
+Package hyperref Info: Link nesting OFF on input line 5123.
+Package hyperref Info: Hyper index ON on input line 5126.
+Package hyperref Info: backreferencing OFF on input line 5133.
+Package hyperref Info: Link coloring OFF on input line 5138.
+Package hyperref Info: Link coloring with OCG OFF on input line 5143.
+Package hyperref Info: PDF/A mode OFF on input line 5148.
+LaTeX Info: Redefining \ref on input line 5188.
+LaTeX Info: Redefining \pageref on input line 5192.
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/atbegshi.sty
+Package: atbegshi 2010/03/25 v1.12 At begin shipout hook (HO)
+)
+\Hy@abspage=\count102
+\c@Item=\count103
+\c@Hfootnote=\count104
+)
+* hyperref using default driver hpdftex *
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2010/05/04 v6.81a Hyperref driver for pdfTeX
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/atveryend.sty
+Package: atveryend 2010/03/24 v1.5 Hooks at very end of document (HO)
+Package atveryend Info: \enddocument detected (standard).
+)
+\Fld@listcount=\count105
+\c@bookmark@seq@number=\count106
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
+Package: rerunfilecheck 2010/03/16 v1.6 Rerun checks for auxiliary files (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/uniquecounter.sty
+Package: uniquecounter 2009/12/18 v1.1 Provides unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
+71.
+)
+\Hy@SectionHShift=\skip50
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/subfig/subfig.sty
+Package: subfig 2005/06/28 ver: 1.3 subfig package
+(/usr/local/texlive/2009/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2010/01/09 v3.1m Customizing captions (AR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2010/01/14 v3.1m caption3 kernel (AR)
+\captionmargin=\dimen115
+\captionmargin@=\dimen116
+\captionwidth=\dimen117
+\caption@indent=\dimen118
+\caption@parindent=\dimen119
+\caption@hangindent=\dimen120
+)
+\c@ContinuedFloat=\count107
+Package caption Info: hyperref package is loaded.
+)
+\c@KVtest=\count108
+\sf@farskip=\skip51
+\sf@captopadj=\dimen121
+\sf@capskip=\skip52
+\sf@nearskip=\skip53
+\c@subfigure=\count109
+\c@subfigure@save=\count110
+\c@lofdepth=\count111
+\c@subtable=\count112
+\c@subtable@save=\count113
+\c@lotdepth=\count114
+\sf@top=\skip54
+\sf@bottom=\skip55
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/latexconfig/graphics.cfg
+File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live
+)
+Package graphics Info: Driver file: pdftex.def on input line 91.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/pdftex-def/pdftex.def
+File: pdftex.def 2010/02/14 v0.04n Graphics/color for pdfTeX
+\Gread@gobject=\count115
+))
+\Gin@req@height=\dimen122
+\Gin@req@width=\dimen123
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/showlabels/showlabels.sty
+Package: showlabels 2009/05/29 v1.6.5
+Package: `showlabels' v1.6.5 <2009/05/29>
+with amsmath equation tags
+\SL@labelposition=\count116
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/mh/mathtools.sty
+Package: mathtools 2008/08/01 v1.06 mathematical typesetting tools (MH)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/tools/calc.sty
+Package: calc 2007/08/22 v4.3 Infix arithmetic (KKT,FJ)
+\calc@Acount=\count117
+\calc@Bcount=\count118
+\calc@Adimen=\dimen124
+\calc@Bdimen=\dimen125
+\calc@Askip=\skip56
+\calc@Bskip=\skip57
+LaTeX Info: Redefining \setlength on input line 76.
+LaTeX Info: Redefining \addtolength on input line 77.
+\calc@Ccount=\count119
+\calc@Cskip=\skip58
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/mh/mhsetup.sty
+Package: mhsetup 2010/01/21 v1.2a programming setup (MH)
+)
+\g_MT_multlinerow_int=\count120
+\l_MT_multwidth_dim=\dimen126
+)
+\c@claim=\count121
+(compiles/dff0c37d892f346e58fc14975a16bf69/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+\AtBeginShipoutBox=\box28
+Package hyperref Info: Link coloring OFF on input line 30.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2010/04/30 v2.40 Cross-referencing by name of section
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/refcount.sty
+Package: refcount 2008/08/11 v3.1 Data extraction from references (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
+Package: gettitlestring 2009/12/18 v1.3 Cleanup title references (HO)
+)
+\c@section@level=\count122
+)
+LaTeX Info: Redefining \ref on input line 30.
+LaTeX Info: Redefining \pageref on input line 30.
+LaTeX Info: Redefining \nameref on input line 30.
+(compiles/dff0c37d892f346e58fc14975a16bf69/output.out) (compiles/dff0c37d892f34
+6e58fc14975a16bf69/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+Package caption Info: Begin \AtBeginDocument code.
+Package caption3 Info: subfig package 1.2 or 1.3 is loaded.
+LaTeX Info: Redefining \subref on input line 30.
+Package caption Info: End \AtBeginDocument code.
+(/usr/local/texlive/2009/texmf-dist/tex/context/base/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count123
+\scratchdimen=\dimen127
+\scratchbox=\box29
+\nofMPsegments=\count124
+\nofMParguments=\count125
+\everyMPshowfont=\toks27
+\MPscratchCnt=\count126
+\MPscratchDim=\dimen128
+\MPnumerator=\count127
+\everyMPtoPDFconversion=\toks28
+) (compiles/dff0c37d892f346e58fc14975a16bf69/output.toc
+LaTeX Font Info:    Try loading font information for U+msa on input line 3.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/umsa.fd
+File: umsa.fd 2009/06/22 v3.00 AMS symbols A
+)
+LaTeX Font Info:    Try loading font information for U+msb on input line 3.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/umsb.fd
+File: umsb.fd 2009/06/22 v3.00 AMS symbols B
+))
+\tf@toc=\write4
+\openout4 = `output.toc'.
+
+(compiles/dff0c37d892f346e58fc14975a16bf69/sections/introduction.tex) (compiles
+/dff0c37d892f346e58fc14975a16bf69/sections/instantons.tex [1
+
+{/usr/local/texlive/2009/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
+LaTeX Font Info:    Try loading font information for U+euf on input line 7.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/ueuf.fd
+File: ueuf.fd 2009/06/22 v3.00 Euler Fraktur
+) [2] [3] [4] [5] [6] [7])
+(compiles/dff0c37d892f346e58fc14975a16bf69/sections/moduli_space_approximation.
+tex [8] [9] [10] [11] [12])
+(compiles/dff0c37d892f346e58fc14975a16bf69/sections/dynamics_of_single_instanto
+n.tex [13] <figures/variation_of_theta_dot.png, id=342, 361.35pt x 228.855pt>
+File: figures/variation_of_theta_dot.png Graphic file (type png)
+<use figures/variation_of_theta_dot.png> <figures/variation_of_rho_dot.png, id=
+343, 361.35pt x 232.87pt>
+File: figures/variation_of_rho_dot.png Graphic file (type png)
+<use figures/variation_of_rho_dot.png>
+Overfull \hbox (13.3333pt too wide) in paragraph at lines 55--61
+ [][][][] 
+ []
+
+)
+(compiles/dff0c37d892f346e58fc14975a16bf69/sections/dynamics_of_two_instantons.
+tex [14 <compiles/dff0c37d892f346e58fc14975a16bf69/figures/variation_of_theta_d
+ot.png (PNG copy)> <compiles/dff0c37d892f346e58fc14975a16bf69/figures/variation
+_of_rho_dot.png (PNG copy)>] [15] [16] <figures/higgs_field/fig1.png, id=392, 3
+61.35pt x 285.065pt>
+File: figures/higgs_field/fig1.png Graphic file (type png)
+<use figures/higgs_field/fig1.png> <figures/higgs_field/fig2.png, id=393, 361.3
+5pt x 286.06876pt>
+File: figures/higgs_field/fig2.png Graphic file (type png)
+<use figures/higgs_field/fig2.png> <figures/higgs_field/fig3.png, id=394, 361.3
+5pt x 285.065pt>
+File: figures/higgs_field/fig3.png Graphic file (type png)
+<use figures/higgs_field/fig3.png> [17] <figures/fig4.png, id=414, 320.8788pt x
+ 198.7425pt>
+File: figures/fig4.png Graphic file (type png)
+<use figures/fig4.png> [18 <compiles/dff0c37d892f346e58fc14975a16bf69/figures/h
+iggs_field/fig1.png (PNG copy)> <compiles/dff0c37d892f346e58fc14975a16bf69/figu
+res/higgs_field/fig2.png (PNG copy)> <compiles/dff0c37d892f346e58fc14975a16bf69
+/figures/higgs_field/fig3.png (PNG copy)> <compiles/dff0c37d892f346e58fc14975a1
+6bf69/figures/fig4.png>] <figures/attraction_and_repulsion.png, id=429, 769.876
+25pt x 473.77pt>
+File: figures/attraction_and_repulsion.png Graphic file (type png)
+<use figures/attraction_and_repulsion.png> <figures/scatterings/flower.png, id=
+431, 361.35pt x 363.3575pt>
+File: figures/scatterings/flower.png Graphic file (type png)
+<use figures/scatterings/flower.png> <figures/scatterings/circle.png, id=432, 3
+61.35pt x 361.35pt>
+File: figures/scatterings/circle.png Graphic file (type png)
+<use figures/scatterings/circle.png> <figures/scatterings/right_angle.png, id=4
+33, 361.35pt x 363.3575pt>
+File: figures/scatterings/right_angle.png Graphic file (type png)
+<use figures/scatterings/right_angle.png> [19 <compiles/dff0c37d892f346e58fc149
+75a16bf69/figures/attraction_and_repulsion.png (PNG copy)>] [20 <compiles/dff0c
+37d892f346e58fc14975a16bf69/figures/scatterings/flower.png (PNG copy)> <compile
+s/dff0c37d892f346e58fc14975a16bf69/figures/scatterings/circle.png (PNG copy)> <
+compiles/dff0c37d892f346e58fc14975a16bf69/figures/scatterings/right_angle.png (
+PNG copy)>] <figures/angular_momentum_exchange_rho.png, id=456, 361.35pt x 232.
+87pt>
+File: figures/angular_momentum_exchange_rho.png Graphic file (type png)
+<use figures/angular_momentum_exchange_rho.png> <figures/angular_momentum_excha
+nge_L.png, id=457, 361.35pt x 210.7875pt>
+File: figures/angular_momentum_exchange_L.png Graphic file (type png)
+<use figures/angular_momentum_exchange_L.png>) (compiles/dff0c37d892f346e58fc14
+975a16bf69/output.bbl [21 <compiles/dff0c37d892f346e58fc14975a16bf69/figures/an
+gular_momentum_exchange_rho.png (PNG copy)> <compiles/dff0c37d892f346e58fc14975
+a16bf69/figures/angular_momentum_exchange_L.png (PNG copy)>]) (compiles/dff0c37
+d892f346e58fc14975a16bf69/sections/appendices.tex
+! Undefined control sequence.
+l.29 \T
+        \left( Z_{ri} Z_{si} \right) = \tfrac{1}{2} \partial^2 \Tr \left( C_...
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: \begin{equation} on input line 28 ended by \end{equaion}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type  H <return>  for immediate help.
+ ...                                              
+                                                  
+l.30 \end{equaion}
+                  
+Your command was ignored.
+Type  I <command> <return>  to replace it with another command,
+or  <return>  to continue without it.
+
+! Missing $ inserted.
+<inserted text> 
+                $
+l.30 \end{equaion}
+                  
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+! Display math should end with $$.
+<to be read again> 
+                   \endgroup 
+l.30 \end{equaion}
+                  
+The `$' that I just saw supposedly matches a previous `$$'.
+So I shall assume that you typed `$$' both times.
+
+! Extra }, or forgotten \right.
+<template> }
+            $}\ifmeasuring@ \savefieldlength@ \fi \set@field \hfil \endtempl...
+l.46 \end{align}
+                
+I've deleted a group-closing symbol because it seems to be
+spurious, as in `$x}$'. But perhaps the } is legitimate and
+you forgot something else, as in `\hbox{$x}'. In such cases
+the way to recover is to insert both the forgotten and the
+deleted material, e.g., by typing `I$}'.
+
+! Missing \right. inserted.
+<inserted text> 
+                \right .
+l.46 \end{align}
+                
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+! Missing } inserted.
+<inserted text> 
+                }
+l.46 \end{align}
+                
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+! Extra }, or forgotten \right.
+<template> }
+            $}\ifmeasuring@ \savefieldlength@ \fi \set@field \hfil \endtempl...
+l.46 \end{align}
+                
+I've deleted a group-closing symbol because it seems to be
+spurious, as in `$x}$'. But perhaps the } is legitimate and
+you forgot something else, as in `\hbox{$x}'. In such cases
+the way to recover is to insert both the forgotten and the
+deleted material, e.g., by typing `I$}'.
+
+! Missing \right. inserted.
+<inserted text> 
+                \right .
+l.46 \end{align}
+                
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+! Missing } inserted.
+<inserted text> 
+                }
+l.46 \end{align}
+                
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+[22] [23] [24] [25] [26] [27] [28] [29] [30])
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 51.
+[31]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 51.
+(compiles/dff0c37d892f346e58fc14975a16bf69/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 51.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: 47077DD58F3BF93130F2EA39E2DC1E25;1709.
+ ) 
+Here is how much of TeX's memory you used:
+ 7454 strings out of 493773
+ 116048 string characters out of 3145367
+ 210341 words of memory out of 3000000
+ 10213 multiletter control sequences out of 15000+200000
+ 13189 words of font info for 51 fonts, out of 3000000 for 9000
+ 714 hyphenation exceptions out of 8191
+ 44i,20n,45p,1356b,436s stack positions out of 5000i,500n,10000p,200000b,50000s
+</usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb
+></usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb>
+</usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb><
+/usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></
+usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></us
+r/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/
+local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/lo
+cal/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/loca
+l/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/local/t
+exlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/local/texl
+ive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive
+/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/20
+09/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/200
+9/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/local/texlive/2009/
+texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/local/texlive/2009/te
+xmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/local/texlive/2009/tex
+mf-dist/fonts/type1/public/amsfonts/cm/cmtt9.pfb></usr/local/texlive/2009/texmf
+-dist/fonts/type1/public/amsfonts/euler/eufm10.pfb></usr/local/texlive/2009/tex
+mf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb>
+Output written on compiles/dff0c37d892f346e58fc14975a16bf69/output.pdf (31 page
+s, 650810 bytes).
+PDF statistics:
+ 801 PDF objects out of 1000 (max. 8388607)
+ 360 named destinations out of 1000 (max. 500000)
+ 253 words of extra memory for PDF output out of 10000 (max. 10000000)
+

+ 375 - 0
services/web/test/frontend/helpers/fixtures/logs/file-line-error.log

@@ -0,0 +1,375 @@
+This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex 2020.9.10)  2 SEP 2021 10:57
+entering extended mode
+ \write18 enabled.
+ file:line:error style messages enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2020-02-02> patch level 5
+L3 programming layer <2020-07-17> (/usr/local/texlive/2020/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
+(/usr/local/texlive/2020/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
+)
+\c@part=\count168
+\c@section=\count169
+\c@subsection=\count170
+\c@subsubsection=\count171
+\c@paragraph=\count172
+\c@subparagraph=\count173
+\c@figure=\count174
+\c@table=\count175
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen134
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/babel/babel.sty
+Package: babel 2020/07/13 3.47 The Babel package
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel/babel.def
+File: babel.def 2020/07/13 3.47 Babel common definitions
+\babel@savecnt=\count176
+\U@D=\dimen135
+\l@babelnohyphens=\language86
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel/txtbabel.def)
+\bbl@readstream=\read2
+)
+\bbl@dirlevel=\count177
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel-english/english.ldf
+Language: english 2017/06/06 v3.3r English support from the babel system
+Package babel Info: \l@canadian = using hyphenrules for english
+(babel)             (\language0) on input line 102.
+Package babel Info: \l@australian = using hyphenrules for ukenglish
+(babel)             (\language21) on input line 105.
+Package babel Info: \l@newzealand = using hyphenrules for ukenglish
+(babel)             (\language21) on input line 108.
+)) (/usr/local/texlive/2020/texmf-dist/tex/latex/geometry/geometry.sty
+Package: geometry 2020/01/02 v5.9 Page Geometry
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/iftex/ifvtex.sty
+Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
+(/usr/local/texlive/2020/texmf-dist/tex/generic/iftex/iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+))
+\Gm@cnth=\count178
+\Gm@cntv=\count179
+\c@Gm@tempcnt=\count180
+\Gm@bindingoffset=\dimen136
+\Gm@wd@mp=\dimen137
+\Gm@odd@mp=\dimen138
+\Gm@even@mp=\dimen139
+\Gm@layoutwidth=\dimen140
+\Gm@layoutheight=\dimen141
+\Gm@layouthoffset=\dimen142
+\Gm@layoutvoffset=\dimen143
+\Gm@dimlist=\toks16
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2020/01/20 v2.17e AMS math features
+\@mathmargin=\skip49
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+(/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks17
+\ex@=\dimen144
+)) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen145
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count181
+LaTeX Info: Redefining \frac on input line 227.
+\uproot@=\count182
+\leftroot@=\count183
+LaTeX Info: Redefining \overline on input line 389.
+\classnum@=\count184
+\DOTSCASE@=\count185
+LaTeX Info: Redefining \ldots on input line 486.
+LaTeX Info: Redefining \dots on input line 489.
+LaTeX Info: Redefining \cdots on input line 610.
+\Mathstrutbox@=\box45
+\strutbox@=\box46
+\big@size=\dimen146
+LaTeX Font Info:    Redeclaring font encoding OML on input line 733.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 734.
+\macc@depth=\count186
+\c@MaxMatrixCols=\count187
+\dotsspace@=\muskip16
+\c@parentequation=\count188
+\dspbrk@lvl=\count189
+\tag@help=\toks18
+\row@=\count190
+\column@=\count191
+\maxfields@=\count192
+\andhelp@=\toks19
+\eqnshift@=\dimen147
+\alignsep@=\dimen148
+\tagshift@=\dimen149
+\tagwidth@=\dimen150
+\totwidth@=\dimen151
+\lineht@=\dimen152
+\@envbody=\toks20
+\multlinegap=\skip50
+\multlinetaggap=\skip51
+\mathdisplay@stack=\toks21
+LaTeX Info: Redefining \[ on input line 2859.
+LaTeX Info: Redefining \] on input line 2860.
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: pdftex.def on input line 105.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-def/pdftex.def
+File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
+))
+\Gin@req@height=\dimen153
+\Gin@req@width=\dimen154
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2020-05-15 v7.00e Hypertext links for LaTeX
+(/usr/local/texlive/2020/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
+Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
+Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/infwarerr/infwarerr.sty
+Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
+)
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
+Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
+Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/pdfescape/pdfescape.sty
+Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/hycolor/hycolor.sty
+Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
+Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/auxhook/auxhook.sty
+Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/kvoptions/kvoptions.sty
+Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO)
+)
+\@linkdim=\dimen155
+\Hy@linkcounter=\count193
+\Hy@pagecounter=\count194
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2020-05-15 v7.00e Hyperref: PDFDocEncoding definition (HO)
+Now handling font encoding PD1 ...
+... no UTF-8 mapping file for font encoding PD1
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/intcalc/intcalc.sty
+Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/etexcmds/etexcmds.sty
+Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
+)
+\Hy@SavedSpaceFactor=\count195
+Package hyperref Info: Option `colorlinks' set `true' on input line 4338.
+Package hyperref Info: Hyper figures OFF on input line 4464.
+Package hyperref Info: Link nesting OFF on input line 4469.
+Package hyperref Info: Hyper index ON on input line 4472.
+Package hyperref Info: Plain pages OFF on input line 4479.
+Package hyperref Info: Backreferencing OFF on input line 4484.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4717.
+\c@Hy@tempcnt=\count196
+(/usr/local/texlive/2020/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip17
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 5076.
+\XeTeXLinkMargin=\dimen156
+(/usr/local/texlive/2020/texmf-dist/tex/generic/bitset/bitset.sty
+Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
+Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
+))
+\Fld@menulength=\count197
+\Field@Width=\dimen157
+\Fld@charsize=\dimen158
+Package hyperref Info: Hyper figures OFF on input line 6347.
+Package hyperref Info: Link nesting OFF on input line 6352.
+Package hyperref Info: Hyper index ON on input line 6355.
+Package hyperref Info: backreferencing OFF on input line 6362.
+Package hyperref Info: Link coloring ON on input line 6365.
+Package hyperref Info: Link coloring with OCG OFF on input line 6372.
+Package hyperref Info: PDF/A mode OFF on input line 6377.
+LaTeX Info: Redefining \ref on input line 6417.
+LaTeX Info: Redefining \pageref on input line 6421.
+(/usr/local/texlive/2020/texmf-dist/tex/generic/atbegshi/atbegshi.sty
+Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO)
+)
+\Hy@abspage=\count198
+\c@Item=\count199
+\c@Hfootnote=\count266
+)
+Package hyperref Info: Driver (autodetected): hpdftex.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2020-05-15 v7.00e Hyperref driver for pdfTeX
+(/usr/local/texlive/2020/texmf-dist/tex/latex/atveryend/atveryend.sty
+Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO)
+Package atveryend Info: \enddocument detected (standard20110627).
+)
+\Fld@listcount=\count267
+\c@bookmark@seq@number=\count268
+(/usr/local/texlive/2020/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
+Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
+Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 286.
+)
+\Hy@SectionHShift=\skip52
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
+File: l3backend-pdfmode.def 2020-06-29 L3 backend support: PDF mode
+\l__kernel_color_stack_int=\count269
+\l__pdf_internal_box=\box47
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+*geometry* driver: auto-detecting
+*geometry* detected driver: pdftex
+*geometry* verbose mode - [ preamble ] result:
+* driver: pdftex
+* paper: letterpaper
+* layout: <same size as paper>
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes: 
+* h-part:(L,W,R)=(85.35826pt, 443.57848pt, 85.35826pt)
+* v-part:(T,H,B)=(56.9055pt, 681.15898pt, 56.9055pt)
+* \paperwidth=614.295pt
+* \paperheight=794.96999pt
+* \textwidth=443.57848pt
+* \textheight=681.15898pt
+* \oddsidemargin=13.08827pt
+* \evensidemargin=13.08827pt
+* \topmargin=-52.36449pt
+* \headheight=12.0pt
+* \headsep=25.0pt
+* \topskip=10.0pt
+* \footskip=30.0pt
+* \marginparwidth=49.79231pt
+* \marginparsep=11.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+(/usr/local/texlive/2020/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count270
+\scratchdimen=\dimen159
+\scratchbox=\box48
+\nofMPsegments=\count271
+\nofMParguments=\count272
+\everyMPshowfont=\toks22
+\MPscratchCnt=\count273
+\MPscratchDim=\dimen160
+\MPnumerator=\count274
+\makeMPintoPDFobject=\count275
+\everyMPtoPDFconversion=\toks23
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
+Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
+Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
+File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
+))
+\AtBeginShipoutBox=\box49
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/color.sty
+Package: color 2019/11/23 v1.2a Standard LaTeX Color (DPC)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-cfg/color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package color Info: Driver file: pdftex.def on input line 147.
+)
+Package hyperref Info: Link coloring ON on input line 19.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
+(/usr/local/texlive/2020/texmf-dist/tex/latex/refcount/refcount.sty
+Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
+Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
+)
+\c@section@level=\count276
+)
+LaTeX Info: Redefining \ref on input line 19.
+LaTeX Info: Redefining \pageref on input line 19.
+LaTeX Info: Redefining \nameref on input line 19.
+(/compile/output.out) (/compile/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+(/compile/a folder with spaces/a subfolder with spaces/a subsubfolder with spaces/another file with spaces.tex
+/compile/a folder with spaces/a subfolder with spaces/a subsubfolder with spaces/another file with spaces.tex:1: Undefined control sequence.
+l.1 \anotherbadcommand
+                      {}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+)
+<frog.jpg, id=56, 748.7975pt x 741.77126pt>
+File: frog.jpg Graphic file (type jpg)
+<use frog.jpg>
+Package pdftex.def Info: frog.jpg  used on input line 49.
+(pdftex.def)             Requested size: 133.07489pt x 131.8266pt.
+[1
+
+{/usr/local/texlive/2020/texmf-var/fonts/map/pdftex/updmap/pdftex.map} </compile/frog.jpg>] [2] (/compile/output.bbl)
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 122.
+[3]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 122.
+(/compile/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 122.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 122.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: 232689D72843F283B3EE1BBB7D69ECDC;910.
+Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 122.
+ ) 
+Here is how much of TeX's memory you used:
+ 7045 strings out of 480906
+ 106112 string characters out of 5908280
+ 398548 words of memory out of 5000000
+ 22494 multiletter control sequences out of 15000+600000
+ 541619 words of font info for 52 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 43i,8n,37p,464b,360s stack positions out of 5000i,500n,10000p,200000b,80000s
+{/usr/local/texlive/2020/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx9.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb>
+Output written on /compile/output.pdf (3 pages, 246983 bytes).
+PDF statistics:
+ 153 PDF objects out of 1000 (max. 8388607)
+ 131 compressed objects within 2 object streams
+ 22 named destinations out of 1000 (max. 500000)
+ 102 words of extra memory for PDF output out of 10000 (max. 10000000)
+

+ 391 - 0
services/web/test/frontend/helpers/fixtures/logs/filenames.log

@@ -0,0 +1,391 @@
+This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex 2020.9.10)  1 SEP 2021 10:52
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2020-02-02> patch level 5
+L3 programming layer <2020-07-17> (/usr/local/texlive/2020/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
+(/usr/local/texlive/2020/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
+)
+\c@part=\count168
+\c@section=\count169
+\c@subsection=\count170
+\c@subsubsection=\count171
+\c@paragraph=\count172
+\c@subparagraph=\count173
+\c@figure=\count174
+\c@table=\count175
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen134
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/babel/babel.sty
+Package: babel 2020/07/13 3.47 The Babel package
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel/babel.def
+File: babel.def 2020/07/13 3.47 Babel common definitions
+\babel@savecnt=\count176
+\U@D=\dimen135
+\l@babelnohyphens=\language86
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel/txtbabel.def)
+\bbl@readstream=\read2
+)
+\bbl@dirlevel=\count177
+(/usr/local/texlive/2020/texmf-dist/tex/generic/babel-english/english.ldf
+Language: english 2017/06/06 v3.3r English support from the babel system
+Package babel Info: \l@canadian = using hyphenrules for english
+(babel)             (\language0) on input line 102.
+Package babel Info: \l@australian = using hyphenrules for ukenglish
+(babel)             (\language21) on input line 105.
+Package babel Info: \l@newzealand = using hyphenrules for ukenglish
+(babel)             (\language21) on input line 108.
+)) (/usr/local/texlive/2020/texmf-dist/tex/latex/geometry/geometry.sty
+Package: geometry 2020/01/02 v5.9 Page Geometry
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/iftex/ifvtex.sty
+Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
+(/usr/local/texlive/2020/texmf-dist/tex/generic/iftex/iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+))
+\Gm@cnth=\count178
+\Gm@cntv=\count179
+\c@Gm@tempcnt=\count180
+\Gm@bindingoffset=\dimen136
+\Gm@wd@mp=\dimen137
+\Gm@odd@mp=\dimen138
+\Gm@even@mp=\dimen139
+\Gm@layoutwidth=\dimen140
+\Gm@layoutheight=\dimen141
+\Gm@layouthoffset=\dimen142
+\Gm@layoutvoffset=\dimen143
+\Gm@dimlist=\toks16
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2020/01/20 v2.17e AMS math features
+\@mathmargin=\skip49
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+(/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks17
+\ex@=\dimen144
+)) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen145
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count181
+LaTeX Info: Redefining \frac on input line 227.
+\uproot@=\count182
+\leftroot@=\count183
+LaTeX Info: Redefining \overline on input line 389.
+\classnum@=\count184
+\DOTSCASE@=\count185
+LaTeX Info: Redefining \ldots on input line 486.
+LaTeX Info: Redefining \dots on input line 489.
+LaTeX Info: Redefining \cdots on input line 610.
+\Mathstrutbox@=\box45
+\strutbox@=\box46
+\big@size=\dimen146
+LaTeX Font Info:    Redeclaring font encoding OML on input line 733.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 734.
+\macc@depth=\count186
+\c@MaxMatrixCols=\count187
+\dotsspace@=\muskip16
+\c@parentequation=\count188
+\dspbrk@lvl=\count189
+\tag@help=\toks18
+\row@=\count190
+\column@=\count191
+\maxfields@=\count192
+\andhelp@=\toks19
+\eqnshift@=\dimen147
+\alignsep@=\dimen148
+\tagshift@=\dimen149
+\tagwidth@=\dimen150
+\totwidth@=\dimen151
+\lineht@=\dimen152
+\@envbody=\toks20
+\multlinegap=\skip50
+\multlinetaggap=\skip51
+\mathdisplay@stack=\toks21
+LaTeX Info: Redefining \[ on input line 2859.
+LaTeX Info: Redefining \] on input line 2860.
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: pdftex.def on input line 105.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-def/pdftex.def
+File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
+))
+\Gin@req@height=\dimen153
+\Gin@req@width=\dimen154
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2020-05-15 v7.00e Hypertext links for LaTeX
+(/usr/local/texlive/2020/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
+Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
+Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/infwarerr/infwarerr.sty
+Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
+)
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
+Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
+Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/pdfescape/pdfescape.sty
+Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/hycolor/hycolor.sty
+Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
+Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/auxhook/auxhook.sty
+Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/kvoptions/kvoptions.sty
+Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO)
+)
+\@linkdim=\dimen155
+\Hy@linkcounter=\count193
+\Hy@pagecounter=\count194
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2020-05-15 v7.00e Hyperref: PDFDocEncoding definition (HO)
+Now handling font encoding PD1 ...
+... no UTF-8 mapping file for font encoding PD1
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/intcalc/intcalc.sty
+Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/etexcmds/etexcmds.sty
+Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
+)
+\Hy@SavedSpaceFactor=\count195
+Package hyperref Info: Option `colorlinks' set `true' on input line 4338.
+Package hyperref Info: Hyper figures OFF on input line 4464.
+Package hyperref Info: Link nesting OFF on input line 4469.
+Package hyperref Info: Hyper index ON on input line 4472.
+Package hyperref Info: Plain pages OFF on input line 4479.
+Package hyperref Info: Backreferencing OFF on input line 4484.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4717.
+\c@Hy@tempcnt=\count196
+(/usr/local/texlive/2020/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip17
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 5076.
+\XeTeXLinkMargin=\dimen156
+(/usr/local/texlive/2020/texmf-dist/tex/generic/bitset/bitset.sty
+Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
+Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
+))
+\Fld@menulength=\count197
+\Field@Width=\dimen157
+\Fld@charsize=\dimen158
+Package hyperref Info: Hyper figures OFF on input line 6347.
+Package hyperref Info: Link nesting OFF on input line 6352.
+Package hyperref Info: Hyper index ON on input line 6355.
+Package hyperref Info: backreferencing OFF on input line 6362.
+Package hyperref Info: Link coloring ON on input line 6365.
+Package hyperref Info: Link coloring with OCG OFF on input line 6372.
+Package hyperref Info: PDF/A mode OFF on input line 6377.
+LaTeX Info: Redefining \ref on input line 6417.
+LaTeX Info: Redefining \pageref on input line 6421.
+(/usr/local/texlive/2020/texmf-dist/tex/generic/atbegshi/atbegshi.sty
+Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO)
+)
+\Hy@abspage=\count198
+\c@Item=\count199
+\c@Hfootnote=\count266
+)
+Package hyperref Info: Driver (autodetected): hpdftex.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2020-05-15 v7.00e Hyperref driver for pdfTeX
+(/usr/local/texlive/2020/texmf-dist/tex/latex/atveryend/atveryend.sty
+Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO)
+Package atveryend Info: \enddocument detected (standard20110627).
+)
+\Fld@listcount=\count267
+\c@bookmark@seq@number=\count268
+(/usr/local/texlive/2020/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
+Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
+(/usr/local/texlive/2020/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
+Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 286.
+)
+\Hy@SectionHShift=\skip52
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
+File: l3backend-pdfmode.def 2020-06-29 L3 backend support: PDF mode
+\l__kernel_color_stack_int=\count269
+\l__pdf_internal_box=\box47
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 19.
+LaTeX Font Info:    ... okay on input line 19.
+*geometry* driver: auto-detecting
+*geometry* detected driver: pdftex
+*geometry* verbose mode - [ preamble ] result:
+* driver: pdftex
+* paper: letterpaper
+* layout: <same size as paper>
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes: 
+* h-part:(L,W,R)=(85.35826pt, 443.57848pt, 85.35826pt)
+* v-part:(T,H,B)=(56.9055pt, 681.15898pt, 56.9055pt)
+* \paperwidth=614.295pt
+* \paperheight=794.96999pt
+* \textwidth=443.57848pt
+* \textheight=681.15898pt
+* \oddsidemargin=13.08827pt
+* \evensidemargin=13.08827pt
+* \topmargin=-52.36449pt
+* \headheight=12.0pt
+* \headsep=25.0pt
+* \topskip=10.0pt
+* \footskip=30.0pt
+* \marginparwidth=49.79231pt
+* \marginparsep=11.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+(/usr/local/texlive/2020/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count270
+\scratchdimen=\dimen159
+\scratchbox=\box48
+\nofMPsegments=\count271
+\nofMParguments=\count272
+\everyMPshowfont=\toks22
+\MPscratchCnt=\count273
+\MPscratchDim=\dimen160
+\MPnumerator=\count274
+\makeMPintoPDFobject=\count275
+\everyMPtoPDFconversion=\toks23
+) (/usr/local/texlive/2020/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
+Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
+Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
+File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
+))
+\AtBeginShipoutBox=\box49
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics/color.sty
+Package: color 2019/11/23 v1.2a Standard LaTeX Color (DPC)
+(/usr/local/texlive/2020/texmf-dist/tex/latex/graphics-cfg/color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package color Info: Driver file: pdftex.def on input line 147.
+)
+Package hyperref Info: Link coloring ON on input line 19.
+(/usr/local/texlive/2020/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section
+(/usr/local/texlive/2020/texmf-dist/tex/latex/refcount/refcount.sty
+Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
+) (/usr/local/texlive/2020/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
+Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
+)
+\c@section@level=\count276
+)
+
+%%%% these are artificial test cases
+(/compile/main [1] [2] [3]
+
+LaTeX Warning: Citation `Peeters:2001np' on page 13 undefined on input line 9.
+
+[]
+
+(/compile/main.tex (/compile/otherfile
+
+Overfull \hbox (4.56pt too wide) in paragraph at lines 123--456
+
+[]
+
+%%%% end of artificial test cases
+
+LaTeX Info: Redefining \ref on input line 19.
+LaTeX Info: Redefining \pageref on input line 19.
+LaTeX Info: Redefining \nameref on input line 19.
+(/compile/output.out) (/compile/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+(/compile/a folder with spaces/a subfolder with spaces/a subsubfolder with spaces/another file with spaces.tex
+! Undefined control sequence.
+l.1 \anotherbadcommand
+                      {}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+)
+<frog.jpg, id=56, 748.7975pt x 741.77126pt>
+File: frog.jpg Graphic file (type jpg)
+<use frog.jpg>
+Package pdftex.def Info: frog.jpg  used on input line 49.
+(pdftex.def)             Requested size: 133.07489pt x 131.8266pt.
+[1
+
+{/usr/local/texlive/2020/texmf-var/fonts/map/pdftex/updmap/pdftex.map} </compile/frog.jpg>] [2] (/compile/output.bbl)
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 122.
+[3]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 122.
+(/compile/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 122.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 122.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: 232689D72843F283B3EE1BBB7D69ECDC;910.
+Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 122.
+ ) 
+Here is how much of TeX's memory you used:
+ 7045 strings out of 480906
+ 106112 string characters out of 5908280
+ 398548 words of memory out of 5000000
+ 22494 multiletter control sequences out of 15000+600000
+ 541619 words of font info for 52 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 43i,8n,37p,464b,360s stack positions out of 5000i,500n,10000p,200000b,80000s
+{/usr/local/texlive/2020/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx9.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmr9.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/local/texli
+ve/2020/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/local/texlive/2020/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb>
+Output written on /compile/output.pdf (3 pages, 246983 bytes).
+PDF statistics:
+ 153 PDF objects out of 1000 (max. 8388607)
+ 131 compressed objects within 2 object streams
+ 22 named destinations out of 1000 (max. 500000)
+ 102 words of extra memory for PDF output out of 10000 (max. 10000000)
+

+ 275 - 0
services/web/test/frontend/helpers/fixtures/logs/geometry-warnings.log

@@ -0,0 +1,275 @@
+This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2015.3.24)  28 OCT 2015 00:28
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2014/05/01>
+Babel <3.9l> and hyphenation patterns for 79 languages loaded.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/geometry/geometry.sty
+Package: geometry 2010/09/12 v5.6 Page Geometry
+(/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks14
+) (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in PDF mode is detected.
+) (/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifvtex.sty
+Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO)
+Package ifvtex Info: VTeX not detected.
+) (/usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
+)
+\Gm@cnth=\count87
+\Gm@cntv=\count88
+\c@Gm@tempcnt=\count89
+\Gm@bindingoffset=\dimen103
+\Gm@wd@mp=\dimen104
+\Gm@odd@mp=\dimen105
+\Gm@even@mp=\dimen106
+\Gm@layoutwidth=\dimen107
+\Gm@layoutheight=\dimen108
+\Gm@layouthoffset=\dimen109
+\Gm@layoutvoffset=\dimen110
+\Gm@dimlist=\toks15
+)
+
+Package geometry Warning: Over-specification in `h'-direction.
+    `width' (597.50787pt) is ignored.
+
+
+Package geometry Warning: Over-specification in `v'-direction.
+    `height' (845.04684pt) is ignored.
+
+(/usr/local/texlive/2014/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2013/05/02 v3.3-89 Customizing captions (AR)
+(/usr/local/texlive/2014/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2013/05/02 v1.6-88 caption3 kernel (AR)
+Package caption3 Info: TeX engine: e-TeX on input line 57.
+\captionmargin=\dimen111
+\captionmargin@=\dimen112
+\captionwidth=\dimen113
+\caption@tempdima=\dimen114
+\caption@indent=\dimen115
+\caption@parindent=\dimen116
+\caption@hangindent=\dimen117
+)
+\c@ContinuedFloat=\count90
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/listing/listing.sty
+Package: listing 1999/05/25
+Package `listing', V1.2, <1999/05/25>
+\c@listing=\count91
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
+Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO)
+
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
+Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO)
+Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO)
+Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
+Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+Package hobsub Info: Skipping package `ifvtex' (already loaded).
+Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO)
+Package hobsub Info: Skipping package `ifpdf' (already loaded).
+Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
+Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
+Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO)
+Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO
+)
+Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO)
+Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO)
+)
+Package hobsub Info: Skipping package `hobsub' (already loaded).
+Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
+Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO)
+Package: xcolor-patch 2011/01/30 xcolor patch
+Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO)
+Package atveryend Info: \enddocument detected (standard20110627).
+Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO)
+Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO)
+Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty
+Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO)
+) (/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
+)
+\@linkdim=\dimen118
+\Hy@linkcounter=\count92
+\Hy@pagecounter=\count93
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO)
+)
+\Hy@SavedSpaceFactor=\count94
+(/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+)
+Package hyperref Info: Hyper figures OFF on input line 4443.
+Package hyperref Info: Link nesting OFF on input line 4448.
+Package hyperref Info: Hyper index ON on input line 4451.
+Package hyperref Info: Plain pages OFF on input line 4458.
+Package hyperref Info: Backreferencing OFF on input line 4463.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4688.
+\c@Hy@tempcnt=\count95
+(/usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 5041.
+\XeTeXLinkMargin=\dimen119
+\Fld@menulength=\count96
+\Field@Width=\dimen120
+\Fld@charsize=\dimen121
+Package hyperref Info: Hyper figures OFF on input line 6295.
+Package hyperref Info: Link nesting OFF on input line 6300.
+Package hyperref Info: Hyper index ON on input line 6303.
+Package hyperref Info: backreferencing OFF on input line 6310.
+Package hyperref Info: Link coloring OFF on input line 6315.
+Package hyperref Info: Link coloring with OCG OFF on input line 6320.
+Package hyperref Info: PDF/A mode OFF on input line 6325.
+LaTeX Info: Redefining \ref on input line 6365.
+LaTeX Info: Redefining \pageref on input line 6369.
+\Hy@abspage=\count97
+\c@Item=\count98
+\c@Hfootnote=\count99
+)
+
+Package hyperref Message: Driver (autodetected): hpdftex.
+
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX
+\Fld@listcount=\count100
+\c@bookmark@seq@number=\count101
+(/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
+Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
+82.
+)
+\Hy@SectionHShift=\skip43
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 34.
+LaTeX Font Info:    ... okay on input line 34.
+*geometry* driver: auto-detecting
+*geometry* detected driver: pdftex
+*geometry* verbose mode - [ preamble ] result:
+* driver: pdftex
+* paper: a4paper
+* layout: <same size as paper>
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes: 
+* h-part:(L,W,R)=(56.9055pt, 483.69687pt, 56.9055pt)
+* v-part:(T,H,B)=(56.9055pt, 731.23584pt, 56.9055pt)
+* \paperwidth=597.50787pt
+* \paperheight=845.04684pt
+* \textwidth=483.69687pt
+* \textheight=731.23584pt
+* \oddsidemargin=-15.36449pt
+* \evensidemargin=-15.36449pt
+* \topmargin=-52.36449pt
+* \headheight=12.0pt
+* \headsep=25.0pt
+* \topskip=10.0pt
+* \footskip=30.0pt
+* \marginparwidth=65.0pt
+* \marginparsep=11.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+Package caption Info: Begin \AtBeginDocument code.
+Package caption Info: hyperref package is loaded.
+Package caption Info: End \AtBeginDocument code.
+\AtBeginShipoutBox=\box26
+Package hyperref Info: Link coloring OFF on input line 34.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section
+(/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
+Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
+)
+\c@section@level=\count102
+)
+LaTeX Info: Redefining \ref on input line 34.
+LaTeX Info: Redefining \pageref on input line 34.
+LaTeX Info: Redefining \nameref on input line 34.
+(/compile/output.out) (/compile/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 59.
+[1
+
+{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 59.
+(/compile/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 59.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 59.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: D41D8CD98F00B204E9800998ECF8427E;0.
+Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 59.
+ ) 
+Here is how much of TeX's memory you used:
+ 5675 strings out of 493109
+ 88933 string characters out of 6135010
+ 171878 words of memory out of 5000000
+ 9151 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 36i,4n,38p,205b,317s stack positions out of 5000i,500n,10000p,200000b,80000s
+</usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
+Output written on /compile/output.pdf (1 page, 15639 bytes).
+PDF statistics:
+ 17 PDF objects out of 1000 (max. 8388607)
+ 12 compressed objects within 1 object stream
+ 2 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)

+ 72 - 0
services/web/test/frontend/helpers/fixtures/logs/natbib-warnings.log

@@ -0,0 +1,72 @@
+This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013) (format=pdflatex 2014.4.2)  30 MAY 2014 17:03
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**main.tex
+(/compile/main.tex
+LaTeX2e <2011/06/27>
+Babel <3.9k> and hyphenation patterns for 78 languages loaded.
+(/usr/local/texlive/2013/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2013/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2013/texmf-dist/tex/latex/natbib/natbib.sty
+Package: natbib 2010/09/13 8.31b (PWD, AO)
+\bibhang=\skip43
+\bibsep=\skip44
+LaTeX Info: Redefining \cite on input line 694.
+\c@NAT@ctr=\count87
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 4.
+LaTeX Font Info:    ... okay on input line 4.
+
+Package natbib Warning: Citation `blah' on page 1 undefined on input line 6.
+
+
+Package natbib Warning: There were undefined citations.
+
+[1
+
+{/usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (/compi
+le/output.aux) )
+Here is how much of TeX's memory you used:
+ 543 strings out of 493308
+ 6236 string characters out of 6137823
+ 56957 words of memory out of 5000000
+ 4080 multiletter control sequences out of 15000+600000
+ 3948 words of font info for 15 fonts, out of 8000000 for 9000
+ 957 hyphenation exceptions out of 8191
+ 23i,4n,22p,154b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
+</usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts
+/cm/cmbx10.pfb></usr/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/
+cm/cmr10.pfb>
+Output written on /compile/output.pdf (1 page, 17052 bytes).
+PDF statistics:
+ 16 PDF objects out of 1000 (max. 8388607)
+ 10 compressed objects within 1 object stream
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)

+ 74 - 0
services/web/test/frontend/helpers/fixtures/logs/runaway-arguments.log

@@ -0,0 +1,74 @@
+This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex 2014.11.3)  22 SEP 2016 13:28
+entering extended mode
+ \write18 enabled.
+ %&-line parsing enabled.
+**runaway_argument.tex
+(/compile/runaway_argument.tex
+LaTeX2e <2014/05/01>
+Babel <3.9l> and hyphenation patterns for 21 languages loaded.
+(/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/compile/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 8.
+LaTeX Font Info:    ... okay on input line 8.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <12> on input line 10.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <8> on input line 10.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <6> on input line 10.
+)
+Runaway argument?
+{Introduction \^^M\end {document} 
+! File ended while scanning use of \@xdblarg.
+<inserted text> 
+                \par 
+<*> runaway_argument.tex
+                        
+I suspect you have forgotten a `}', causing me
+to read past where you wanted me to stop.
+I'll try to recover; but if the error is serious,
+you'd better type `E' or `X' now and fix your file.
+
+! Emergency stop.
+<*> runaway_argument.tex
+                        
+*** (job aborted, no legal \end found)
+
+ 
+Here is how much of TeX's memory you used:
+ 221 strings out of 494521
+ 2433 string characters out of 6168058
+ 48172 words of memory out of 5000000
+ 3561 multiletter control sequences out of 15000+600000
+ 6675 words of font info for 24 fonts, out of 8000000 for 9000
+ 319 hyphenation exceptions out of 8191
+ 23i,6n,17p,124b,187s stack positions out of 5000i,500n,10000p,200000b,80000s
+!  ==> Fatal error occurred, no output PDF file produced!
+ 

+ 527 - 0
services/web/test/frontend/helpers/fixtures/logs/warnings.log

@@ -0,0 +1,527 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009) (format=pdflatex 2010.5.16)  1 MAY 2012 07:40
+entering extended mode
+ %&-line parsing enabled.
+**instantons.tex
+(compiles/d1585ce575dea4cab55f784a22a88652/instantons.tex
+LaTeX2e <2009/09/24>
+Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh
+yphenation, german-x-2009-06-19, ngerman-x-2009-06-19, ancientgreek, ibycus, ar
+abic, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danish, dutc
+h, esperanto, estonian, farsi, finnish, french, galician, german, ngerman, mono
+greek, greek, hungarian, icelandic, assamese, bengali, gujarati, hindi, kannada
+, malayalam, marathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, i
+rish, italian, kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, b
+okmal, nynorsk, polish, portuguese, romanian, russian, sanskrit, serbian, slova
+k, slovenian, spanish, swedish, turkish, turkmen, ukenglish, ukrainian, upperso
+rbian, welsh, loaded.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
+(/usr/local/texlive/2009/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/relsize/relsize.sty
+Package: relsize 2003/07/04 ver 3.1
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/preprint/fullpage.sty
+Package: fullpage 1999/02/23 1.1 (PWD)
+\FP@margin=\skip43
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2000/07/18 v2.13 AMS math features
+\@mathmargin=\skip44
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0
+\@emptytoks=\toks14
+\ex@=\dimen103
+)) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d
+\pmbraise@=\dimen104
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 1999/12/14 v2.01 operator names
+)
+\inf@bad=\count87
+LaTeX Info: Redefining \frac on input line 211.
+\uproot@=\count88
+\leftroot@=\count89
+LaTeX Info: Redefining \overline on input line 307.
+\classnum@=\count90
+\DOTSCASE@=\count91
+LaTeX Info: Redefining \ldots on input line 379.
+LaTeX Info: Redefining \dots on input line 382.
+LaTeX Info: Redefining \cdots on input line 467.
+\Mathstrutbox@=\box26
+\strutbox@=\box27
+\big@size=\dimen105
+LaTeX Font Info:    Redeclaring font encoding OML on input line 567.
+LaTeX Font Info:    Redeclaring font encoding OMS on input line 568.
+\macc@depth=\count92
+\c@MaxMatrixCols=\count93
+\dotsspace@=\muskip10
+\c@parentequation=\count94
+\dspbrk@lvl=\count95
+\tag@help=\toks15
+\row@=\count96
+\column@=\count97
+\maxfields@=\count98
+\andhelp@=\toks16
+\eqnshift@=\dimen106
+\alignsep@=\dimen107
+\tagshift@=\dimen108
+\tagwidth@=\dimen109
+\totwidth@=\dimen110
+\lineht@=\dimen111
+\@envbody=\toks17
+\multlinegap=\skip45
+\multlinetaggap=\skip46
+\mathdisplay@stack=\toks18
+LaTeX Info: Redefining \[ on input line 2666.
+LaTeX Info: Redefining \] on input line 2667.
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amscls/amsthm.sty
+Package: amsthm 2004/08/06 v2.20
+\thm@style=\toks19
+\thm@bodyfont=\toks20
+\thm@headfont=\toks21
+\thm@notefont=\toks22
+\thm@headpunct=\toks23
+\thm@preskip=\skip47
+\thm@postskip=\skip48
+\thm@headsep=\skip49
+\dth@everypar=\toks24
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/amsfonts.sty
+Package: amsfonts 2009/06/22 v3.00 Basic AMSFonts support
+\symAMSa=\mathgroup4
+\symAMSb=\mathgroup5
+LaTeX Font Info:    Overwriting math alphabet `\mathfrak' in version `bold'
+(Font)                  U/euf/m/n --> U/euf/b/n on input line 96.
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2010/05/04 v6.81a Hypertext links for LaTeX
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+Package: ltxcmds 2010/04/26 v1.7 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks25
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2010/03/01 v1.9 Key value parser (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2010/04/08 v1.3 Providing info/warning/message (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2010/01/28 v1.3 Prefix for e-TeX command names (HO)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
+(etexcmds)             that some package has redefined \expanded.
+(etexcmds)             In the latter case, load this package earlier.
+)) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/pdfescape.sty
+Package: pdfescape 2010/03/01 v1.9 Provides hex, PDF name and string conversion
+s (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+Package: pdftexcmds 2010/04/01 v0.9 Utility functions of pdfTeX for LuaTeX (HO)
+
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+)) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2010/01/28 v2.1 Provides the ifpdf switch (HO)
+Package ifpdf Info: pdfTeX in pdf mode detected.
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/ifvtex.sty
+Package: ifvtex 2010/03/01 v1.5 Switches for detecting VTeX and its modes (HO)
+Package ifvtex Info: VTeX not detected.
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/ifxetex/ifxetex.sty
+Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/hycolor.sty
+Package: hycolor 2009/12/12 v1.6 Color options of hyperref/bookmark (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/xcolor-patch.sty
+Package: xcolor-patch 2009/12/12 xcolor patch
+)) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/letltxmacro.sty
+Package: letltxmacro 2008/06/24 v1.3 Let assignment for LaTeX macros (HO)
+)
+\@linkdim=\dimen112
+\Hy@linkcounter=\count99
+\Hy@pagecounter=\count100
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2010/05/04 v6.81a Hyperref: PDFDocEncoding definition (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/intcalc.sty
+Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/latexconfig/hyperref.cfg
+File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2010/02/22 v3.7 Keyval support for LaTeX options (HO)
+)
+Package hyperref Info: Hyper figures OFF on input line 3639.
+Package hyperref Info: Link nesting OFF on input line 3644.
+Package hyperref Info: Hyper index ON on input line 3647.
+Package hyperref Info: Plain pages OFF on input line 3654.
+Package hyperref Info: Backreferencing OFF on input line 3659.
+Implicit mode ON; LaTeX internals redefined
+Package hyperref Info: Bookmarks ON on input line 3855.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip11
+Package: url 2006/04/12  ver 3.3  Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 4140.
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/bitset.sty
+Package: bitset 2007/09/28 v1.0 Data type bit set (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/bigintcalc.sty
+Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO)
+))
+\Fld@menulength=\count101
+\Field@Width=\dimen113
+\Fld@charsize=\dimen114
+\Field@toks=\toks26
+Package hyperref Info: Hyper figures OFF on input line 5118.
+Package hyperref Info: Link nesting OFF on input line 5123.
+Package hyperref Info: Hyper index ON on input line 5126.
+Package hyperref Info: backreferencing OFF on input line 5133.
+Package hyperref Info: Link coloring OFF on input line 5138.
+Package hyperref Info: Link coloring with OCG OFF on input line 5143.
+Package hyperref Info: PDF/A mode OFF on input line 5148.
+LaTeX Info: Redefining \ref on input line 5188.
+LaTeX Info: Redefining \pageref on input line 5192.
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/atbegshi.sty
+Package: atbegshi 2010/03/25 v1.12 At begin shipout hook (HO)
+)
+\Hy@abspage=\count102
+\c@Item=\count103
+\c@Hfootnote=\count104
+)
+* hyperref using default driver hpdftex *
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/hpdftex.def
+File: hpdftex.def 2010/05/04 v6.81a Hyperref driver for pdfTeX
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/atveryend.sty
+Package: atveryend 2010/03/24 v1.5 Hooks at very end of document (HO)
+Package atveryend Info: \enddocument detected (standard).
+)
+\Fld@listcount=\count105
+\c@bookmark@seq@number=\count106
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
+Package: rerunfilecheck 2010/03/16 v1.6 Rerun checks for auxiliary files (HO)
+(/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/uniquecounter.sty
+Package: uniquecounter 2009/12/18 v1.1 Provides unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
+71.
+)
+\Hy@SectionHShift=\skip50
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/subfig/subfig.sty
+Package: subfig 2005/06/28 ver: 1.3 subfig package
+(/usr/local/texlive/2009/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2010/01/09 v3.1m Customizing captions (AR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2010/01/14 v3.1m caption3 kernel (AR)
+\captionmargin=\dimen115
+\captionmargin@=\dimen116
+\captionwidth=\dimen117
+\caption@indent=\dimen118
+\caption@parindent=\dimen119
+\caption@hangindent=\dimen120
+)
+\c@ContinuedFloat=\count107
+Package caption Info: hyperref package is loaded.
+)
+\c@KVtest=\count108
+\sf@farskip=\skip51
+\sf@captopadj=\dimen121
+\sf@capskip=\skip52
+\sf@nearskip=\skip53
+\c@subfigure=\count109
+\c@subfigure@save=\count110
+\c@lofdepth=\count111
+\c@subtable=\count112
+\c@subtable@save=\count113
+\c@lotdepth=\count114
+\sf@top=\skip54
+\sf@bottom=\skip55
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/latexconfig/graphics.cfg
+File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live
+)
+Package graphics Info: Driver file: pdftex.def on input line 91.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/pdftex-def/pdftex.def
+File: pdftex.def 2010/02/14 v0.04n Graphics/color for pdfTeX
+\Gread@gobject=\count115
+))
+\Gin@req@height=\dimen122
+\Gin@req@width=\dimen123
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/showlabels/showlabels.sty
+Package: showlabels 2009/05/29 v1.6.5
+Package: `showlabels' v1.6.5 <2009/05/29>
+with amsmath equation tags
+\SL@labelposition=\count116
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/mh/mathtools.sty
+Package: mathtools 2008/08/01 v1.06 mathematical typesetting tools (MH)
+(/usr/local/texlive/2009/texmf-dist/tex/latex/tools/calc.sty
+Package: calc 2007/08/22 v4.3 Infix arithmetic (KKT,FJ)
+\calc@Acount=\count117
+\calc@Bcount=\count118
+\calc@Adimen=\dimen124
+\calc@Bdimen=\dimen125
+\calc@Askip=\skip56
+\calc@Bskip=\skip57
+LaTeX Info: Redefining \setlength on input line 76.
+LaTeX Info: Redefining \addtolength on input line 77.
+\calc@Ccount=\count119
+\calc@Cskip=\skip58
+) (/usr/local/texlive/2009/texmf-dist/tex/latex/mh/mhsetup.sty
+Package: mhsetup 2010/01/21 v1.2a programming setup (MH)
+)
+\g_MT_multlinerow_int=\count120
+\l_MT_multwidth_dim=\dimen126
+)
+\c@claim=\count121
+(compiles/d1585ce575dea4cab55f784a22a88652/output.aux)
+\openout1 = `output.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 30.
+LaTeX Font Info:    ... okay on input line 30.
+\AtBeginShipoutBox=\box28
+Package hyperref Info: Link coloring OFF on input line 30.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2010/04/30 v2.40 Cross-referencing by name of section
+(/usr/local/texlive/2009/texmf-dist/tex/latex/oberdiek/refcount.sty
+Package: refcount 2008/08/11 v3.1 Data extraction from references (HO)
+) (/usr/local/texlive/2009/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
+Package: gettitlestring 2009/12/18 v1.3 Cleanup title references (HO)
+)
+\c@section@level=\count122
+)
+LaTeX Info: Redefining \ref on input line 30.
+LaTeX Info: Redefining \pageref on input line 30.
+LaTeX Info: Redefining \nameref on input line 30.
+(compiles/d1585ce575dea4cab55f784a22a88652/output.out) (compiles/d1585ce575dea4
+cab55f784a22a88652/output.out)
+\@outlinefile=\write3
+\openout3 = `output.out'.
+
+Package caption Info: Begin \AtBeginDocument code.
+Package caption3 Info: subfig package 1.2 or 1.3 is loaded.
+LaTeX Info: Redefining \subref on input line 30.
+Package caption Info: End \AtBeginDocument code.
+(/usr/local/texlive/2009/texmf-dist/tex/context/base/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+\scratchcounter=\count123
+\scratchdimen=\dimen127
+\scratchbox=\box29
+\nofMPsegments=\count124
+\nofMParguments=\count125
+\everyMPshowfont=\toks27
+\MPscratchCnt=\count126
+\MPscratchDim=\dimen128
+\MPnumerator=\count127
+\everyMPtoPDFconversion=\toks28
+) (compiles/d1585ce575dea4cab55f784a22a88652/output.toc
+LaTeX Font Info:    Try loading font information for U+msa on input line 3.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/umsa.fd
+File: umsa.fd 2009/06/22 v3.00 AMS symbols A
+)
+LaTeX Font Info:    Try loading font information for U+msb on input line 3.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/umsb.fd
+File: umsb.fd 2009/06/22 v3.00 AMS symbols B
+))
+\tf@toc=\write4
+\openout4 = `output.toc'.
+
+(compiles/d1585ce575dea4cab55f784a22a88652/sections/introduction.tex
+
+LaTeX Warning: Citation `Lambert:2010iw' on page 1 undefined on input line 7.
+
+
+LaTeX Warning: Citation `Lambert:2010iw' on page 1 undefined on input line 7.
+
+) (compiles/d1585ce575dea4cab55f784a22a88652/sections/instantons.tex [1
+
+{/usr/local/texlive/2009/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
+LaTeX Font Info:    Try loading font information for U+euf on input line 7.
+(/usr/local/texlive/2009/texmf-dist/tex/latex/amsfonts/ueuf.fd
+File: ueuf.fd 2009/06/22 v3.00 Euler Fraktur
+) [2]
+
+LaTeX Warning: Citation `Manton:2004tk' on page 3 undefined on input line 72.
+
+[3]
+
+LaTeX Warning: Citation `Atiyah1978' on page 4 undefined on input line 108.
+
+[4]
+
+LaTeX Warning: Citation `Dorey:1996hu' on page 5 undefined on input line 176.
+
+[5] [6] [7])
+(compiles/d1585ce575dea4cab55f784a22a88652/sections/moduli_space_approximation.
+tex
+
+LaTeX Warning: Citation `Manton1982' on page 8 undefined on input line 3.
+
+[8]
+
+LaTeX Warning: Citation `Weinberg:2006rq' on page 9 undefined on input line 21.
+
+
+[9] [10] [11]
+
+LaTeX Warning: Citation `Bak:1999sv' on page 12 undefined on input line 192.
+
+[12])
+(compiles/d1585ce575dea4cab55f784a22a88652/sections/dynamics_of_single_instanto
+n.tex
+
+LaTeX Warning: Citation `Peeters:2001np' on page 13 undefined on input line 9.
+
+[13] <figures/variation_of_theta_dot.png, id=325, 361.35pt x 228.855pt>
+File: figures/variation_of_theta_dot.png Graphic file (type png)
+<use figures/variation_of_theta_dot.png> <figures/variation_of_rho_dot.png, id=
+326, 361.35pt x 232.87pt>
+File: figures/variation_of_rho_dot.png Graphic file (type png)
+<use figures/variation_of_rho_dot.png>
+Overfull \hbox (13.3333pt too wide) in paragraph at lines 55--61
+ [][][][] 
+ []
+
+)
+(compiles/d1585ce575dea4cab55f784a22a88652/sections/dynamics_of_two_instantons.
+tex [14 <compiles/d1585ce575dea4cab55f784a22a88652/figures/variation_of_theta_d
+ot.png (PNG copy)> <compiles/d1585ce575dea4cab55f784a22a88652/figures/variation
+_of_rho_dot.png (PNG copy)>]
+
+LaTeX Warning: Citation `Osborn:1981yf' on page 15 undefined on input line 27.
+
+
+LaTeX Warning: Citation `Peeters:2001np' on page 15 undefined on input line 27.
+
+
+[15] [16] <figures/higgs_field/fig1.png, id=372, 361.35pt x 285.065pt>
+File: figures/higgs_field/fig1.png Graphic file (type png)
+<use figures/higgs_field/fig1.png> <figures/higgs_field/fig2.png, id=373, 361.3
+5pt x 286.06876pt>
+File: figures/higgs_field/fig2.png Graphic file (type png)
+<use figures/higgs_field/fig2.png> <figures/higgs_field/fig3.png, id=374, 361.3
+5pt x 285.065pt>
+File: figures/higgs_field/fig3.png Graphic file (type png)
+<use figures/higgs_field/fig3.png> [17] <figures/fig4.png, id=394, 320.8788pt x
+ 198.7425pt>
+File: figures/fig4.png Graphic file (type png)
+<use figures/fig4.png> [18 <compiles/d1585ce575dea4cab55f784a22a88652/figures/h
+iggs_field/fig1.png (PNG copy)> <compiles/d1585ce575dea4cab55f784a22a88652/figu
+res/higgs_field/fig2.png (PNG copy)> <compiles/d1585ce575dea4cab55f784a22a88652
+/figures/higgs_field/fig3.png (PNG copy)> <compiles/d1585ce575dea4cab55f784a22a
+88652/figures/fig4.png>] <figures/attraction_and_repulsion.png, id=409, 769.876
+25pt x 473.77pt>
+File: figures/attraction_and_repulsion.png Graphic file (type png)
+<use figures/attraction_and_repulsion.png> <figures/scatterings/flower.png, id=
+411, 361.35pt x 363.3575pt>
+File: figures/scatterings/flower.png Graphic file (type png)
+<use figures/scatterings/flower.png> <figures/scatterings/circle.png, id=412, 3
+61.35pt x 361.35pt>
+File: figures/scatterings/circle.png Graphic file (type png)
+<use figures/scatterings/circle.png> <figures/scatterings/right_angle.png, id=4
+13, 361.35pt x 363.3575pt>
+File: figures/scatterings/right_angle.png Graphic file (type png)
+<use figures/scatterings/right_angle.png> [19 <compiles/d1585ce575dea4cab55f784
+a22a88652/figures/attraction_and_repulsion.png (PNG copy)>] [20 <compiles/d1585
+ce575dea4cab55f784a22a88652/figures/scatterings/flower.png (PNG copy)> <compile
+s/d1585ce575dea4cab55f784a22a88652/figures/scatterings/circle.png (PNG copy)> <
+compiles/d1585ce575dea4cab55f784a22a88652/figures/scatterings/right_angle.png (
+PNG copy)>] <figures/angular_momentum_exchange_rho.png, id=436, 361.35pt x 232.
+87pt>
+File: figures/angular_momentum_exchange_rho.png Graphic file (type png)
+<use figures/angular_momentum_exchange_rho.png> <figures/angular_momentum_excha
+nge_L.png, id=437, 361.35pt x 210.7875pt>
+File: figures/angular_momentum_exchange_L.png Graphic file (type png)
+<use figures/angular_momentum_exchange_L.png>) (compiles/d1585ce575dea4cab55f78
+4a22a88652/sections/appendices.tex [21 <compiles/d1585ce575dea4cab55f784a22a886
+52/figures/angular_momentum_exchange_rho.png (PNG copy)> <compiles/d1585ce575de
+a4cab55f784a22a88652/figures/angular_momentum_exchange_L.png (PNG copy)>]
+
+LaTeX Warning: Citation `Osborn:1981yf' on page 22 undefined on input line 20.
+
+[22]
+
+LaTeX Warning: Citation `Osborn:1981yf' on page 23 undefined on input line 103.
+
+
+
+LaTeX Warning: Citation `Peeters:2001np' on page 23 undefined on input line 103
+.
+
+[23] [24] [25] [26]
+
+LaTeX Warning: Citation `Peeters:2001np' on page 27 undefined on input line 352
+.
+
+[27] [28] [29] [30])
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 50.
+[31]
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 50.
+(compiles/d1585ce575dea4cab55f784a22a88652/output.aux)
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 50.
+Package rerunfilecheck Info: File `output.out' has not changed.
+(rerunfilecheck)             Checksum: 47077DD58F3BF93130F2EA39E2DC1E25;1709.
+
+LaTeX Warning: There were undefined references.
+
+ ) 
+Here is how much of TeX's memory you used:
+ 7439 strings out of 493773
+ 115753 string characters out of 3145367
+ 210032 words of memory out of 3000000
+ 10211 multiletter control sequences out of 15000+200000
+ 13189 words of font info for 51 fonts, out of 3000000 for 9000
+ 714 hyphenation exceptions out of 8191
+ 44i,20n,45p,1356b,432s stack positions out of 5000i,500n,10000p,200000b,50000s
+</usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb
+></usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb>
+</usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb><
+/usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></
+usr/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb></us
+r/local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/
+local/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/lo
+cal/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/loca
+l/texlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr5.pfb></usr/local/t
+exlive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/local/texl
+ive/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb></usr/local/texlive
+/2009/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/local/texlive/20
+09/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/local/texlive/200
+9/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/local/texlive/2009/
+texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/local/texlive/2009/te
+xmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></usr/local/texlive/2009/tex
+mf-dist/fonts/type1/public/amsfonts/cm/cmtt9.pfb></usr/local/texlive/2009/texmf
+-dist/fonts/type1/public/amsfonts/euler/eufm10.pfb></usr/local/texlive/2009/tex
+mf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb>
+Output written on compiles/d1585ce575dea4cab55f784a22a88652/output.pdf (31 page
+s, 644890 bytes).
+PDF statistics:
+ 775 PDF objects out of 1000 (max. 8388607)
+ 350 named destinations out of 1000 (max. 500000)
+ 253 words of extra memory for PDF output out of 10000 (max. 10000000)
+

+ 546 - 0
services/web/test/frontend/ide/log-parser/logParserTests.js

@@ -0,0 +1,546 @@
+import { expect } from 'chai'
+import LatexLogParser from '../../../../frontend/js/ide/log-parser/latex-log-parser'
+import BibLogParser from '../../../../frontend/js/ide/log-parser/bib-log-parser'
+
+const fixturePath = '../../helpers/fixtures/logs/'
+const fs = require('fs')
+const path = require('path')
+
+describe('logParser', function (done) {
+  before(function () {
+    this.errorLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'errors.log'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.warningLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'warnings.log'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.badBoxesLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'bad-boxes.log'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.biberWarningsLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'biber-warnings.log'),
+      { encoding: 'utf8', flag: 'r' }
+    )
+    this.natbibWarningsLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'natbib-warnings.log'),
+      { encoding: 'utf8', flag: 'r' }
+    )
+    this.geometryWarningsLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'geometry-warnings.log'),
+      { encoding: 'utf8', flag: 'r' }
+    )
+    this.captionWarningsLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'caption-warnings.log'),
+      { encoding: 'utf8', flag: 'r' }
+    )
+    this.runawayArgumentsLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'runaway-arguments.log'),
+      { encoding: 'utf8', flag: 'r' }
+    )
+    this.biberBlg = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'biber.blg'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.bibtexBlg = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'bibtex.blg'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.fileLineErrorLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'file-line-error.log'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+    this.filenamesLog = fs.readFileSync(
+      path.resolve(__dirname, fixturePath + 'filenames.log'),
+      {
+        encoding: 'utf8',
+        flag: 'r',
+      }
+    )
+  })
+
+  it('should parse errors', function () {
+    const latexParser = new LatexLogParser(this.errorLog, {
+      ignoreDuplicates: true,
+    })
+    const errors = latexParser.parse().errors
+
+    const expectedErrors = [
+      [29, 'Undefined control sequence.'] + '',
+      [
+        30,
+        'LaTeX Error: \\begin{equation} on input line 28 ended by \\end{equaion}.',
+      ] + '',
+      [30, 'Missing $ inserted.'] + '',
+      [30, 'Display math should end with $$.'] + '',
+      [46, 'Extra }, or forgotten \\right.'] + '',
+      [46, 'Missing \\right. inserted.'] + '',
+      [46, 'Missing } inserted.'] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(
+        expectedErrors.indexOf([errors[i].line, errors[i].message] + '')
+      ).to.equal(i)
+    }
+  })
+
+  it('should parse Badbox errors', function () {
+    const latexParser = new LatexLogParser(this.badBoxesLog)
+    const errors = latexParser.parse().typesetting
+
+    const expectedErrors = [
+      [9, 'Overfull \\hbox (29.11179pt too wide) in paragraph at lines 9--10'] +
+        '',
+      [11, 'Underfull \\hbox (badness 10000) in paragraph at lines 11--13'] +
+        '',
+      [27, 'Overfull \\vbox (12.00034pt too high) detected at line 27'] + '',
+      [46, 'Underfull \\vbox (badness 10000) detected at line 46'] + '',
+      [54, 'Underfull \\hbox (badness 10000) in paragraph at lines 54--55'] +
+        '',
+      [58, 'Underfull \\hbox (badness 10000) in paragraph at lines 58--60'] +
+        '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(
+        expectedErrors.indexOf([errors[i].line, errors[i].message] + '')
+      ).to.equal(i)
+    }
+  })
+
+  it('should parse Warnings', function () {
+    const latexParser = new LatexLogParser(this.warningLog)
+    const errors = latexParser.parse().warnings
+
+    const expectedErrors = [
+      [
+        7,
+        "Citation `Lambert:2010iw' on page 1 undefined on input line 7.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/introduction.tex',
+      ] + '',
+      [
+        7,
+        "Citation `Lambert:2010iw' on page 1 undefined on input line 7.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/introduction.tex',
+      ] + '',
+      [
+        72,
+        "Citation `Manton:2004tk' on page 3 undefined on input line 72.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/instantons.tex',
+      ] + '',
+      [
+        108,
+        "Citation `Atiyah1978' on page 4 undefined on input line 108.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/instantons.tex',
+      ] + '',
+      [
+        176,
+        "Citation `Dorey:1996hu' on page 5 undefined on input line 176.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/instantons.tex',
+      ] + '',
+      [
+        3,
+        "Citation `Manton1982' on page 8 undefined on input line 3.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/moduli_space_approximation.tex',
+      ] + '',
+      [
+        21,
+        "Citation `Weinberg:2006rq' on page 9 undefined on input line 21.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/moduli_space_approximation.tex',
+      ] + '',
+      [
+        192,
+        "Citation `Bak:1999sv' on page 12 undefined on input line 192.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/moduli_space_approximation.tex',
+      ] + '',
+      [
+        9,
+        "Citation `Peeters:2001np' on page 13 undefined on input line 9.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/dynamics_of_single_instanton.tex',
+      ] + '',
+      [
+        27,
+        "Citation `Osborn:1981yf' on page 15 undefined on input line 27.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/dynamics_of_two_instantons.tex',
+      ] + '',
+      [
+        27,
+        "Citation `Peeters:2001np' on page 15 undefined on input line 27.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/dynamics_of_two_instantons.tex',
+      ] + '',
+      [
+        20,
+        "Citation `Osborn:1981yf' on page 22 undefined on input line 20.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/appendices.tex',
+      ] + '',
+      [
+        103,
+        "Citation `Osborn:1981yf' on page 23 undefined on input line 103.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/appendices.tex',
+      ] + '',
+      [
+        103,
+        "Citation `Peeters:2001np' on page 23 undefined on input line 103.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/appendices.tex',
+      ] + '',
+      [
+        352,
+        "Citation `Peeters:2001np' on page 27 undefined on input line 352.",
+        'compiles/d1585ce575dea4cab55f784a22a88652/sections/appendices.tex',
+      ] + '',
+    ]
+
+    // there logs display an additional summary error for undefined references
+    const offsetErrorLen = errors.length - 1
+    expect(offsetErrorLen).to.equal(expectedErrors.length)
+
+    for (var i = 0; i < offsetErrorLen; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse Biber warnings', function () {
+    const latexParser = new LatexLogParser(this.biberWarningsLog)
+    const errors = latexParser.parse().warnings
+
+    const expectedErrors = [
+      [
+        null,
+        'Package biblatex Warning: No "backend" specified, using Biber backend. To use BibTeX, load biblatex with the "backend=bibtex" option.',
+        '/usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/biblatex.sty',
+      ] + '',
+      [
+        null,
+        'Package biblatex Warning: The following entry could not be found in the database: Missing3 Please verify the spelling and rerun LaTeX afterwards.',
+        '/compile/output.bbl',
+      ] + '',
+      [
+        null,
+        'Package biblatex Warning: The following entry could not be found in the database: Missing2 Please verify the spelling and rerun LaTeX afterwards.',
+        '/compile/output.bbl',
+      ] + '',
+      [
+        null,
+        'Package biblatex Warning: The following entry could not be found in the database: Missing1 Please verify the spelling and rerun LaTeX afterwards.',
+        '/compile/output.bbl',
+      ] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse Natbib warnings', function () {
+    const latexParser = new LatexLogParser(this.natbibWarningsLog)
+    const errors = latexParser.parse().warnings
+
+    var expectedErrors = [
+      [
+        6,
+        "Package natbib Warning: Citation `blah' on page 1 undefined on input line 6.",
+        '/compile/main.tex',
+      ] + '',
+      [
+        null,
+        'Package natbib Warning: There were undefined citations.',
+        '/compile/main.tex',
+      ] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse Geometry warnings', function () {
+    const latexParser = new LatexLogParser(this.geometryWarningsLog)
+    const errors = latexParser.parse().warnings
+
+    var expectedErrors = [
+      [
+        null,
+        "Package geometry Warning: Over-specification in `h'-direction. `width' (597.50787pt) is ignored.",
+        '/compile/main.tex',
+      ] + '',
+      [
+        null,
+        "Package geometry Warning: Over-specification in `v'-direction. `height' (845.04684pt) is ignored.",
+        '/compile/main.tex',
+      ] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse Caption warnings', function () {
+    const latexParser = new LatexLogParser(this.captionWarningsLog)
+    const errors = latexParser.parse().warnings
+
+    var expectedErrors = [
+      [
+        null,
+        'Package caption Warning: Unsupported document class (or package) detected, usage of the caption package is not recommended. See the caption package documentation for explanation.',
+        '/usr/local/texlive/2014/texmf-dist/tex/latex/caption/caption.sty',
+      ] + '',
+      [
+        46,
+        "Package caption Warning: The option `hypcap=true' will be ignored for this particular \\caption on input line 46. See the caption package documentation for explanation.",
+        '/compile/main.tex',
+      ] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse Runaway Arguments', function () {
+    const latexParser = new LatexLogParser(this.runawayArgumentsLog)
+    const errors = latexParser.parse().errors
+
+    var expectedErrors = [
+      [null, 'Runaway argument?', '/compile/runaway_argument.tex'] + '',
+      [null, 'Emergency stop.', '/compile/runaway_argument.tex'] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should parse filenames', function () {
+    const latexParser = new LatexLogParser(this.filenamesLog)
+    var { errors, warnings, typesetting } = latexParser.parse()
+
+    var expectedErrors = [
+      [
+        1,
+        'Undefined control sequence.',
+        '/compile/a folder with spaces/a subfolder with spaces/a subsubfolder with spaces/another file with spaces.tex',
+      ] + '',
+    ]
+
+    var expectedWarnings = [
+      [
+        9,
+        "Citation `Peeters:2001np' on page 13 undefined on input line 9.",
+        '/compile/main',
+      ] + '',
+    ]
+
+    var expectedTypesetting = [
+      [
+        123,
+        'Overfull \\hbox (4.56pt too wide) in paragraph at lines 123--456',
+        '/compile/otherfile',
+      ] + '',
+    ]
+
+    expect(expectedErrors.length).to.equal(errors.length)
+    expect(warnings.length).to.equal(warnings.length)
+    expect(typesetting.length).to.equal(typesetting.length)
+
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+    for (var j = 0; i < warnings.length; i++) {
+      expect(expectedWarnings[j]).to.equal(
+        [warnings[j].line, warnings[j].message, warnings[j].file] + ''
+      )
+    }
+    for (var k = 0; i < typesetting.length; i++) {
+      expect(expectedTypesetting[k]).to.equal(
+        [typesetting[k].line, typesetting[k].message, typesetting[k].file] + ''
+      )
+    }
+  })
+
+  it('should perform file line error parsing', function () {
+    const latexParser = new LatexLogParser(this.fileLineErrorLog)
+    const errors = latexParser.parse().errors
+
+    var expectedErrors = [
+      [
+        1,
+        'Undefined control sequence.',
+        '/compile/a folder with spaces/a subfolder with spaces/a subsubfolder with spaces/another file with spaces.tex',
+      ] + '',
+    ]
+
+    expect(errors.length).to.equal(expectedErrors.length)
+    for (var i = 0; i < errors.length; i++) {
+      expect(expectedErrors[i]).to.equal(
+        [errors[i].line, errors[i].message, errors[i].file] + ''
+      )
+    }
+  })
+
+  it('should ignore duplicates', function () {
+    var latexParser = new LatexLogParser(this.errorLog)
+    var errors = latexParser.parse().errors
+
+    // duplicates included
+    expect(errors.length).to.equal(10)
+
+    latexParser = new LatexLogParser(this.errorLog, { ignoreDuplicates: true })
+    errors = latexParser.parse().errors
+
+    // duplicates excluded
+    expect(errors.length).to.equal(7)
+  })
+
+  it('should get file paths', function () {
+    var latexParser = new LatexLogParser(this.errorLog)
+    var errors = latexParser.parse().errors
+
+    for (var i = 0; i < errors.length; i++) {
+      expect(errors[i].file).to.equal(
+        'compiles/dff0c37d892f346e58fc14975a16bf69/sections/appendices.tex'
+      )
+    }
+
+    latexParser = new LatexLogParser(this.badBoxesLog)
+    errors = latexParser.parse().all
+    for (var j = 0; j < errors.length; j++) {
+      expect(errors[j].file).to.equal(
+        'compiles/b6cf470376785e64ad84c57e3296c912/logs/bad-boxes.tex'
+      )
+    }
+  })
+
+  it('should parse a typical biber .blg file', function () {
+    const bibParser = new BibLogParser(this.biberBlg, {})
+    const result = bibParser.parse()
+    expect(typeof result).to.equal('object')
+    expect(result.all.length).to.equal(14)
+    expect(result.errors.length).to.equal(1)
+    expect(result.warnings.length).to.equal(2)
+
+    const error = result.errors[0]
+    expect(error.level).to.equal('error')
+    expect(error.line).to.equal('8')
+    expect(error.file).to.equal('bibliography.bib')
+    expect(error.message).to.equal(
+      'syntax error: at end of input, expected end of entry ("}" or ")") (skipping to next "@")'
+    )
+  })
+
+  it('should throw an error when non-biblog passed to BibLogParser', function (done) {
+    const bibParser = new BibLogParser(this.captionWarningsLog, {})
+    try {
+      bibParser.parse()
+    } catch (e) {
+      expect(e).to.exist
+      done()
+    }
+  })
+
+  it('should throw an error when empty string passed to BibLogParser', function (done) {
+    const bibParser = new BibLogParser('', {})
+    try {
+      bibParser.parse()
+    } catch (e) {
+      expect(e).to.exist
+      done()
+    }
+  })
+
+  it('should throw an error when non-string passed to BibLogParser', function (done) {
+    try {
+      const bibParser = new BibLogParser({ a: 1 }, {})
+      bibParser.parse()
+    } catch (e) {
+      expect(e).to.exist
+      done()
+    }
+  })
+
+  it('should parse a typical bibtex .blg file', function () {
+    const bibParser = new BibLogParser(this.bibtexBlg, {})
+    const result = bibParser.parse()
+
+    expect(typeof result).to.equal('object')
+    expect(result.all.length).to.equal(13)
+
+    expect(result.warnings.length).to.equal(6)
+    const firstWarning = result.warnings[0]
+    expect(firstWarning.file).to.equal('references.bib')
+    expect(firstWarning.line).to.equal('152')
+    expect(firstWarning.level).to.equal('warning')
+    expect(firstWarning.message).to.equal(
+      'string name "something" is undefined'
+    )
+
+    const thirdWarning = result.warnings[2]
+    expect(thirdWarning.message).to.equal(
+      "can't use both author and editor fields in Binney87"
+    )
+
+    expect(result.errors.length).to.equal(7)
+    const firstError = result.errors[0]
+    expect(firstError.file).to.equal('references.bib')
+    expect(firstError.line).to.equal('196')
+    expect(firstError.level).to.equal('error')
+    expect(
+      firstError.message.indexOf("I was expecting a `,' or a `}'")
+    ).to.equal(0)
+    expect(
+      firstError.message.indexOf('(Error may have been on previous line)') > 0
+    ).to.equal(true)
+    const crossReferenceError = result.errors[5]
+    expect(crossReferenceError.level).to.equal('error')
+    expect(
+      crossReferenceError.message.indexOf('A bad cross reference')
+    ).to.equal(0)
+    const styleError = result.errors[6]
+    expect(styleError.level).to.equal('error')
+    expect(
+      styleError.message.indexOf("I couldn't open style file aa.bst")
+    ).to.equal(0)
+  })
+})