[Python-checkins] python/nondist/sandbox/csv _csv.c,1.15,1.16
davecole@users.sourceforge.net
davecole@users.sourceforge.net
Wed, 05 Feb 2003 02:30:09 -0800
Update of /cvsroot/python/python/nondist/sandbox/csv
In directory sc8-pr-cvs1:/tmp/cvs-serv30447
Modified Files:
_csv.c
Log Message:
Replace the cut & paste QUOTE_* code in module init with a loop.
Removed the have_quotechar attribute and use quoting == QUOTE_NONE instead.
Index: _csv.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/_csv.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** _csv.c 5 Feb 2003 03:20:51 -0000 1.15
--- _csv.c 5 Feb 2003 10:30:06 -0000 1.16
***************
*** 50,58 ****
typedef struct {
PyObject_HEAD
int doublequote; /* is " represented by ""? */
char delimiter; /* field separator */
- int have_quotechar; /* is a quotechar defined */
char quotechar; /* quote character */
int have_escapechar; /* is an escapechar defined */
--- 50,70 ----
typedef struct {
+ QuoteStyle style;
+ char *name;
+ } StyleDesc;
+
+ static StyleDesc quote_styles[] = {
+ { QUOTE_MINIMAL, "QUOTE_MINIMAL" },
+ { QUOTE_ALL, "QUOTE_ALL" },
+ { QUOTE_NONNUMERIC, "QUOTE_NONNUMERIC" },
+ { QUOTE_NONE, "QUOTE_NONE" },
+ { 0 }
+ };
+
+ typedef struct {
PyObject_HEAD
int doublequote; /* is " represented by ""? */
char delimiter; /* field separator */
char quotechar; /* quote character */
int have_escapechar; /* is an escapechar defined */
***************
*** 262,266 ****
case QUOTE_IN_QUOTED_FIELD:
/* doublequote - seen a quote in an quoted field */
! if (self->have_quotechar && c == self->quotechar) {
/* save "" as " */
parse_add_char(self, c);
--- 274,278 ----
case QUOTE_IN_QUOTED_FIELD:
/* doublequote - seen a quote in an quoted field */
! if (self->quoting != QUOTE_NONE && c == self->quotechar) {
/* save "" as " */
parse_add_char(self, c);
***************
*** 447,451 ****
* quote.
*/
! if (self->have_quotechar
&& c == self->quotechar && self->doublequote) {
if (copy_phase)
--- 459,463 ----
* quote.
*/
! if (self->quoting != QUOTE_NONE
&& c == self->quotechar && self->doublequote) {
if (copy_phase)
***************
*** 464,469 ****
&& (c == self->delimiter || c == self->escapechar
|| c == '\n' || c == '\r')) {
! if (self->have_quotechar
! && self->quoting != QUOTE_NONE)
*quoted = 1;
else if (self->escapechar) {
--- 476,480 ----
&& (c == self->delimiter || c == self->escapechar
|| c == '\n' || c == '\r')) {
! if (self->quoting != QUOTE_NONE)
*quoted = 1;
else if (self->escapechar) {
***************
*** 486,491 ****
/* If field is empty check if it needs to be quoted.
*/
! if (i == 0 && quote_empty && self->have_quotechar)
! *quoted = 1;
/* Handle final quote character on field.
--- 497,507 ----
/* If field is empty check if it needs to be quoted.
*/
! if (i == 0 && quote_empty) {
! if (self->quoting == QUOTE_NONE) {
! raise_exception("single empty field record must be quoted");
! return -1;
! } else
! *quoted = 1;
! }
/* Handle final quote character on field.
***************
*** 679,684 ****
PyObject *rv;
! if ((strcmp(name, "quotechar") == 0 && !self->have_quotechar)
! || (strcmp(name, "escapechar") == 0 && !self->have_escapechar)) {
Py_INCREF(Py_None);
return Py_None;
--- 695,699 ----
PyObject *rv;
! if (strcmp(name, "escapechar") == 0 && !self->have_escapechar) {
Py_INCREF(Py_None);
return Py_None;
***************
*** 723,730 ****
return -1;
}
! if (strcmp(name, "quotechar") == 0)
! return _set_char_attr(&self->quotechar,
! &self->have_quotechar, v);
! else if (strcmp(name, "escapechar") == 0)
return _set_char_attr(&self->escapechar,
&self->have_escapechar, v);
--- 738,742 ----
return -1;
}
! if (strcmp(name, "escapechar") == 0)
return _set_char_attr(&self->escapechar,
&self->have_escapechar, v);
***************
*** 736,745 ****
return -1;
}
- if (!self->have_quotechar && n != QUOTE_NONE) {
- PyErr_BadArgument();
- return -1;
- }
- if (n == QUOTE_NONE)
- self->have_quotechar = 0;
self->quoting = n;
return 0;
--- 748,751 ----
***************
*** 834,838 ****
NULL
};
! PyObject *quotechar, *escapechar;
ParserObj *self = PyObject_NEW(ParserObj, &Parser_Type);
--- 840,844 ----
NULL
};
! PyObject *escapechar;
ParserObj *self = PyObject_NEW(ParserObj, &Parser_Type);
***************
*** 841,845 ****
self->quotechar = '"';
- self->have_quotechar = 1;
self->delimiter = ',';
self->escapechar = '\0';
--- 847,850 ----
***************
*** 869,882 ****
self->num_fields = 0;
! quotechar = escapechar = NULL;
! if (PyArg_ParseTupleAndKeywords(args, keyword_args, "|OcOiSiiii",
keywords,
! "echar, &self->delimiter,
&escapechar, &self->skipinitialspace,
&self->lineterminator, &self->quoting,
&self->doublequote,
&self->autoclear, &self->strict)
- && !_set_char_attr(&self->quotechar,
- &self->have_quotechar, quotechar)
&& !_set_char_attr(&self->escapechar,
&self->have_escapechar, escapechar)) {
--- 874,885 ----
self->num_fields = 0;
! escapechar = NULL;
! if (PyArg_ParseTupleAndKeywords(args, keyword_args, "|ccOiSiiii",
keywords,
! &self->quotechar, &self->delimiter,
&escapechar, &self->skipinitialspace,
&self->lineterminator, &self->quoting,
&self->doublequote,
&self->autoclear, &self->strict)
&& !_set_char_attr(&self->escapechar,
&self->have_escapechar, escapechar)) {
***************
*** 889,899 ****
if (self->quoting < 0 || self->quoting > QUOTE_NONE)
PyErr_SetString(PyExc_ValueError, "bad quoting value");
! else {
! if (self->quoting == QUOTE_NONE)
! self->have_quotechar = 0;
! else if (!self->have_quotechar)
! self->quoting = QUOTE_NONE;
return (PyObject*)self;
- }
}
--- 892,897 ----
if (self->quoting < 0 || self->quoting > QUOTE_NONE)
PyErr_SetString(PyExc_ValueError, "bad quoting value");
! else
return (PyObject*)self;
}
***************
*** 948,951 ****
--- 946,950 ----
PyObject *v;
int res;
+ StyleDesc *style;
if (PyType_Ready(&Parser_Type) < 0)
***************
*** 967,1001 ****
return;
! v = PyInt_FromLong(QUOTE_MINIMAL);
! if (v == NULL)
! return;
! res = PyDict_SetItemString(dict, "QUOTE_MINIMAL", v);
! Py_DECREF(v);
! if (res < 0)
! return;
!
! v = PyInt_FromLong(QUOTE_ALL);
! if (v == NULL)
! return;
! res = PyDict_SetItemString(dict, "QUOTE_ALL", v);
! Py_DECREF(v);
! if (res < 0)
! return;
!
! v = PyInt_FromLong(QUOTE_NONNUMERIC);
! if (v == NULL)
! return;
! res = PyDict_SetItemString(dict, "QUOTE_NONNUMERIC", v);
! Py_DECREF(v);
! if (res < 0)
! return;
!
! v = PyInt_FromLong(QUOTE_NONE);
! if (v == NULL)
! return;
! res = PyDict_SetItemString(dict, "QUOTE_NONE", v);
! Py_DECREF(v);
! if (res < 0)
! return;
/* Add the CSV exception object to the module. */
--- 966,979 ----
return;
! /* Add quote styles into disctionary */
! for (style = quote_styles; style->name; style++) {
! v = PyInt_FromLong(style->style);
! if (v == NULL)
! return;
! res = PyDict_SetItemString(dict, style->name, v);
! Py_DECREF(v);
! if (res < 0)
! return;
! }
/* Add the CSV exception object to the module. */