CartoSym 2.0 draft: every requirement in PR #133
Each requirement with its text, how it is checked, and links to the evidence: a gallery card for judgement calls, a sample render (below each class) for straightforward visual requirements, test cases for expressions, or a note for encodings. Samples show what the draft renderer draws; "Check" says what to look for. 137 requirements: 35 with a gallery card, 39 with a sample render, 66 with test cases, 12 checked as encodings, 2 partly and 2 not implemented. A requirement can be checked in more than one way.
core (clause 7)#
1-core/sections/clause_7_core.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/core/rulestext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/selectortext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/nestedtext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/symbolizertext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/visibilitytext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/opacitytext
| card | card: Symbolizer opacity: whole symbol or each part |
/req/core/z-ordertext
| card | card: Which zOrder is drawn on top |
/req/core/parameterstext
| sample | sample: Property values from expressions |
/req/core/expressions-field-identifierstext
| sample tested | sample: Rules, selectors, nested rules and visibility 1 test case: draft renderer 1/1, libCartoSym – |
/req/core/expressions-system-identifierstext
| sample tested partly | sample: Rules depending on the scale 1 test case: draft renderer 1/1, libCartoSym – partly: viz.sd and dataLayer identifiers work; capabilities identifiers are not implemented |
/req/core/scaletext
| sample tested | sample: Rules depending on the scale 1 test case: draft renderer 1/1, libCartoSym – |
/req/core/timetext
| not implemented | not implemented: the draft renderer has no visualization time |
/req/core/layerstext
| sample | sample: Rules, selectors, nested rules and visibility |
/req/core/literalstext
| tested | 3 test cases: draft renderer 3/3, libCartoSym 3/3 |
/req/core/operationstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/core/logicaltext
| tested | 4 test cases: draft renderer 4/4, libCartoSym 2/4 |
/req/core/relationaltext
| tested | 8 test cases: draft renderer 8/8, libCartoSym 5/8 |
/req/core/arraystext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/core/instancestext
| sample | sample: Partial updates (alter) and array element updates |
/req/core/default-valuestext
| card sample | card: The default marker sample: Rules, selectors, nested rules and visibility |
Rules, selectors, nested rules and visibility
/req/core/rules /req/core/selector /req/core/nested /req/core/symbolizer /req/core/visibility /req/core/layers /req/core/expressions-field-identifiers /req/core/default-valuesCheck: Each parcel gets the color its rules give it. Farm: silver (only the layer rule applies), with the default black 1 px stroke. Large forest: forest green (nested rule). Small forest (area < 2000): light green (a rule nested twice). Lake: blue with a 3 px navy stroke. The second farm (hidden = true) is not drawn: the dashed outline only shows where it would be. Grey italic labels are annotations, not part of the style.
Property values from expressions
/req/core/parameters /req/parameter-values/expressionsCheck: Stroke width = lanes × 3 + 1 px: the roads with 1, 2 and 4 lanes are 4, 7 and 13 px wide.
Rules depending on the scale
/req/core/scale /req/core/expressions-system-identifiersCheck: The dots are shown at both scales; a nested rule on viz.sd < 10 000 adds the labels, so they show at 1:5 000 only.
Partial updates (alter) and array element updates
/req/core/instances /req/json/partial-update /req/json/array-element-updateCheck: First: a later rule with alter: true changes only the width, so the line stays red. Second: the same rule without alter replaces the whole stroke, so the color falls back to the default black. Third and fourth: the dash pattern [16, 8] before and after a later rule sets {index: 1, value: 2}, which changes only the gap, to [16, 2].
rc-arithmetic#
1-core/requirements/rc-arithmetic.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/arithmetic/addtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/arithmetic/subtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/arithmetic/multext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/arithmetic/divtext
| card tested | card: Example 7: NDVI with integer bands 2 test cases: draft renderer 2/2, libCartoSym 1/2 |
/req/arithmetic/int-divtext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 0/2 |
/req/arithmetic/modtext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 2/2 |
/req/arithmetic/powtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
rc-array-relations#
1-core/requirements/rc-array-relations.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/array-relations/a-contained-bytext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/array-relations/a-containstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/array-relations/a-equalstext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 2/2 |
/req/array-relations/a-overlapstext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 2/2 |
rc-casing#
1-core/requirements/rc-casing.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/casing/casingtext
| card | card: Casing beneath or above the stroke card: Casing at crossings card: What casing width means |
/req/casing/centertext
| card | card: Casing beneath or above the stroke |
rc-conditional#
1-core/requirements/rc-conditional.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/conditional/conditiontext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 0/2 |
/req/conditional/then-exptext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/conditional/else-exptext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
rc-coverage#
1-core/requirements/rc-coverage.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/coverage/color-channelstext
| card | card: Example 6: scaling colorChannels |
/req/coverage/alpha-channeltext
| card sample | card: Example 6: scaling colorChannels sample: Coverage opacity map |
/req/coverage/single-channeltext
| card sample | card: Example 7: NDVI with integer bands sample: Coverage opacity map |
/req/coverage/color-maptext
| card | card: Example 5: colorMap between and beyond entries card: Example 7: NDVI with integer bands |
/req/coverage/opacity-maptext
| card sample | card: Example 5: colorMap between and beyond entries sample: Coverage opacity map |
/rec/coverage/map-interpolationtext
| card | card: Example 5: colorMap between and beyond entries |
/req/coverage/gammatext
| card | card: Direction of coverage gamma |
Coverage opacity map
/req/coverage/opacity-map /req/coverage/single-channel /req/coverage/alpha-channelCheck: Example 5's colors (stretched to Rondane's 500–2000 m) with an opacityMap from 0 at 500 m to 1 at 2000 m, over a striped background: the stripes show through the valleys and disappear under the peaks. Elevation data © Kartverket, CC BY 4.0.
rc-cscss#
1-core/requirements/rc-cscss.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/cscss/grammartext
| encoding | the spec's examples 5 to 9 converted with pycartosym and parsed by libCartoSym |
/req/cscss/rulestext
| encoding | as for the grammar |
/req/cscss/selectorstext
| encoding | as for the grammar |
/req/cscss/expressionstext
| encoding | as for the grammar |
/req/cscss/includetext
| encoding | pycartosym converts .include to $include, keeping the file's own rules and variables |
/req/cscss/commentstext
| encoding | the spec's examples contain comments; they convert |
/req/cscss/variablestext
| encoding | pycartosym converts @variables to $variables and $ref, including variables defined by expressions; the draft renderer resolves them |
rc-dashes#
1-core/requirements/rc-dashes.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/dashes/dash-patterntext
| card | card: Units of dashPattern |
/req/dashes/dash-offsettext
| sample | sample: Dash offset |
Dash offset
/req/dashes/dash-offsetCheck: Both lines use dashPattern [16, 8]; the lower one has dashOffset 8 px, so its dashes start 8 px later.
rc-dotpatterns#
1-core/requirements/rc-dotpatterns.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/dot-patterns/dotpatterntext
| card sample | card: What a stipple or dot-pattern dot looks like sample: Dot pattern distance |
/req/dot-patterns/distancetext
| card sample | card: What a stipple or dot-pattern dot looks like sample: Dot pattern distance |
Dot pattern distance
/req/dot-patterns/dotpattern /req/dot-patterns/distanceCheck: Left: dots every 8 px both ways. Right: horizontal 20 px, vertical 8 px, so columns of closely spaced dots, 20 px apart.
rc-font-outlines#
1-core/requirements/rc-font-outlines.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/font-outlines/outlinetext
| card | card: Font outline beneath or above the glyphs |
/req/font-outlines/sizetext
| card sample | card: Font outline beneath or above the glyphs sample: Font outline size, opacity and color |
/req/font-outlines/opacitytext
| sample | sample: Font outline size, opacity and color |
/req/font-outlines/colortext
| sample | sample: Font outline size, opacity and color |
Font outline size, opacity and color
/req/font-outlines/size /req/font-outlines/opacity /req/font-outlines/colorCheck: On the dark band: a 1 px white outline, a 4 px yellow outline, and a 4 px white outline at opacity 0.3.
rc-functions#
1-core/requirements/rc-functions.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/functions/call-expressionstext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 0/2 |
/req/functions/standard-functionstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
rc-hatches#
1-core/requirements/rc-hatches.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/hatches/hatchtext
| sample | sample: Hatch width and distance |
/req/hatches/widthtext
| sample | sample: Hatch width and distance |
/req/hatches/angletext
| card | card: Hatch angle direction |
/req/hatches/distancetext
| sample | sample: Hatch width and distance |
Hatch width and distance
/req/hatches/hatch /req/hatches/width /req/hatches/distanceCheck: Left: the defaults (1 px lines every 10 px at 45°). Middle: width 3 px. Right: distance 20 px.
rc-hillshading#
1-core/requirements/rc-hillshading.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/hill-shading/hill-shadingtext
| card | card: Example 8: what hillShading factor means |
/req/hill-shading/factortext
| card | card: Example 8: what hillShading factor means card: Example 9: shading intensity mapped to color and opacity |
/req/hill-shading/suntext
| card | card: Direction of the sun azimuth |
/req/hill-shading/color-maptext
| card | card: Example 9: shading intensity mapped to color and opacity |
/req/hill-shading/opacity-maptext
| card | card: Example 9: shading intensity mapped to color and opacity |
rc-json#
1-core/requirements/rc-json.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/json/schematext
| encoding | every gallery and sample style is validated against the PR's JSON schema on each build |
/req/json/expressionstext
| encoding | every style in the gallery uses CQL2-JSON expressions |
/req/json/partial-updatetext
| sample | sample: Partial updates (alter) and array element updates |
/req/json/array-element-updatetext
| sample | sample: Partial updates (alter) and array element updates |
/req/json/dot-size-colortext
| encoding | enforced by the PR's JSON schema (not on Dot), which every style is validated against |
/req/json/variablestext
| encoding | tested (variables cases) and used by the draft renderer |
/req/json/includetext
| encoding | read by the draft renderer ($include, included rules first) |
rc-labels#
1-core/requirements/rc-labels.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/labels/labeltext
| card | card: Which label priority wins card: Labels on top of everything |
/req/labels/placementtext
| card partly | card: Which label priority wins card: Units of label minSpacing partly: priority and minSpacing are rendered; maxSpacing is not implemented |
rc-math#
1-core/requirements/rc-math.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/math/abstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/acostext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/asintext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/atantext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/atan2text
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/ceiltext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/costext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/coshtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/exptext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/floortext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/logtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/math/log10text
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/maxtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/mintext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/powtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/math/randomtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/rinttext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/roundtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/sintext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/sinhtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/sqrttext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/tantext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/math/tanhtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
rc-parameter-values#
1-core/requirements/rc-parameter-values.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/parameter-values/expressionstext
| sample tested | sample: Property values from expressions 1 test case: draft renderer 1/1, libCartoSym – |
rc-righthand#
1-core/requirements/rc-righthand.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/right-hand/operandstext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 0/1 |
rc-stipples#
1-core/requirements/rc-stipples.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/stipples/ratiotext
| card | card: What a stipple or dot-pattern dot looks like |
rc-text-manipulation#
1-core/requirements/rc-text-manipulation.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/text-manipulation/case-insensitizetext
| tested | 2 test cases: draft renderer 2/2, libCartoSym 1/2 |
/req/text-manipulation/accent-insensitizetext
| tested | 3 test cases: draft renderer 3/3, libCartoSym 1/3 |
/req/text-manipulation/lower-casetext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-manipulation/upper-casetext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-manipulation/concatenatetext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/text-manipulation/substitutetext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-manipulation/formattext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
rc-text-relation#
1-core/requirements/rc-text-relation.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/text-relation/liketext
| tested | 4 test cases: draft renderer 4/4, libCartoSym 4/4 |
/req/text-relation/not-liketext
| tested | 1 test case: draft renderer 1/1, libCartoSym 1/1 |
/req/text-relation/containstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-relation/starts-withtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-relation/ends-withtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-relation/not-containstext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-relation/not-starts-withtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
/req/text-relation/not-ends-withtext
| tested | 1 test case: draft renderer 1/1, libCartoSym 0/1 |
rc-variables#
1-core/requirements/rc-variables.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/variables/definitiontext
| tested | 2 test cases: draft renderer 2/2, libCartoSym – |
/req/variables/expressiontext
| tested | 1 test case: draft renderer 1/1, libCartoSym – |
rc-vector#
1-core/requirements/rc-vector.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/vector/filltext
| sample | sample: Fill and stroke |
/req/vector/stroketext
| sample | sample: Fill and stroke |
/req/vector/unitstext
| sample | sample: Units of measure |
/req/vector/markertext
| card sample | card: The default marker sample: Where markers go |
/req/vector/graphicstext
| sample | sample: Graphic position offset |
/req/vector/dottext
| card sample | card: The default marker sample: Graphic position offset |
/req/vector/imagetext
| card sample | card: Default hot spot of an Image sample: Image tint and black tint |
/per/vector/image-alpha-testtext
| not implemented | not implemented: a permission; the draft renderer has no picking and no alpha test |
/req/vector/texttext
| sample | sample: Text and fonts |
/req/vector/fontstext
| sample | sample: Text and fonts |
Fill and stroke
/req/vector/fill /req/vector/strokeCheck: Left: a teal fill at opacity 1 with a 2 px black stroke. Right: the same fill at opacity 0.4 over the grey band, with a 6 px crimson stroke at opacity 0.6.
Units of measure
/req/vector/unitsCheck: At 2 px per metre: 4 px, 2 mm (7.1 px at 0.28 mm per pixel) and 10 m (20 px).
Where markers go
/req/vector/markerCheck: A dot at the point, at every vertex of the line, and at the centroid of the polygon.
Graphic position offset
/req/vector/graphics /req/vector/dotCheck: The black cross is the point. A red dot (stroke width 12 px, so 12 px across) is drawn 30 px right of it, and a blue one 20 px above (positive y is up).
Image tint and black tint
/req/vector/imageCheck: The same black-and-white icon four times. Left: unchanged (the defaults, tint white and blackTint black). Then tint gold (the white parts turn gold), blackTint darkRed (the black parts turn dark red), and both (lightSkyBlue and navy). The grey door is halfway between black and white, so it takes the colour halfway between blackTint and tint.
Text and fonts
/req/vector/text /req/vector/fontsCheck: Three texts at the same point (black cross): serif 16 pt bold, sans-serif 12 pt italic in dark red, monospace 10 pt. Left, centre and right alignment put the cross at the start, middle and end of the text.
rc-gradients#
2-shapes/requirements/rc-gradients.adoc
| Requirement | Checked by | Evidence |
|---|---|---|
/req/gradients/gradienttext
| sample | sample: Gradient types and keys |
/req/gradients/typetext
| card sample | card: Gradient position and size: per feature or per map sample: Gradient types and keys |
/req/gradients/keystext
| card sample | card: Gradient angle convention sample: Gradient types and keys |
/req/gradients/angletext
| card | card: Gradient angle convention |
/req/gradients/positiontext
| card | card: Gradient position and size: per feature or per map |
/req/gradients/sizetext
| card | card: Gradient position and size: per feature or per map |
Gradient types and keys
/req/gradients/gradient /req/gradients/type /req/gradients/keysCheck: Linear, radial, repeating and conic, each from white through orange (at 30 %) to dark red, as their keys say. The conic gradient goes once around its centre, so its end (dark red) meets its start (white) in a sharp edge.