| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- var adoptBuffer = require('./adopt-buffer');
 
- var isBOM = require('../tokenizer').isBOM;
 
- var N = 10;
 
- var F = 12;
 
- var R = 13;
 
- function computeLinesAndColumns(host, source) {
 
-     var sourceLength = source.length;
 
-     var lines = adoptBuffer(host.lines, sourceLength); // +1
 
-     var line = host.startLine;
 
-     var columns = adoptBuffer(host.columns, sourceLength);
 
-     var column = host.startColumn;
 
-     var startOffset = source.length > 0 ? isBOM(source.charCodeAt(0)) : 0;
 
-     for (var i = startOffset; i < sourceLength; i++) { // -1
 
-         var code = source.charCodeAt(i);
 
-         lines[i] = line;
 
-         columns[i] = column++;
 
-         if (code === N || code === R || code === F) {
 
-             if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {
 
-                 i++;
 
-                 lines[i] = line;
 
-                 columns[i] = column;
 
-             }
 
-             line++;
 
-             column = 1;
 
-         }
 
-     }
 
-     lines[i] = line;
 
-     columns[i] = column;
 
-     host.lines = lines;
 
-     host.columns = columns;
 
- }
 
- var OffsetToLocation = function() {
 
-     this.lines = null;
 
-     this.columns = null;
 
-     this.linesAndColumnsComputed = false;
 
- };
 
- OffsetToLocation.prototype = {
 
-     setSource: function(source, startOffset, startLine, startColumn) {
 
-         this.source = source;
 
-         this.startOffset = typeof startOffset === 'undefined' ? 0 : startOffset;
 
-         this.startLine = typeof startLine === 'undefined' ? 1 : startLine;
 
-         this.startColumn = typeof startColumn === 'undefined' ? 1 : startColumn;
 
-         this.linesAndColumnsComputed = false;
 
-     },
 
-     ensureLinesAndColumnsComputed: function() {
 
-         if (!this.linesAndColumnsComputed) {
 
-             computeLinesAndColumns(this, this.source);
 
-             this.linesAndColumnsComputed = true;
 
-         }
 
-     },
 
-     getLocation: function(offset, filename) {
 
-         this.ensureLinesAndColumnsComputed();
 
-         return {
 
-             source: filename,
 
-             offset: this.startOffset + offset,
 
-             line: this.lines[offset],
 
-             column: this.columns[offset]
 
-         };
 
-     },
 
-     getLocationRange: function(start, end, filename) {
 
-         this.ensureLinesAndColumnsComputed();
 
-         return {
 
-             source: filename,
 
-             start: {
 
-                 offset: this.startOffset + start,
 
-                 line: this.lines[start],
 
-                 column: this.columns[start]
 
-             },
 
-             end: {
 
-                 offset: this.startOffset + end,
 
-                 line: this.lines[end],
 
-                 column: this.columns[end]
 
-             }
 
-         };
 
-     }
 
- };
 
- module.exports = OffsetToLocation;
 
 
  |