summaryrefslogtreecommitdiff
path: root/sc/inc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2011-09-13 21:59:36 -0400
committerKohei Yoshida <kohei.yoshida@suse.com>2011-09-13 22:00:34 -0400
commit32ca2cb020b35b85ff3ddd5fe5bac9af9f1eebcc (patch)
treee0eb5ad7885bc9a563d6a8a70c0da14ac537c2ce /sc/inc
parent689bde97d1a249c679a16f084043256868cd4978 (diff)
Updated csv_parser from orcus.
Diffstat (limited to 'sc/inc')
-rw-r--r--sc/inc/orcus/csv_parser.hpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/sc/inc/orcus/csv_parser.hpp b/sc/inc/orcus/csv_parser.hpp
index 828a8b6cd035..c5adc175c410 100644
--- a/sc/inc/orcus/csv_parser.hpp
+++ b/sc/inc/orcus/csv_parser.hpp
@@ -86,6 +86,8 @@ private:
void cell();
void quoted_cell();
+ void skip_blanks();
+
/**
* Push cell value to the handler.
*/
@@ -179,6 +181,7 @@ void csv_parser<_Handler>::row()
assert(is_delim(c));
next();
+ skip_blanks();
}
}
@@ -228,8 +231,9 @@ void csv_parser<_Handler>::quoted_cell()
assert(is_text_qualifier(c));
next(); // Skip the closing quote.
+ skip_blanks();
c = cur_char();
- if (!is_delim(c))
+ if (!is_delim(c) && c != '\n')
{
std::ostringstream os;
os << "A quoted cell value must be immediately followed by a delimiter. ";
@@ -244,6 +248,16 @@ void csv_parser<_Handler>::quoted_cell()
}
template<typename _Handler>
+void csv_parser<_Handler>::skip_blanks()
+{
+ for (; has_char(); next())
+ {
+ if (!is_blank(*mp_char))
+ break;
+ }
+}
+
+template<typename _Handler>
void csv_parser<_Handler>::push_cell_value(const char* p, size_t n)
{
size_t len = n;