+static struct data_parser *
+make_data_parser (PsppireDelimitedText *tf)
+{
+ struct data_parser *parser = data_parser_create ();
+ data_parser_set_type (parser, DP_DELIMITED);
+ data_parser_set_span (parser, false);
+ data_parser_set_quotes (parser, ss_empty ());
+ data_parser_set_quote_escape (parser, true);
+ data_parser_set_empty_line_has_field (parser, true);
+
+ bool space = false;
+ struct string hard_delimiters = DS_EMPTY_INITIALIZER;
+ GSList *del;
+ for (del = tf->delimiters; del; del = g_slist_next (del))
+ {
+ gunichar c = GPOINTER_TO_INT (del->data);
+ if (c == ' ')
+ space = true;
+ else
+ ds_put_unichar (&hard_delimiters, c);
+ }
+ data_parser_set_soft_delimiters (parser, ss_cstr (space ? " " : ""));
+ data_parser_set_hard_delimiters (parser, ds_ss (&hard_delimiters));
+ ds_destroy (&hard_delimiters);
+
+ if (tf->quote)
+ {
+ struct string quote = DS_EMPTY_INITIALIZER;
+ ds_put_unichar ("e, tf->quote);
+ data_parser_set_quotes (parser, ds_ss ("e));
+ ds_destroy ("e);
+ }
+ return parser;
+}
+