| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 
							- var createCustomError = require('../utils/createCustomError');
 
- var MAX_LINE_LENGTH = 100;
 
- var OFFSET_CORRECTION = 60;
 
- var TAB_REPLACEMENT = '    ';
 
- function sourceFragment(error, extraLines) {
 
-     function processLines(start, end) {
 
-         return lines.slice(start, end).map(function(line, idx) {
 
-             var num = String(start + idx + 1);
 
-             while (num.length < maxNumLength) {
 
-                 num = ' ' + num;
 
-             }
 
-             return num + ' |' + line;
 
-         }).join('\n');
 
-     }
 
-     var lines = error.source.split(/\r\n?|\n|\f/);
 
-     var line = error.line;
 
-     var column = error.column;
 
-     var startLine = Math.max(1, line - extraLines) - 1;
 
-     var endLine = Math.min(line + extraLines, lines.length + 1);
 
-     var maxNumLength = Math.max(4, String(endLine).length) + 1;
 
-     var cutLeft = 0;
 
-     // column correction according to replaced tab before column
 
-     column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length;
 
-     if (column > MAX_LINE_LENGTH) {
 
-         cutLeft = column - OFFSET_CORRECTION + 3;
 
-         column = OFFSET_CORRECTION - 2;
 
-     }
 
-     for (var i = startLine; i <= endLine; i++) {
 
-         if (i >= 0 && i < lines.length) {
 
-             lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT);
 
-             lines[i] =
 
-                 (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') +
 
-                 lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +
 
-                 (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : '');
 
-         }
 
-     }
 
-     return [
 
-         processLines(startLine, line),
 
-         new Array(column + maxNumLength + 2).join('-') + '^',
 
-         processLines(line, endLine)
 
-     ].filter(Boolean).join('\n');
 
- }
 
- var SyntaxError = function(message, source, offset, line, column) {
 
-     var error = createCustomError('SyntaxError', message);
 
-     error.source = source;
 
-     error.offset = offset;
 
-     error.line = line;
 
-     error.column = column;
 
-     error.sourceFragment = function(extraLines) {
 
-         return sourceFragment(error, isNaN(extraLines) ? 0 : extraLines);
 
-     };
 
-     Object.defineProperty(error, 'formattedMessage', {
 
-         get: function() {
 
-             return (
 
-                 'Parse error: ' + error.message + '\n' +
 
-                 sourceFragment(error, 2)
 
-             );
 
-         }
 
-     });
 
-     // for backward capability
 
-     error.parseError = {
 
-         offset: offset,
 
-         line: line,
 
-         column: column
 
-     };
 
-     return error;
 
- };
 
- module.exports = SyntaxError;
 
 
  |