@@ -1034,7 +1034,20 @@ function getDelimiter(rowStr,param) {
10341034 } ) ;
10351035 return rtn ;
10361036}
1037-
1037+ function isQuoteOpen ( str , param ) {
1038+ var quote = param . quote ;
1039+ return str [ 0 ] === quote && ( str [ 1 ] !== quote || str [ 1 ] === quote && ( str [ 2 ] === quote || str . length === 2 ) ) ;
1040+ }
1041+ function isQuoteClose ( str , param ) {
1042+ var quote = param . quote ;
1043+ var count = 0 ;
1044+ var idx = str . length - 1 ;
1045+ while ( str [ idx ] === quote ) {
1046+ idx -- ;
1047+ count ++ ;
1048+ }
1049+ return count % 2 !== 0 ;
1050+ }
10381051function rowSplit ( rowStr , param ) {
10391052 var quote = param . quote ;
10401053 var trim = param . trim ;
@@ -1054,34 +1067,24 @@ function rowSplit(rowStr, param) {
10541067 }
10551068 var len = e . length ;
10561069 if ( ! inquote ) {
1057- if ( e [ 0 ] === quote ) { //possible open
1070+ if ( isQuoteOpen ( e , param ) ) { //quote open
10581071 e = e . substr ( 1 ) ;
1059- len -= 1 ;
1060- if ( e [ 0 ] !== quote ) { // open quote
1061- if ( e [ len - 1 ] === quote ) { // possible close
1062- if ( e [ len - 2 ] !== quote || e [ len - 2 ] === quote && e [ len - 3 ] === quote ) { // close quote
1063- e = e . substring ( 0 , len - 1 ) ;
1064- e = twoDoubleQuote ( e , quote ) ;
1065- row . push ( e ) ;
1066- continue ;
1067- }
1068- }
1069- inquote = true ;
1070- quoteBuff += e ;
1072+ if ( isQuoteClose ( e , param ) ) { //quote close
1073+ e = e . substring ( 0 , e . length - 1 ) ;
1074+ e = twoDoubleQuote ( e , quote ) ;
1075+ row . push ( e ) ;
10711076 continue ;
10721077 } else {
1073- if ( len === 1 ) { // original column is empty quote pairs like ""
1074- e = "" ;
1075- }
1076- row . push ( e ) ;
1078+ inquote = true ;
1079+ quoteBuff += e ;
10771080 continue ;
10781081 }
10791082 } else {
1080- row . push ( e ) ;
1081- continue ;
1083+ row . push ( e ) ;
1084+ continue ;
10821085 }
10831086 } else { //previous quote not closed
1084- if ( e [ len - 1 ] === quote && ( e [ len - 2 ] !== quote || e [ len - 2 ] === quote && e [ len - 3 ] === quote ) ) { //close double quote
1087+ if ( isQuoteClose ( e , param ) ) { //close double quote
10851088 inquote = false ;
10861089 e = e . substr ( 0 , len - 1 ) ;
10871090 quoteBuff += delimiter + e ;
@@ -10144,7 +10147,7 @@ module.exports={
1014410147 "email" : "t3dodson@gmail.com"
1014510148 }
1014610149 ] ,
10147- "version" : "0.5.9 " ,
10150+ "version" : "0.5.10 " ,
1014810151 "keywords" : [
1014910152 "csv" ,
1015010153 "csvtojson" ,
@@ -10174,10 +10177,13 @@ module.exports={
1017410177 "grunt-newer" : "^1.1.0" ,
1017510178 "imgur" : "^0.1.5" ,
1017610179 "load-grunt-tasks" : "^3.4.0" ,
10177- "mocha" : "^2.2 .5"
10180+ "mocha" : "^2.4 .5"
1017810181 } ,
1017910182 "dependencies" : {
1018010183 "async" : "^1.2.1"
10184+ } ,
10185+ "scripts" :{
10186+ "test" :"mocha ./test -R spec"
1018110187 }
1018210188}
1018310189
0 commit comments