[Python-checkins] python/nondist/sandbox/csv _csv.c,1.15,1.16

davecole@users.sourceforge.net davecole@users.sourceforge.net
2003年2月05日 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,
! 					&quotechar, &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. */

AltStyle によって変換されたページ (->オリジナル) /