From: Ben Pfaff Date: Mon, 11 Jan 2016 01:00:11 +0000 (-0800) Subject: Document format strings. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=e62ca4413e3d41f4def8595374d8a1937f749eeb Document format strings. --- diff --git a/notes b/notes index 811a7a1177..56cd437c75 100644 --- a/notes +++ b/notes @@ -2716,6 +2716,14 @@ Within Subjects Design: Looks+Charisma+Looks*Charisma + + + + Dependent Variable: Num_Diagnostic Model: (Intercept), functdent, Sex, nursebeds, BaseAge, offset = log_period_yr diff --git a/spv-file-format.texi b/spv-file-format.texi index cb2cae75b4..a0b5e1449e 100644 --- a/spv-file-format.texi +++ b/spv-file-format.texi @@ -59,7 +59,7 @@ The structure of a chart plus its data. Charts do not have a @itemx @var{prefix}_pmml.scf Not yet investigated. The corpus contains only one example of each. -@itemx @var{prefix}_stats.xml +@item @var{prefix}_stats.xml Not yet investigated. The corpus contains few examples. @end table @@ -629,27 +629,10 @@ raw-value := | 04 value-mod int32[format] string[vallab] string[varname] (01 | 02 | 03) string[s] | 05 value-mod string[varname] string[varlabel] (01 | 02 | 03) - | value-mod string[format] int32[n-substs] substitution*[n-substs] -substitution := + | value-mod string[format] int32[n-args] arg*[n-args] +arg := i0 value - | int32[x] value*[x + 1] /* @r{x > 0} */ -value-mod := - 31 i0 (i0 | i1 string[subscript]) value-mod-i0-v1 /* @r{version 1} */ - | 31 i0 (i0 | i1 string[subscript]) value-mod-i0-v3 /* @r{version 3} */ - | 31 i1 int32[footnote-number] template - | 31 i2 (00 | 01 | 02) 00 (i1 | i2 | i3) template - | 31 i3 00 00 01 00 i2 template - | 58 -value-mod-i0-v1 := 00 (i1 | i2) 00 00 int32 00 00 -value-mod-i0-v3 := count(template-string - (58 | 31 style) - (58 - | 31 i0 i0 i0 i0 01 00 (01 | 02 | 08) - 00 08 00 0a 00)) - -style := 01? 00? 00? 00? 01 string[fgcolor] string[bgcolor] string[font] byte -template := 00 00 count(template-string (58 | 31 style) 58) -template-string := count((i0 (58 | 31 string))?) + | int32[x] i0 value*[x + 1] /* @r{x > 0} */ @end example A @code{value} boils down to a number or a string. There are several @@ -716,4 +699,91 @@ Variable @code{varname}, which is rarely observed as empty in the corpus, with variable label @code{varlabel}, which is often empty. The meaning of the final byte is unknown. -@end itemize + +@item 31 +@itemx 58 +(These bytes begin a @code{value-mod}.) A format string, analogous to +@code{printf}, followed by one or more arguments, each of which has +one or more values. The format string uses the following syntax: + +@table @code +@item \% +@item \: +@item \[ +@item \] +Each of these expands to the character following @samp{\\}. This is +useful to escape characters that have special meaning in format +strings. These are effective inside and outside the @code{[@dots{}]} +syntax forms described below. + +@item \n +Expands to a new-line, inside or outside the @code{[@dots{}]} forms +described below. + +@item ^@var{i} +Expands to a formatted version of argument @var{i}, which must have +only a single value. For example, @code{^1} would expand to the first +argument's @code{value}. + +@item [:@var{a}:]@var{i} +Expands @var{a} for each of the @code{value}s in @var{i}. @var{a} +should contain one or more @code{^@var{j}} conversions, which are +drawn from the values for argument @var{i} in order. Some examples +from the corpus: + +@table @code +@item [:^1:]1 +All of the values for the first argument, concatenated. + +@item [:^1\n:]1 +Expands to the values for the first argument, each followed by +a new-line. + +@item [:^1 = ^2:]2 +Expands to @code{@var{x} = @var{y}} where @var{x} is the second +argument's first value and @var{y} is its second value. (This would +be used only if the argument has two values. With additional values, +the second and third values would be directly concatenated, which +would look funny.) +@end table + +@item [@var{a}:@var{b}:]@var{i} +This extends the previous form so that the first values are expanded +using @var{a} and later values are expanded using @var{b}. For an +unknown reason, within @var{a} the @code{^@var{j}} conversions are +instead written as @code{%@var{j}}. Some examples from the corpus: + +@table @code +@item [%1:*^1:]1 +Expands to all of the values for the first argument, separated by +@samp{*}. + +@item [%1 = %2:, ^1 = ^2:]1 +Given appropriate values for the first argument, expands to @code{X = +1, Y = 2, Z = 3}. + +@item [%1:, ^1:]1 +Given appropriate values, expands to @code{1, 2, 3}. +@end table +@end table +@end table + +@example +value-mod := + 31 i0 (i0 | i1 string[subscript]) value-mod-i0-v1 /* @r{version 1} */ + | 31 i0 (i0 | i1 string[subscript]) value-mod-i0-v3 /* @r{version 3} */ + | 31 i1 int32[footnote-number] format + | 31 i2 (00 | 01 | 02) 00 (i1 | i2 | i3) format + | 31 i3 00 00 01 00 i2 format + | 58 +value-mod-i0-v1 := 00 (i1 | i2) 00 00 int32 00 00 +value-mod-i0-v3 := count(format-string + (58 | 31 style) + (58 + | 31 i0 i0 i0 i0 01 00 (01 | 02 | 08) + 00 08 00 0a 00)) + +style := 01? 00? 00? 00? 01 string[fgcolor] string[bgcolor] string[font] byte +format := 00 00 count(format-string (58 | 31 style) 58) +format-string := count((i0 (58 | 31 string))?) +@end example