From: Ben Pfaff Date: Wed, 24 Feb 2016 06:22:04 +0000 (-0800) Subject: Document a lot of setCellProperties. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=d756f0a8abc31ab634f9aff532021e3eb88374ab Document a lot of setCellProperties. --- diff --git a/detail-xml b/detail-xml index 9fca90acf4..cae148b688 100644 --- a/detail-xml +++ b/detail-xml @@ -88,8 +88,8 @@ paragraph := [id? hangingIndent] setCellProperties := [id? applyToConverse] - setMetadata setStyle* setFormat+ union? -setMetadata := [id? key target value] + setMetaData setStyle* setFormat+ union? +setMetaData := [id? key target value] setStyle := [id? style target] setFormat := [id? target reset?] diff --git a/parse-detail-xml b/parse-detail-xml index f0b175e7ab..0eb3555a74 100755 --- a/parse-detail-xml +++ b/parse-detail-xml @@ -5,5 +5,5 @@ legacyXML=`ls -1 unzipped/*/*.xml |grep -vE 'outputViewer|stats|chart|model'` if test -n "$1"; then for d in $legacyXML; do ./parse-xml $d $1 - done | sort | uniq + done fi diff --git a/parse-xml.c b/parse-xml.c index 9cf6694f91..70a7a89928 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -159,21 +159,44 @@ print_attribute (xmlNode *node, const char *attr) } } +static void +print_xml (xmlDoc *doc, xmlNode *node) +{ + xmlBuffer *buf = xmlBufferCreate(); + xmlNodeDump (buf, doc, node, 0, 1); + xmlBufferDump (stdout, buf); + xmlBufferFree (buf); + putchar ('\n'); +} + static void print_element (xmlDoc *doc, xmlNode *node, const char *element) { for (; node; node = node->next) { if (node->name && !strcmp(element, (char *) node->name)) + print_xml (doc, node); + + print_element (doc, node->children, element); + } +} + +static void +print_id (xmlDoc *doc, xmlNode *node, const char *id) +{ + for (; node; node = node->next) + { + if (node->type == XML_ELEMENT_NODE) { - xmlBuffer *buf = xmlBufferCreate(); - xmlNodeDump (buf, doc, node, 0, 1); - xmlBufferDump (stdout, buf); - xmlBufferFree (buf); - putchar ('\n'); + const char *node_id = (char *) xmlGetProp (node, (xmlChar *) "id"); + if (node_id && !strcmp (node_id, id)) + { + print_xml (doc, node); + break; + } } - print_element (doc, node->children, element); + print_id (doc, node->children, id); } } @@ -259,6 +282,8 @@ main (int argc, char **argv) print_element (doc, root, argv[2] + 8); else if (!strncmp(argv[2], "attr:", 5)) print_attribute (root, argv[2] + 5); + else if (!strncmp(argv[2], "id:", 3)) + print_id (doc, root, argv[2] + 3); else if (!strcmp(argv[2], "labels")) print_labels (root); else diff --git a/spv-file-format.texi b/spv-file-format.texi index dd4b0b8f5a..1eb9a3ef52 100644 --- a/spv-file-format.texi +++ b/spv-file-format.texi @@ -1267,6 +1267,7 @@ elements are assigned @code{id} attributes that are never referenced. * SPV Detail location Element:: * SPV Detail coordinates Element:: * SPV Detail faceting Element:: +* SPV Detail facetLayout Element:: @end menu @node SPV Detail visualization Element @@ -1752,6 +1753,7 @@ When present, this is always @code{nest}. Parent: @code{graph} @* Contents: @code{tableLayout} @code{facetLevel}@math{+} @code{setCellProperties}* + @subsubheading The @code{tableLayout} Element Parent: @code{facetLayout} @* @@ -1775,7 +1777,7 @@ Parent: @code{facetLayout} Contents: @code{axis} Each @code{facetLevel} describes a @code{variableReference} or -@code{layer}, and thus a table has one @code{facetLevel} element for +@code{layer}, and a table has one @code{facetLevel} element for each such element. For example, an SPV detail member that contains four @code{variableReference} elements and two @code{layer} elements will contain six @code{facetLevel} elements. @@ -1801,3 +1803,79 @@ and in a member with four @code{variableReference} elements, a @defvr {Required} gap Always observed as @code{0pt}. @end defvr + +@subsubheading The @code{setCellProperties} Element + +Parent: @code{facetLayout} @* +Contents: @code{setMetaData} @code{setStyle}* @code{setFormat}@math{+} @code{union}? + +This element sets style properties of cells designated by the +@code{target} attribute of its child elements. + +@defvr {Optional} applyToConverse +If present, always @code{true}. This appears to invert the meaning of +the @code{target} of sub-elements: the selected cells are the ones +@emph{not} designated by @code{target}. +@end defvr + +@subsubheading The @code{setMetaData} Element + +Parent: @code{setCellProperties} @* +Contents: empty + +It's really not clear what visible effect this element has, if any. + +@defvr {Required} target +The @code{id} of an element whose metadata is to be set. In the +corpus, this is always @code{graph}, the @code{id} used for the +@code{graph} element. +@end defvr + +@defvr {Required} key +@defvrx {Required} value +A key-value pair to set for the target. + +In the corpus, @code{key} is @code{cellPropId} or, rarely, +@code{diagProps}, and @code{value} is always the @code{id} of the +parent @code{setCellProperties}. +@end defvr + +@subsubheading The @code{setStyle} Element + +Parent: @code{setCellProperties} @* +Contents: empty + +This element associates a style with the target. + +@defvr {Required} target +The @code{id} of an element whose style is to be set. In the corpus, +this is always the @code{id} of an @code{interval}, @code{labeling}, +or, rarely, @code{graph} element. +@end defvr + +@defvr {Required} style +The @code{id} of a @code{style} element that identifies the style to +set on the target. +@end defvr + +@subsubheading The @code{setFormat} Element + +@format +Parent: @code{setCellProperties} +Contents: + @code{format} + @math{|} @code{numberFormat} + @math{|} @code{stringFormat}@math{+} + @math{|} @code{dateTimeFormat} +@end format + +This element sets the format of the target, ``format'' in this case +meaning an the SPSS print format for a variable. + +The details of this element vary depending on the schema version, as +declared in the root @code{visualization} element's @code{version} +attribute (@pxref{SPV Detail visualization Element}). In version 2.5 +and earlier, @code{setFormat} contains one of a number of child +elements that correspond to the different varieties of print formats. +In version 2.7 and later, @code{setFormat} instead always contains a +@code{format} element.