Browse Source

Using latest

pull/89/head
Matthew Holt 11 years ago
parent
commit
05e46a3df7
  1. 43
      resources/js/papaparse.js

43
resources/js/papaparse.js

@ -547,13 +547,22 @@ @@ -547,13 +547,22 @@
var reader, nextChunk, slice;
var handle = new ParserHandle(copy(config));
// FileReader is better than FileReaderSync (even in worker) - see http://stackoverflow.com/q/24708649/1048862
// But Firefox is a pill, too - see issue #76: https://github.com/mholt/PapaParse/issues/76
var usingAsyncReader = typeof FileReader === 'function';
this.stream = function(file)
{
var slice = file.slice || file.webkitSlice || file.mozSlice;
reader = new FileReader(); // Better than FileReaderSync (even in worker). See: http://stackoverflow.com/q/24708649/1048862
reader.onload = chunkLoaded;
reader.onerror = chunkError;
if (usingAsyncReader)
{
reader = new FileReader(); // Preferred method of reading files, even in workers
reader.onload = chunkLoaded;
reader.onerror = chunkError;
}
else
reader = new FileReaderSync(); // Hack for running in a web worker in Firefox
nextChunk(); // Starts streaming
@ -567,12 +576,15 @@ @@ -567,12 +576,15 @@
{
var end = Math.min(start + config.chunkSize, file.size);
var txt = reader.readAsText(slice.call(file, start, end), config.encoding);
start += config.chunkSize;
return txt;
if (!usingAsyncReader)
chunkLoaded({ target: { result: txt } }); // mimic the async signature
}
function chunkLoaded(event)
{
// Very important to increment start each time before handling results
start += config.chunkSize;
// Rejoin the line we likely just split in two by chunking the file
aggregate += partialLine + event.target.result;
partialLine = "";
@ -869,6 +881,7 @@ @@ -869,6 +881,7 @@
var _errors; // Parse errors
var _rowIdx; // Current row index within results (0-based)
var _colIdx; // Current col index within result row (0-based)
var _runningRowIdx; // Cumulative row index, used by the preview feature
var _aborted = false; // Abort flag
var _paused = false; // Pause flag
@ -928,7 +941,7 @@ @@ -928,7 +941,7 @@
while (_i < _input.length)
{
if (_aborted) break;
if (_preview > 0 && _rowIdx >= _preview) break;
if (_preview > 0 && _runningRowIdx >= _preview) break;
if (_paused) return finishParsing();
if (_ch == '"')
@ -977,6 +990,8 @@ @@ -977,6 +990,8 @@
function parseInQuotes()
{
if (twoCharLineBreak(_i) || oneCharLineBreak(_i))
_lineNum++;
saveChar();
}
@ -984,12 +999,12 @@ @@ -984,12 +999,12 @@
{
if (_ch == _delimiter)
newField();
else if (twoCharLineBreak())
else if (twoCharLineBreak(_i))
{
newRow();
nextChar();
}
else if (oneCharLineBreak())
else if (oneCharLineBreak(_i))
newRow();
else if (isCommentStart())
skipLine();
@ -1010,8 +1025,8 @@ @@ -1010,8 +1025,8 @@
function skipLine()
{
while (!twoCharLineBreak()
&& !oneCharLineBreak()
while (!twoCharLineBreak(_i)
&& !oneCharLineBreak(_i)
&& _i < _input.length)
{
nextChar();
@ -1034,6 +1049,7 @@ @@ -1034,6 +1049,7 @@
endRow();
_lineNum++;
_runningRowIdx++;
_data.push([]);
_rowIdx = _data.length - 1;
newField();
@ -1064,8 +1080,6 @@ @@ -1064,8 +1080,6 @@
function twoCharLineBreak(i)
{
if (typeof i !== 'number')
i = _i;
return i < _input.length - 1 &&
((_input[i] == "\r" && _input[i+1] == "\n")
|| (_input[i] == "\n" && _input[i+1] == "\r"))
@ -1073,8 +1087,6 @@ @@ -1073,8 +1087,6 @@
function oneCharLineBreak(i)
{
if (typeof i !== 'number')
i = _i;
return _input[i] == "\r" || _input[i] == "\n";
}
@ -1118,8 +1130,7 @@ @@ -1118,8 +1130,7 @@
{
_input = input;
_inQuotes = false;
_lineNum = 1;
_i = 0;
_i = 0, _runningRowIdx = 0, _lineNum = 1;
clearErrorsAndData();
_data = [ [""] ]; // starting parsing requires an empty field
_ch = _input[_i];

Loading…
Cancel
Save