summaryrefslogtreecommitdiff
path: root/frontend/gamma/js/Clipperz/CSVProcessor.js
Unidiff
Diffstat (limited to 'frontend/gamma/js/Clipperz/CSVProcessor.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/js/Clipperz/CSVProcessor.js15
1 files changed, 6 insertions, 9 deletions
diff --git a/frontend/gamma/js/Clipperz/CSVProcessor.js b/frontend/gamma/js/Clipperz/CSVProcessor.js
index d481ba2..0b18731 100644
--- a/frontend/gamma/js/Clipperz/CSVProcessor.js
+++ b/frontend/gamma/js/Clipperz/CSVProcessor.js
@@ -1,216 +1,213 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2011 Clipperz Srl
4 4
5This file is part of Clipperz's Javascript Crypto Library. 5This file is part of Clipperz Community Edition.
6Javascript Crypto Library provides web developers with an extensive 6Clipperz Community Edition is an online password manager.
7and efficient set of cryptographic functions. The library aims to
8obtain maximum execution speed while preserving modularity and
9reusability.
10For further information about its features and functionalities please 7For further information about its features and functionalities please
11refer to http://www.clipperz.com 8refer to http://www.clipperz.com.
12 9
13* Javascript Crypto Library is free software: you can redistribute 10* Clipperz Community Edition is free software: you can redistribute
14 it and/or modify it under the terms of the GNU Affero General Public 11 it and/or modify it under the terms of the GNU Affero General Public
15 License as published by the Free Software Foundation, either version 12 License as published by the Free Software Foundation, either version
16 3 of the License, or (at your option) any later version. 13 3 of the License, or (at your option) any later version.
17 14
18* Javascript Crypto Library is distributed in the hope that it will 15* Clipperz Community Edition is distributed in the hope that it will
19 be useful, but WITHOUT ANY WARRANTY; without even the implied 16 be useful, but WITHOUT ANY WARRANTY; without even the implied
20 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU Affero General Public License for more details. 18 See the GNU Affero General Public License for more details.
22 19
23* You should have received a copy of the GNU Affero General Public 20* You should have received a copy of the GNU Affero General Public
24 License along with Javascript Crypto Library. If not, see 21 License along with Clipperz Community Edition. If not, see
25 <http://www.gnu.org/licenses/>. 22 <http://www.gnu.org/licenses/>.
26 23
27*/ 24*/
28 25
29if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
30 27
31 28
32Clipperz.CSVProcessor = function(args) { 29Clipperz.CSVProcessor = function(args) {
33 args = args || {}; 30 args = args || {};
34 31
35 // this._status = undefined; 32 // this._status = undefined;
36 // this._error_input= undefined; 33 // this._error_input= undefined;
37 // this._string = undefined; 34 // this._string = undefined;
38 // this._fields = undefined; 35 // this._fields = undefined;
39 36
40 this._quoteChar = args['quoteChar'] ||"\042"; 37 this._quoteChar = args['quoteChar'] ||"\042";
41 this._eol = args['eol'] ||""; 38 this._eol = args['eol'] ||"";
42 this._escapeChar = args['escapeChar'] ||"\042"; 39 this._escapeChar = args['escapeChar'] ||"\042";
43 this._separatorChar = args['separatorChar'] ||","; 40 this._separatorChar = args['separatorChar'] ||",";
44 this._binary = args['binary'] ||false; 41 this._binary = args['binary'] ||false;
45 this._alwaysQuote = args['alwaysQuote'] ||false; 42 this._alwaysQuote = args['alwaysQuote'] ||false;
46 43
47 return this; 44 return this;
48} 45}
49 46
50//============================================================================= 47//=============================================================================
51 48
52Clipperz.CSVProcessor.prototype = MochiKit.Base.update(null, { 49Clipperz.CSVProcessor.prototype = MochiKit.Base.update(null, {
53 50
54 //------------------------------------------------------------------------- 51 //-------------------------------------------------------------------------
55 52
56 'quoteChar': function() { 53 'quoteChar': function() {
57 return this._quoteChar; 54 return this._quoteChar;
58 }, 55 },
59 56
60 //------------------------------------------------------------------------- 57 //-------------------------------------------------------------------------
61 58
62 'eol': function() { 59 'eol': function() {
63 return this._eol; 60 return this._eol;
64 }, 61 },
65 62
66 //------------------------------------------------------------------------- 63 //-------------------------------------------------------------------------
67 64
68 'escapeChar': function() { 65 'escapeChar': function() {
69 return this._escapeChar; 66 return this._escapeChar;
70 }, 67 },
71 68
72 //------------------------------------------------------------------------- 69 //-------------------------------------------------------------------------
73 70
74 'separatorChar': function() { 71 'separatorChar': function() {
75 return this._separatorChar; 72 return this._separatorChar;
76 }, 73 },
77 74
78 'setSeparatorChar': function(aValue) { 75 'setSeparatorChar': function(aValue) {
79 this._separatorChar = aValue; 76 this._separatorChar = aValue;
80 }, 77 },
81 78
82 //------------------------------------------------------------------------- 79 //-------------------------------------------------------------------------
83 80
84 'binary': function() { 81 'binary': function() {
85 return this._binary; 82 return this._binary;
86 }, 83 },
87 84
88 //------------------------------------------------------------------------- 85 //-------------------------------------------------------------------------
89 86
90 'alwaysQuote': function() { 87 'alwaysQuote': function() {
91 return this._alwaysQuote; 88 return this._alwaysQuote;
92 }, 89 },
93 90
94 //------------------------------------------------------------------------- 91 //-------------------------------------------------------------------------
95/* 92/*
96 'parse': function(aValue) { 93 'parse': function(aValue) {
97 var result; 94 var result;
98 var lines; 95 var lines;
99 var parameter; 96 var parameter;
100 97
101//MochiKit.Logging.logDebug(">>> CSVProcessor.parse"); 98//MochiKit.Logging.logDebug(">>> CSVProcessor.parse");
102 result = []; 99 result = [];
103 100
104 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n* /g, "").replace(/\n$/g, "");; 101 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n* /g, "").replace(/\n$/g, "");;
105 parameter = { 102 parameter = {
106 line: lines 103 line: lines
107 } 104 }
108 105
109 do { 106 do {
110 var fields; 107 var fields;
111 108
112 fields = this.parseLine(parameter); 109 fields = this.parseLine(parameter);
113 110
114 if (fields != null) { 111 if (fields != null) {
115 result.push(fields); 112 result.push(fields);
116 } 113 }
117 114
118 parameter.line = parameter.line.replace(/^\n* /g, "").replace(/\n$/g, ""); 115 parameter.line = parameter.line.replace(/^\n* /g, "").replace(/\n$/g, "");
119 116
120//MochiKit.Logging.logDebug("line: '" + parameter.line + "'"); 117//MochiKit.Logging.logDebug("line: '" + parameter.line + "'");
121 } while (parameter.line != ""); 118 } while (parameter.line != "");
122//MochiKit.Logging.logDebug("--- CSVProcessor.parse - result: " + Clipperz.Base.serializeJSON(result)); 119//MochiKit.Logging.logDebug("--- CSVProcessor.parse - result: " + Clipperz.Base.serializeJSON(result));
123//MochiKit.Logging.logDebug("<<< CSVProcessor.parse"); 120//MochiKit.Logging.logDebug("<<< CSVProcessor.parse");
124 121
125 return result; 122 return result;
126 }, 123 },
127*/ 124*/
128 //------------------------------------------------------------------------- 125 //-------------------------------------------------------------------------
129 126
130 'deferredParse_core': function(aContext) { 127 'deferredParse_core': function(aContext) {
131 var deferredResult; 128 var deferredResult;
132 129
133 if (aContext.line == "") { 130 if (aContext.line == "") {
134 deferredResult = MochiKit.Async.succeed(aContext.result); 131 deferredResult = MochiKit.Async.succeed(aContext.result);
135 } else { 132 } else {
136 var fields; 133 var fields;
137 134
138 fields = this.parseLine(aContext); 135 fields = this.parseLine(aContext);
139 if (fields != null) { 136 if (fields != null) {
140 aContext.result.push(fields); 137 aContext.result.push(fields);
141 } 138 }
142 139
143 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, ""); 140 aContext.line = aContext.line.replace(/^\n*/g, "").replace(/\n$/g, "");
144 141
145 deferredResult = new Clipperz.Async.Deferred("CVSProcessor.deferredParse_core"); 142 deferredResult = new Clipperz.Async.Deferred("CVSProcessor.deferredParse_core");
146 // deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)}); 143 // deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)});
147 deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)}); 144 deferredResult.addCallbackPass(MochiKit.Signal.signal, this, 'importProcessorProgressUpdate', {status:'processing', size:aContext.size, progress:(aContext.size - aContext.line.length)});
148 deferredResult.addCallback(MochiKit.Async.wait, 0.2); 145 deferredResult.addCallback(MochiKit.Async.wait, 0.2);
149 deferredResult.addMethod(this, 'deferredParse_core') 146 deferredResult.addMethod(this, 'deferredParse_core')
150 deferredResult.callback(aContext); 147 deferredResult.callback(aContext);
151 } 148 }
152 149
153 return deferredResult; 150 return deferredResult;
154 }, 151 },
155 152
156 //......................................................................... 153 //.........................................................................
157 154
158 'deferredParse': function(aValue) { 155 'deferredParse': function(aValue) {
159 var deferredResult; 156 var deferredResult;
160 var lines; 157 var lines;
161 var context; 158 var context;
162 159
163 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n*/g, "").replace(/\n$/g, ""); 160 lines = aValue.replace(/\r?\n/g, "\n").replace(/^\n*/g, "").replace(/\n$/g, "");
164 161
165 context = { 162 context = {
166 line: lines, 163 line: lines,
167 size: lines.length, 164 size: lines.length,
168 result: [] 165 result: []
169 } 166 }
170 167
171 deferredResult = new Clipperz.Async.Deferred("CSVProcessor.deferredParse"); 168 deferredResult = new Clipperz.Async.Deferred("CSVProcessor.deferredParse");
172 deferredResult.addMethod(this, 'deferredParse_core'); 169 deferredResult.addMethod(this, 'deferredParse_core');
173 deferredResult.callback(context); 170 deferredResult.callback(context);
174 171
175 return deferredResult; 172 return deferredResult;
176 }, 173 },
177 174
178 //------------------------------------------------------------------------- 175 //-------------------------------------------------------------------------
179 176
180 'parseLine': function(aParameter) { 177 'parseLine': function(aParameter) {
181 var result; 178 var result;
182 var palatable; 179 var palatable;
183 var line; 180 var line;
184 var processedField; 181 var processedField;
185 182
186 result = []; 183 result = [];
187 184
188 do { 185 do {
189 processedField = this.parseField(aParameter); 186 processedField = this.parseField(aParameter);
190 if (processedField != null) { 187 if (processedField != null) {
191 result.push(processedField) 188 result.push(processedField)
192 }; 189 };
193 } while (processedField != null); 190 } while (processedField != null);
194 191
195 return result; 192 return result;
196 }, 193 },
197 194
198 //------------------------------------------------------------------------- 195 //-------------------------------------------------------------------------
199 196
200 'parseField': function(aParameter) { 197 'parseField': function(aParameter) {
201 var result; 198 var result;
202 199
203 var inQuotes; 200 var inQuotes;
204 var validRegExp; 201 var validRegExp;
205 var singleQuoteBeginRegexp; 202 var singleQuoteBeginRegexp;
206 var escapedQuoteBeginRegexp; 203 var escapedQuoteBeginRegexp;
207 var singleQuoteCommaEndRegexp; 204 var singleQuoteCommaEndRegexp;
208 var singleQuoteNewLineEndRegexp; 205 var singleQuoteNewLineEndRegexp;
209 var commaBeginRegexp; 206 var commaBeginRegexp;
210 var newlineRegexp; 207 var newlineRegexp;
211 208
212 209
213 singleQuoteBeginRegexp = new RegExp("^" + '\\' + this.quoteChar()); 210 singleQuoteBeginRegexp = new RegExp("^" + '\\' + this.quoteChar());
214 escapedQuoteBeginRegexp = new RegExp("^" + '\\' + this.escapeChar() + '\\' + this.quoteChar()); 211 escapedQuoteBeginRegexp = new RegExp("^" + '\\' + this.escapeChar() + '\\' + this.quoteChar());
215 singleQuoteCommaEndRegexp= new RegExp("^" + '\\' + this.quoteChar() + '\\' + this.separatorChar()); 212 singleQuoteCommaEndRegexp= new RegExp("^" + '\\' + this.quoteChar() + '\\' + this.separatorChar());
216 singleQuoteNewLineEndRegexp= new RegExp("^" + '\\' + this.quoteChar() + "\n"); 213 singleQuoteNewLineEndRegexp= new RegExp("^" + '\\' + this.quoteChar() + "\n");