1 // PSPP - a program for statistical analysis.
2 // Copyright (C) 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 :style[style_ref]=ref style
28 => (visualization_extension | location)*
30 (sourceVariable | derivedVariable | expressionVariable
31 | intervalDomain | categoricalDomain)+
42 extension[visualization_extension]
49 :styleCycleRepository?
54 :statisticsSummary[statisticsSummary_]?
58 :percentDomain=(percentDomain)?
63 :boxplotLinkWidth=bool?
65 :preserveLocations=bool?
72 userSource :missing=(listwise | pairwise)? => EMPTY // Related to omit_empty?
76 => (categories | variableReference | domainReference)+ simpleSort?
79 :ref=ref categoricalDomain
84 => (variableReference | range)*
97 :method[sort_method]=(custom | natural | percent)
105 :domain=ref categoricalDomain?
107 :dependsOn=ref sourceVariable?
109 :labelVariable=ref sourceVariable?
115 :inputDateFormatPattern?
116 :measurementLevel=(ratio)?
117 => variable_extension* (format | stringFormat | numberFormat)?
123 :dependsOn=ref sourceVariable?
129 => variable_extension* (format | stringFormat)? valueMapEntry*
131 extension[variable_extension]
135 :valuesAreGroupedMidpoints=bool?
149 valueMapEntry :from :to => EMPTY
151 categoryOrder => TEXT
157 => (location | coordinates | faceting | point | facetLayout
158 | line | schema | interval | lineGuide | functionGuide | edge | path
159 | planeGuide | frameGuide)*
162 :part=(height | width | top | bottom | left | right)
163 :method=(sizeToContent | attach | fixed | same)
166 :target=ref (labelFrame | graph | container | legend)?
168 :specifiedByUser=bool?
172 => (dimension | transposeTransform | reflectionTransform | polarTransform
173 | sameRatioTransform | insetTransform | rectangularTransform
180 :niceLowerMapping=bool?
181 :niceUpperMapping=bool?
189 :method[scale_method] // linear | log.safe
194 transposeTransform => ETC
202 :counterClockwise=bool?
233 :method[faceting_method]=(nest | cross | dot)?
234 => layer[layers1]* cross layer[layers2]* | dot
236 cross => (unity | nest | cross | variableReference)+
238 dot => unity variableReference
240 nest => variableReference[vars]+
245 :ref=ref (sourceVariable | derivedVariable | expressionVariable)
249 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
252 :method[layer_method]=(nest)?
258 :method[facetLayout_method]=(structured)?
260 => tableLayout? setCellProperties[scp1]*
261 facetLevel* setCellProperties[scp2]*
264 :verticalTitlesInCorner=bool
266 :fitCells=(ticks both)?
278 :showCollidingLabels=bool?
279 :labelCollisionHandling=(none | normal)?
281 :positionModifier=(none | stack | pile)?
284 => styleBy? color? labeling* split? x y z?
289 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
293 :breakRepresentation?
294 :labelCollisionHandling=(none | normal)?
295 :showCollidingLabels=bool?
299 :positionModifier=(none | stack | pile)?
300 :showDiscontinuity=bool?
303 => summaryStatistic? smoothStatistic? styleBy? regionStatistic? distributionStatistic? color? x y?
306 :method[smoothStatistic_method]=(step-left | linear)
315 :predictIndividuals=bool
319 distributionStatistic
320 :distribution=(normal)
339 :positionModifier=(none | stack | pile)
341 => attach? position_element? linkStatistic? x? y? z?
348 :breakRepresentation=(wings)
350 :labelCollisionHandling=(none | normal)
352 :showCollidingLabels=bool
369 :targetKey=ref (sourceVariable | derivedVariable | expressionVariable)
372 position[position_element]
373 :variable=ref expressionVariable
379 :fenceStyle=ref style?
380 :hingeStyle=ref style?
381 :medianStyle=ref style?
383 :outlierStyle=ref style?
384 :showCollidingLabels=bool?
385 :labelCollisionHandling=(none | normal)?
387 :positionModifier=(none | stack | pile)?
395 :combineAxisLabels=bool?
399 => label? majorTicks minorTicks? axisTransformParameter*
403 :textFrameStyle=ref style?
404 :purpose=(title | subTitle | subSubTitle | layer | footnote | auto)?
405 => text+ | descriptionGroup
408 :target=ref (faceting | interval | sourceVariable | line)
410 => (description | text)+
414 => (format | numberFormat)*
420 :tickFrameStyle=ref style
423 :markStyle=ref style?
426 :position[majorTicks_position]=(outside)?
432 :position[minorTicks_position]=(outside)?
440 axisTransformParameter
441 :parameterName=(base-ratio | base-match | derived-ratio | derived-match)
446 :applyToConverse=bool?
447 => (setStyle | setFrameStyle | setFormat | setMetaData)* union[union_]?
450 :target=ref (labeling | graph | interval | majorTicks)
461 :target=ref (majorTicks | labeling)
463 => format | numberFormat | stringFormat+ | dateTimeFormat | elapsedTimeFormat
467 :target=ref majorTicks
471 :baseFormat[f_base_format]=(date | time | dateTime | elapsedTime)?
474 :mdyOrder=(dayMonthYear | monthDayYear | yearMonthDay)?
479 :yearAbbreviation=bool?
481 :monthFormat=(long | short | number | paddedNumber)?
483 :dayOfMonthPadding=bool?
488 :dayOfWeekAbbreviation=bool?
497 :dayType=(month | year)?
498 :hourFormat=(AMPM | AS_24 | AS_12)?
499 :minimumIntegerDigits?
500 :maximumFractionDigits=int?
501 :minimumFractionDigits?
503 :scientific=(onlyForSmall | whenNeeded | true | false)?
507 :tryStringsAsNumbers=bool?
508 :negativesOutside=bool?
509 :hiddenseparator=bool?
514 :minimumIntegerDigits?
515 :maximumFractionDigits=int?
516 :minimumFractionDigits=int?
518 :scientific=(onlyForSmall | whenNeeded | true | false)?
522 :hiddenseparator=bool?
525 stringFormat => relabel* affix*
528 :baseFormat[dt_base_format]=(date | time | dateTime)
530 :mdyOrder=(dayMonthYear | monthDayYear | yearMonthDay)?
532 :yearAbbreviation=bool?
537 :monthFormat=(long | short | number | paddedNumber)?
542 :dayOfWeekAbbreviation=bool?
544 :dayOfMonthPadding=bool?
553 :dayType=(month | year)?
554 :hourFormat=(AMPM | AS_24 | AS_12)?
558 :baseFormat[dt_base_format]=(date | time | dateTime)
572 :definesReference=int
573 :position=(subscript | superscript)
585 intersect => where+ | intersectWhere | alternating | EMPTY
588 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
593 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
594 :variable2=ref (sourceVariable | derivedVariable | expressionVariable)
601 :definesReference=int?
602 :position=(subscript | superscript)?
609 :labelCollisionHandling=(none | normal)?
610 :showCollidingLabels=bool?
612 :positionModifier=(none | stack | pile)?
615 => binStatistic? summaryStatistic* (styleBy | labeling | color | offset)* x? y? footnotes?
616 // styleBy labeling x
617 // labeling styleBy x y
618 // summaryStatistic color labeling x
619 // styleBy labeling offset x
620 // summaryStatistic*2 color labeling
624 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
625 :connectingLines=bool?
626 :textFrameStyle=ref style?
628 => (formatting | format | summaryStatistic | numberFormat | transparency | footnotes | labelLocation)*
631 :domain=ref categoricalDomain
634 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
638 :affect=(both | main)
639 :domain=ref intervalDomain
642 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
646 :domain=ref intervalDomain
648 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
651 formatting :variable=ref (sourceVariable | derivedVariable | expressionVariable) => formatMapping*
653 formatMapping :from=int => format?
656 :affect=(both | main)?
657 :cycle=ref styleCycle?
661 :domain=ref categoricalDomain?
665 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
669 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
673 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
689 :method[summaryStatistic_method]=(count | range | percent | sum | mean | percentCount)?
690 :symbol[summaryStatistic_symbol]=(circle | square)?
691 :summaryBase=(coordinate)?
692 :convertIntervalToSingleValue=bool?
699 :variable=ref (sourceVariable | derivedVariable | expressionVariable)
703 :definesReference=int
710 :tickFrameStyle=ref style
711 :tickTextStyle=ref style
712 => location+ label? legendTarget+
715 :target=ref (styleBy | color | line | point)
716 :domain=ref categoricalDomain?
723 :border-bottom=(solid | thick | thin | double | none)?
724 :border-top=(solid | thick | thin | double | none)?
725 :border-left=(solid | thick | thin | double | none)?
726 :border-right=(solid | thick | thin | double | none)?
727 :border-bottom-color?
733 :font-weight=(regular | bold)?
734 :font-style=(regular | italic)?
735 :font-underline=(none | underline)?
736 :margin-bottom=dimension?
737 :margin-left=dimension?
738 :margin-right=dimension?
739 :margin-top=dimension?
740 :textAlignment=(left | right | center | decimal | mixed)?
741 :labelLocationHorizontal=(positive | negative | center)?
742 :labelLocationVertical=(positive | negative | center)?
743 :decimal-offset=dimension?
748 :stroke-linecap=(butt | round)?
749 :stroke-width=dimension?
753 :symbol=(circle | ibeam | flower | square | line | acrossDown | cross
754 | polygon | plus | bowtie | star | arrow | none)?
757 :padding-left=dimension?
758 :padding-right=dimension?
759 :padding-top=dimension?
760 :padding-bottom=dimension?
761 :maxAttachedTextHeight=dimension?
764 :labelInside=(preferred | false)?
778 => container_extension? location+ labelFrame* legend?
780 extension[container_extension] :combinedFootnotes=(true) => EMPTY
784 => labelFrame_extension* location+ label? paragraph?
786 extension[labelFrame_extension]
788 :position[labelFrame_position]=(title | footnote)
791 paragraph :hangingIndent=dimension? => EMPTY
793 styleCycle => cycle+ styleCycle_extension*
797 extension[styleCycle_extension]