From 8feaf6bce3fccaebf3bcdb29628ff8b9608ccffe Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 16 Jul 2017 11:21:02 -0700 Subject: [PATCH] spv-file-format: Improve description of structure member format. --- doc/dev/spv-file-format.texi | 92 ++++++-- doc/dev/spv-structure.eps | 420 ++++++++++++++++++++++------------- doc/dev/spv-structure.gv | 20 +- doc/dev/spv-structure.pdf | Bin 16814 -> 17342 bytes 4 files changed, 349 insertions(+), 183 deletions(-) diff --git a/doc/dev/spv-file-format.texi b/doc/dev/spv-file-format.texi index c325a5dd4d..38059ba889 100644 --- a/doc/dev/spv-file-format.texi +++ b/doc/dev/spv-file-format.texi @@ -80,13 +80,18 @@ their exact names do not matter to readers as long as they are unique. @node SPV Structure Member Format @section Structure Member Format +A structure member lays out the high-level structure for a group of +output items such as heading, tables, and charts. Structure members +do not include the details of tables and charts but instead refer to +them by their member names. + Structure members' XML files claim conformance with a collection of XML Schemas. These schemas are distributed, under a nonfree license, with SPSS binaries. Fortunately, the schemas are not necessary to -understand the structure members. To a degree, the schemas can even +understand the structure members. The schemas can even be deceptive because they document elements and attributes that are not in the corpus and do not document elements and attributes that are -commonly found there. +commonly found in the corpus. Structure members use a different XML namespace for each schema, but these namespaces are not entirely consistent. In some SPV files, for @@ -98,7 +103,26 @@ not resolvable to obtain the schemas themselves. One may ignore all of the above in interpreting a structure member. The actual XML has a simple and straightforward form that does not -require a reader to take schemas or namespaces into account. +require a reader to take schemas or namespaces into account. A +structure member's root is @code{heading} element, which contains +@code{heading} or @code{container} elements (or a mix), forming a +tree. In turn, @code{container} holds a single @code{text} or +@code{table} element. + +@ifnottex +For a diagram illustrating the hierarchy of elements within an SPV +structure member, please refer to a PDF version of the manual. +@end ifnottex + +@iftex +The following diagram shows the hierarchy within an SPV structure +member more precisely. Oval nodes are elements and and +are plain text and CDATA within elements. Edges point from parent to +child. Unlabeled edges indicate that the child appears exactly once; +edges labeled with *, zero or more times; edges labeled with ?, zero +or one times. +@center @image{dev/spv-structure, 5in} +@end iftex The elements found in structure members are documented below. For each element, we note the possible parent elements and the element's @@ -128,19 +152,45 @@ A choice between @var{a} and @var{b}. Zero or more @var{x}. @end table -@ifnottex -For a diagram illustrating the hierarchy of elements within an SPV -structure member, please refer to a PDF version of the manual. -@end ifnottex +The following example shows the contents of a typical structure member +for a @cmd{DESCRIPTIVES} procedure. A real structure member is not +indented. This example also omits most attributes, all XML namespace +information, and the CSS from the embedded HTML: -@iftex -The following diagram shows the hierarchy of elements within an SPV -structure member. Edges point from parent to child elements. -Unlabeled edges indicate that the child appears exactly once; edges -labeled with *, zero or more times; edges labeled with ?, zero or one -times. -@center @image{dev/spv-structure, 5in} -@end iftex +@example + + + + + + + + + +
Descriptives]]> + +
+
+ + + + + 00000000001_lightNotesData.bin + +
+
+ + + + + 00000000002_lightTableData.bin + +
+
+
+
+@end example @menu * SPV Structure heading Element:: @@ -166,7 +216,9 @@ Contents: @code{pageSetup}? @code{label} (@code{container} @math{|} @code{headin The root of a structure member is a @code{heading}, which represents a section of output beginning with a title (the @code{label}) and ordinarily followed by content containers or further nested -(sub)-sections of output. +(sub)-sections of output. Unlike heading elements in HTML and other +common document formats, which precede the content that they head, +@code{heading} contains the elements that appear below the heading. The document root heading, only, may also contain a @code{pageSetup} element. @@ -250,7 +302,7 @@ often very generic, especially within a @code{container}, e.g.@: according to the output language, e.g.@: in Italian a frequency table procedure is labeled ``Frequenze''. -The corpus contains one example of an empty label, one that contains +The corpus contains a few examples of empty labels, ones that contain no text. This element has no attributes. @@ -315,7 +367,7 @@ Parent: @code{text} @* Contents: CDATA The CDATA contains an HTML document. In some cases, the document -starts with @code{} and ends with @code{} and ends with @code{}; in others the @code{html} element is implied. Generally the HTML includes a @code{head} element with a CSS stylesheet. The HTML body often begins with @code{
}. The actual content ranges from trivial to simple: @@ -440,7 +492,7 @@ This element has no attributes. @node SPV Structure @code{text} Element (Inside @code{pageParagraph}) @subsection The @code{text} Element (Inside @code{pageParagraph}) -Parent: @code{pageParagraph} +Parent: @code{pageParagraph} @* Contents: CDATA? This @code{text} element is nested inside a @code{pageParagraph}. There @@ -451,7 +503,7 @@ The element is either empty, or contains CDATA that holds almost-XHTML text: in the corpus, either an @code{html} or @code{p} element. It is @emph{almost}-XHTML because the @code{html} element designates the default namespace as -@code{http://xml.spss.com/spss/viewer/viewer-tree} instead of an XHTML +@indicateurl{http://xml.spss.com/spss/viewer/viewer-tree} instead of an XHTML namespace, and because the CDATA can contain substitution variables: @code{&[Page]} for the page number and @code{&[PageTitle]} for the page title. diff --git a/doc/dev/spv-structure.eps b/doc/dev/spv-structure.eps index af2e21e0c4..247d67a26b 100644 --- a/doc/dev/spv-structure.eps +++ b/doc/dev/spv-structure.eps @@ -2,7 +2,7 @@ %%Creator: graphviz version 2.38.0 (20140413.2041) %%Title: spv_structure %%Pages: 1 -%%BoundingBox: 36 36 517 487 +%%BoundingBox: 36 36 518 560 %%EndComments save %%BeginProlog @@ -179,440 +179,542 @@ def %%EndSetup setupLatin1 %%Page: 1 1 -%%PageBoundingBox: 36 36 517 487 +%%PageBoundingBox: 36 36 518 560 %%PageOrientation: Portrait 0 0 1 beginpage gsave -36 36 481 451 boxprim clip newpath +36 36 482 524 boxprim clip newpath 1 1 set_scale 0 rotate 40 40 translate % heading gsave 1 setlinewidth 0 0 0 nodecolor -253.65 425 38.19 18 ellipse_path stroke +254.05 498 38.19 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -232.15 421.3 moveto 43 (heading) alignedtext +232.55 494.3 moveto 43 (heading) alignedtext grestore % heading->heading gsave 1 setlinewidth 0 0 0 edgecolor -newpath 288.31 432.87 moveto -300.31 432.96 309.99 430.33 309.99 425 curveto -309.99 421.33 305.41 418.95 298.65 417.84 curveto +newpath 288.71 505.87 moveto +300.71 505.96 310.39 503.33 310.39 498 curveto +310.39 494.33 305.81 491.95 299.05 490.84 curveto stroke 0 0 0 edgecolor -newpath 298.53 414.33 moveto -288.31 417.13 lineto -298.04 421.31 lineto +newpath 298.93 487.33 moveto +288.71 490.13 lineto +298.44 494.31 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 298.53 414.33 moveto -288.31 417.13 lineto -298.04 421.31 lineto +newpath 298.93 487.33 moveto +288.71 490.13 lineto +298.44 494.31 lineto closepath stroke 0 0 0 edgecolor 14 /Times-Roman set_font -309.99 421.3 moveto 7 (*) alignedtext +310.39 494.3 moveto 7 (*) alignedtext grestore % pageSetup gsave 1 setlinewidth 0 0 0 nodecolor -173.65 338 47.39 18 ellipse_path stroke +171.05 411 47.39 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -145.15 334.3 moveto 57 (pageSetup) alignedtext +142.55 407.3 moveto 57 (pageSetup) alignedtext grestore % heading->pageSetup gsave 1 setlinewidth 0 0 0 edgecolor -newpath 238.6 408.01 moveto -226.61 395.27 209.63 377.24 196.04 362.8 curveto +newpath 238.82 481.41 moveto +226.23 468.51 208.15 450 193.83 435.34 curveto stroke 0 0 0 edgecolor -newpath 198.3 360.09 moveto -188.9 355.21 lineto -193.2 364.89 lineto +newpath 196.23 432.78 moveto +186.74 428.07 lineto +191.22 437.67 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 198.3 360.09 moveto -188.9 355.21 lineto -193.2 364.89 lineto +newpath 196.23 432.78 moveto +186.74 428.07 lineto +191.22 437.67 lineto closepath stroke 0 0 0 edgecolor 14 /Times-Roman set_font -218.65 377.8 moveto 7 (?) alignedtext +217.05 450.8 moveto 7 (?) alignedtext grestore % label gsave 1 setlinewidth 0 0 0 nodecolor -269.65 251 27.9 18 ellipse_path stroke +270.05 324 27.9 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -256.15 247.3 moveto 27 (label) alignedtext +256.55 320.3 moveto 27 (label) alignedtext grestore % heading->label gsave 1 setlinewidth 0 0 0 edgecolor -newpath 255.24 406.88 moveto -258.02 377 263.77 315.11 267.11 279.27 curveto +newpath 255.64 479.88 moveto +258.42 450 264.17 388.11 267.51 352.27 curveto stroke 0 0 0 edgecolor -newpath 270.62 279.33 moveto -268.06 269.05 lineto -263.65 278.68 lineto +newpath 271.02 352.33 moveto +268.46 342.05 lineto +264.05 351.68 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 270.62 279.33 moveto -268.06 269.05 lineto -263.65 278.68 lineto +newpath 271.02 352.33 moveto +268.46 342.05 lineto +264.05 351.68 lineto closepath stroke grestore % container gsave 1 setlinewidth 0 0 0 nodecolor -325.65 338 43.59 18 ellipse_path stroke +326.05 411 43.59 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -300.15 334.3 moveto 51 (container) alignedtext +300.55 407.3 moveto 51 (container) alignedtext grestore % heading->container gsave 1 setlinewidth 0 0 0 edgecolor -newpath 267.19 408.01 moveto -277.88 395.39 292.97 377.57 305.15 363.2 curveto +newpath 267.59 481.01 moveto +278.28 468.39 293.37 450.57 305.55 436.2 curveto stroke 0 0 0 edgecolor -newpath 308.13 365.1 moveto -311.92 355.21 lineto -302.78 360.57 lineto +newpath 308.53 438.1 moveto +312.32 428.21 lineto +303.18 433.57 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 308.13 365.1 moveto -311.92 355.21 lineto -302.78 360.57 lineto +newpath 308.53 438.1 moveto +312.32 428.21 lineto +303.18 433.57 lineto closepath stroke 0 0 0 edgecolor 14 /Times-Roman set_font -293.65 377.8 moveto 7 (*) alignedtext +294.05 450.8 moveto 7 (*) alignedtext grestore % pageHeader gsave 1 setlinewidth 0 0 0 nodecolor -52.65 251 52.79 18 ellipse_path stroke +171.05 324 52.79 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -20.15 247.3 moveto 65 (pageHeader) alignedtext +138.55 320.3 moveto 65 (pageHeader) alignedtext grestore % pageSetup->pageHeader gsave 1 setlinewidth 0 0 0 edgecolor -newpath 152.01 321.8 moveto -132.89 308.37 104.8 288.63 83.35 273.57 curveto +newpath 171.05 392.8 moveto +171.05 381.16 171.05 365.55 171.05 352.24 curveto stroke 0 0 0 edgecolor -newpath 85.1 270.52 moveto -74.91 267.64 lineto -81.08 276.25 lineto +newpath 174.55 352.18 moveto +171.05 342.18 lineto +167.55 352.18 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 85.1 270.52 moveto -74.91 267.64 lineto -81.08 276.25 lineto +newpath 174.55 352.18 moveto +171.05 342.18 lineto +167.55 352.18 lineto closepath stroke grestore % pageFooter gsave 1 setlinewidth 0 0 0 nodecolor -173.65 251 50.09 18 ellipse_path stroke +50.05 324 50.09 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -143.15 247.3 moveto 61 (pageFooter) alignedtext +19.55 320.3 moveto 61 (pageFooter) alignedtext grestore % pageSetup->pageFooter gsave 1 setlinewidth 0 0 0 edgecolor -newpath 173.65 319.8 moveto -173.65 308.16 173.65 292.55 173.65 279.24 curveto +newpath 149.41 394.8 moveto +130.18 381.29 101.84 361.39 80.35 346.29 curveto stroke 0 0 0 edgecolor -newpath 177.15 279.18 moveto -173.65 269.18 lineto -170.15 279.18 lineto +newpath 82.09 343.24 moveto +71.9 340.35 lineto +78.07 348.96 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 177.15 279.18 moveto -173.65 269.18 lineto -170.15 279.18 lineto +newpath 82.09 343.24 moveto +71.9 340.35 lineto +78.07 348.96 lineto closepath stroke grestore +% ptext1 +gsave +0 0 0 nodecolor +14 /Times-Roman set_font +252.55 233.3 moveto 37 () alignedtext +grestore +% label->ptext1 +gsave +1 setlinewidth +0 0 0 edgecolor +newpath 270.25 305.8 moveto +270.38 294.16 270.57 278.55 270.73 265.24 curveto +stroke +0 0 0 edgecolor +newpath 274.23 265.22 moveto +270.84 255.18 lineto +267.23 265.13 lineto +closepath fill +1 setlinewidth +solid +0 0 0 edgecolor +newpath 274.23 265.22 moveto +270.84 255.18 lineto +267.23 265.13 lineto +closepath stroke +0 0 0 edgecolor +14 /Times-Roman set_font +270.05 276.8 moveto 7 (?) alignedtext +grestore % container->label gsave 1 setlinewidth 0 0 0 edgecolor -newpath 314.58 320.21 moveto -306.37 307.74 295.05 290.56 285.82 276.56 curveto +newpath 314.98 393.21 moveto +306.77 380.74 295.45 363.56 286.22 349.56 curveto stroke 0 0 0 edgecolor -newpath 288.54 274.32 moveto -280.12 267.9 lineto -282.7 278.17 lineto +newpath 288.94 347.32 moveto +280.52 340.9 lineto +283.1 351.17 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 288.54 274.32 moveto -280.12 267.9 lineto -282.7 278.17 lineto +newpath 288.94 347.32 moveto +280.52 340.9 lineto +283.1 351.17 lineto closepath stroke grestore % table gsave 1 setlinewidth 0 0 0 nodecolor -397.65 251 27.9 18 ellipse_path stroke +398.05 324 27.9 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -384.15 247.3 moveto 27 (table) alignedtext +384.55 320.3 moveto 27 (table) alignedtext grestore % container->table gsave 1 setlinewidth 0 0 0 edgecolor -newpath 339.53 320.61 moveto -350.46 307.71 365.83 289.56 378.02 275.17 curveto +newpath 339.93 393.61 moveto +350.86 380.71 366.23 362.56 378.42 348.17 curveto stroke 0 0 0 edgecolor -newpath 380.98 277.09 moveto -384.77 267.2 lineto -375.64 272.56 lineto +newpath 381.38 350.09 moveto +385.17 340.2 lineto +376.04 345.56 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 380.98 277.09 moveto -384.77 267.2 lineto -375.64 272.56 lineto +newpath 381.38 350.09 moveto +385.17 340.2 lineto +376.04 345.56 lineto closepath stroke 0 0 0 edgecolor 14 /Times-Roman set_font -365.65 290.8 moveto 7 (*) alignedtext +366.05 363.8 moveto 7 (?) alignedtext grestore % text gsave 1 setlinewidth 0 0 0 nodecolor -281.65 91 27 18 ellipse_path stroke +253.05 164 27 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -271.15 87.3 moveto 21 (text) alignedtext +242.55 160.3 moveto 21 (text) alignedtext grestore % container->text gsave 1 setlinewidth 0 0 0 edgecolor -newpath 322.55 319.77 moveto -315.01 277.78 295.63 169.86 286.52 119.12 curveto +newpath 328.04 392.9 moveto +331.31 358.22 334.93 277.88 307.05 219 curveto +300.67 205.54 289.49 193.49 278.95 184.21 curveto stroke 0 0 0 edgecolor -newpath 289.95 118.43 moveto -284.74 109.21 lineto -283.06 119.67 lineto +newpath 281.03 181.38 moveto +271.1 177.67 lineto +276.55 186.76 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 289.95 118.43 moveto -284.74 109.21 lineto -283.06 119.67 lineto +newpath 281.03 181.38 moveto +271.1 177.67 lineto +276.55 186.76 lineto closepath stroke 0 0 0 edgecolor 14 /Times-Roman set_font -302.65 203.8 moveto 7 (*) alignedtext +326.05 276.8 moveto 7 (?) alignedtext grestore % tableStructure gsave 1 setlinewidth 0 0 0 nodecolor -413.65 164 59.59 18 ellipse_path stroke +414.05 237 59.59 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -375.65 160.3 moveto 76 (tableStructure) alignedtext +376.05 233.3 moveto 76 (tableStructure) alignedtext grestore % table->tableStructure gsave 1 setlinewidth 0 0 0 edgecolor -newpath 400.88 232.8 moveto -403.07 221.16 406.01 205.55 408.52 192.24 curveto +newpath 401.28 305.8 moveto +403.47 294.16 406.41 278.55 408.92 265.24 curveto stroke 0 0 0 edgecolor -newpath 412 192.65 moveto -410.41 182.18 lineto -405.12 191.36 lineto +newpath 412.4 265.65 moveto +410.81 255.18 lineto +405.52 264.36 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 412 192.65 moveto -410.41 182.18 lineto -405.12 191.36 lineto +newpath 412.4 265.65 moveto +410.81 255.18 lineto +405.52 264.36 lineto closepath stroke grestore % html gsave 1 setlinewidth 0 0 0 nodecolor -281.65 18 27.1 18 ellipse_path stroke +304.05 91 27.1 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -268.65 14.3 moveto 26 (html) alignedtext +291.05 87.3 moveto 26 (html) alignedtext grestore % text->html gsave 1 setlinewidth 0 0 0 edgecolor -newpath 281.65 72.81 moveto -281.65 64.79 281.65 55.05 281.65 46.07 curveto +newpath 264.36 147.24 moveto +270.97 138.05 279.43 126.27 286.84 115.95 curveto +stroke +0 0 0 edgecolor +newpath 289.77 117.88 moveto +292.76 107.71 lineto +284.08 113.79 lineto +closepath fill +1 setlinewidth +solid +0 0 0 edgecolor +newpath 289.77 117.88 moveto +292.76 107.71 lineto +284.08 113.79 lineto +closepath stroke +grestore +% cdata1 +gsave +0 0 0 nodecolor +14 /Times-Roman set_font +205.05 87.3 moveto 46 () alignedtext +grestore +% text->cdata1 +gsave +1 setlinewidth +0 0 0 edgecolor +newpath 247.12 146.17 moveto +244.24 137.98 240.7 127.94 237.46 118.73 curveto +stroke +0 0 0 edgecolor +newpath 240.72 117.47 moveto +234.1 109.2 lineto +234.12 119.79 lineto +closepath fill +1 setlinewidth +solid +0 0 0 edgecolor +newpath 240.72 117.47 moveto +234.1 109.2 lineto +234.12 119.79 lineto +closepath stroke +grestore +% cdata2 +gsave +0 0 0 nodecolor +14 /Times-Roman set_font +281.05 14.3 moveto 46 () alignedtext +grestore +% html->cdata2 +gsave +1 setlinewidth +0 0 0 edgecolor +newpath 304.05 72.81 moveto +304.05 64.79 304.05 55.05 304.05 46.07 curveto stroke 0 0 0 edgecolor -newpath 285.15 46.03 moveto -281.65 36.03 lineto -278.15 46.03 lineto +newpath 307.55 46.03 moveto +304.05 36.03 lineto +300.55 46.03 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 285.15 46.03 moveto -281.65 36.03 lineto -278.15 46.03 lineto +newpath 307.55 46.03 moveto +304.05 36.03 lineto +300.55 46.03 lineto closepath stroke grestore % dataPath gsave 1 setlinewidth 0 0 0 nodecolor -413.65 91 40.89 18 ellipse_path stroke +414.05 164 40.89 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -390.15 87.3 moveto 47 (dataPath) alignedtext +390.55 160.3 moveto 47 (dataPath) alignedtext grestore % tableStructure->dataPath gsave 1 setlinewidth 0 0 0 edgecolor -newpath 413.65 145.81 moveto -413.65 137.79 413.65 128.05 413.65 119.07 curveto +newpath 414.05 218.81 moveto +414.05 210.79 414.05 201.05 414.05 192.07 curveto stroke 0 0 0 edgecolor -newpath 417.15 119.03 moveto -413.65 109.03 lineto -410.15 119.03 lineto +newpath 417.55 192.03 moveto +414.05 182.03 lineto +410.55 192.03 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 417.15 119.03 moveto -413.65 109.03 lineto -410.15 119.03 lineto +newpath 417.55 192.03 moveto +414.05 182.03 lineto +410.55 192.03 lineto +closepath stroke +grestore +% ptext2 +gsave +0 0 0 nodecolor +14 /Times-Roman set_font +395.55 87.3 moveto 37 () alignedtext +grestore +% dataPath->ptext2 +gsave +1 setlinewidth +0 0 0 edgecolor +newpath 414.05 145.81 moveto +414.05 137.79 414.05 128.05 414.05 119.07 curveto +stroke +0 0 0 edgecolor +newpath 417.55 119.03 moveto +414.05 109.03 lineto +410.55 119.03 lineto +closepath fill +1 setlinewidth +solid +0 0 0 edgecolor +newpath 417.55 119.03 moveto +414.05 109.03 lineto +410.55 119.03 lineto closepath stroke grestore % pageParagraph gsave 1 setlinewidth 0 0 0 nodecolor -173.65 164 63.09 18 ellipse_path stroke +163.05 237 63.09 18 ellipse_path stroke 0 0 0 nodecolor 14 /Times-Roman set_font -133.15 160.3 moveto 81 (pageParagraph) alignedtext +122.55 233.3 moveto 81 (pageParagraph) alignedtext grestore % pageHeader->pageParagraph gsave 1 setlinewidth 0 0 0 edgecolor -newpath 74.56 234.61 moveto -93.59 221.24 121.37 201.72 142.68 186.75 curveto +newpath 169.43 305.8 moveto +168.33 294.16 166.86 278.55 165.61 265.24 curveto stroke 0 0 0 edgecolor -newpath 144.9 189.47 moveto -151.08 180.85 lineto -140.88 183.74 lineto +newpath 169.08 264.8 moveto +164.66 255.18 lineto +162.11 265.46 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 144.9 189.47 moveto -151.08 180.85 lineto -140.88 183.74 lineto +newpath 169.08 264.8 moveto +164.66 255.18 lineto +162.11 265.46 lineto closepath stroke -0 0 0 edgecolor -14 /Times-Roman set_font -120.65 203.8 moveto 7 (*) alignedtext grestore % pageFooter->pageParagraph gsave 1 setlinewidth 0 0 0 edgecolor -newpath 173.65 232.8 moveto -173.65 221.16 173.65 205.55 173.65 192.24 curveto +newpath 70.77 307.41 moveto +88.39 294.16 113.89 274.98 133.62 260.13 curveto stroke 0 0 0 edgecolor -newpath 177.15 192.18 moveto -173.65 182.18 lineto -170.15 192.18 lineto +newpath 135.8 262.88 moveto +141.68 254.07 lineto +131.59 257.28 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 177.15 192.18 moveto -173.65 182.18 lineto -170.15 192.18 lineto +newpath 135.8 262.88 moveto +141.68 254.07 lineto +131.59 257.28 lineto closepath stroke -0 0 0 edgecolor -14 /Times-Roman set_font -173.65 203.8 moveto 7 (*) alignedtext grestore % pageParagraph->text gsave 1 setlinewidth 0 0 0 edgecolor -newpath 197.61 147.24 moveto -214.44 136.18 236.98 121.37 254.47 109.86 curveto +newpath 183.47 219.89 moveto +196.82 209.35 214.34 195.54 228.46 184.4 curveto stroke 0 0 0 edgecolor -newpath 256.67 112.61 moveto -263.11 104.19 lineto -252.83 106.76 lineto +newpath 230.64 187.14 moveto +236.32 178.2 lineto +226.3 181.64 lineto closepath fill 1 setlinewidth solid 0 0 0 edgecolor -newpath 256.67 112.61 moveto -263.11 104.19 lineto -252.83 106.76 lineto +newpath 230.64 187.14 moveto +236.32 178.2 lineto +226.3 181.64 lineto closepath stroke grestore endpage diff --git a/doc/dev/spv-structure.gv b/doc/dev/spv-structure.gv index 7807ab48d2..ac37b698b7 100644 --- a/doc/dev/spv-structure.gv +++ b/doc/dev/spv-structure.gv @@ -5,21 +5,33 @@ digraph spv_structure { "heading" -> "heading" [label="*"]; "container" -> "label"; - "container" -> "table" [label="*"]; - "container" -> "text" [label="*"]; + "container" -> "table" [label="?"]; + "container" -> "text" [label="?"]; + + "label" -> ptext1 [label="?"]; + ptext1 [label="", shape=plaintext]; "text" -> "html"; + "text" -> cdata1; + cdata1 [label="", shape=plaintext]; + + "html" -> cdata2; + cdata2 [label="", shape=plaintext]; + "table" -> "tableStructure"; "tableStructure" -> "dataPath"; + "dataPath" -> ptext2; + ptext2 [label="", shape=plaintext]; + "pageSetup" -> "pageHeader"; "pageSetup" -> "pageFooter"; - "pageHeader" -> "pageParagraph" [label="*"]; + "pageHeader" -> "pageParagraph"; - "pageFooter" -> "pageParagraph" [label="*"]; + "pageFooter" -> "pageParagraph"; "pageParagraph" -> "text"; } diff --git a/doc/dev/spv-structure.pdf b/doc/dev/spv-structure.pdf index b54a268cb930e41e99761431ad41c3fde296d277..520d3bf511ab2dbd716869c4d6d66002d0f73997 100644 GIT binary patch delta 15812 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 MXfiTUc`@k!2aZ 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 z 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 -- 2.30.2