From 6f73134da36459f90d7d1b95dd4007f97fc71575 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 22 Feb 2019 18:24:01 -0800 Subject: [PATCH] SYSFILE INFO: Display documents too. The documentation says that SYSFILE INFO displays the documents but it didn't actually do it. Reported by Nolan Void . --- src/language/dictionary/sys-file-info.c | 34 +++++++++++++++------- tests/language/dictionary/sys-file-info.at | 6 +++- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index 80fa903b06..10ee6c8073 100644 --- a/src/language/dictionary/sys-file-info.c +++ b/src/language/dictionary/sys-file-info.c @@ -89,6 +89,8 @@ static void report_encodings (const struct file_handle *, struct pool *, char **titles, bool *ids, char **strings, size_t n_strings); +static char *get_documents_as_string (const struct dictionary *); + static void add_row (struct pivot_table *table, const char *attribute, struct pivot_value *value) @@ -239,6 +241,10 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) add_row (table, N_("Encoding"), pivot_value_new_user_text (dict_get_encoding (d), -1)); + if (dict_get_document_line_cnt (d) > 0) + add_row (table, N_("Documents"), + pivot_value_new_user_text_nocopy (get_documents_as_string (d))); + pivot_table_submit (table); size_t n_vars = dict_get_var_cnt (d); @@ -398,6 +404,20 @@ display_macros (void) msg (SW, _("Macros not supported.")); } +static char * +get_documents_as_string (const struct dictionary *dict) +{ + const struct string_array *documents = dict_get_documents (dict); + struct string s = DS_EMPTY_INITIALIZER; + for (size_t i = 0; i < documents->n; i++) + { + if (i) + ds_put_byte (&s, '\n'); + ds_put_cstr (&s, documents->strings[i]); + } + return ds_steal_cstr (&s); +} + static void display_documents (const struct dictionary *dict) { @@ -406,20 +426,12 @@ display_documents (const struct dictionary *dict) table, PIVOT_AXIS_COLUMN, N_("Documents"), N_("Document")); d->hide_all_labels = true; - const struct string_array *documents = dict_get_documents (dict); - if (!documents->n) + if (!dict_get_documents (dict)->n) pivot_table_put1 (table, 0, pivot_value_new_text (N_("(none)"))); else { - struct string s = DS_EMPTY_INITIALIZER; - for (size_t i = 0; i < documents->n; i++) - { - if (i) - ds_put_byte (&s, '\n'); - ds_put_cstr (&s, documents->strings[i]); - } - pivot_table_put1 (table, 0, - pivot_value_new_user_text_nocopy (ds_steal_cstr (&s))); + char *docs = get_documents_as_string (dict); + pivot_table_put1 (table, 0, pivot_value_new_user_text_nocopy (docs)); } pivot_table_submit (table); diff --git a/tests/language/dictionary/sys-file-info.at b/tests/language/dictionary/sys-file-info.at index 11f5d4e9f8..50bf224b63 100644 --- a/tests/language/dictionary/sys-file-info.at +++ b/tests/language/dictionary/sys-file-info.at @@ -24,6 +24,7 @@ BEGIN DATA 2 two 3 three END DATA. +DOCUMENT A document. SAVE OUTFILE='pro.sav'. sysfile info file='pro.sav'. @@ -34,7 +35,8 @@ AT_CHECK( -e '/^Endian,/d' \ -e '/^Integer Format,/d' \ -e '/^Real Format,/d' \ - -e '/^Encoding,/d' pspp.csv], + -e '/^Encoding,/d' \ + -e 's/(Entered.*)/(Entered )/' pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format @@ -49,6 +51,8 @@ Cases,3 Type,SPSS System File Weight,Not weighted Compression,SAV +Documents,"DOCUMENT A document. + (Entered )" Table: Variables Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values -- 2.30.2