Move a lot of processing into a common process_group_symbolizer function.
Also, extract column collection out of process_group_symbolizer function.
This will reduce duplication needed for other renderers.
Segfault was due to `glyph_position` structs keeping a pointer to
`glyph_info` objects which went out of scope at a different time.
The (rather ugly) fix for the moment is to copy that information
into the thunk object.
Create a group_symbolizer_helper for group placments, and extract some code from
text_symbolizer_helper into a base class to share with group_symbolizer_helper.
Also, move tolerance_iterator into its own header file. Use helper in
process_group_symbolizer to find placement positions.
This renders the saved information from previous calls to the
bounding box extraction code, offset by some amount which should
be determined from running the `placement_finder`. Note that this
doesn't implement that bit, just the rendering.
This is done by creating a fake 'virtual' environment at a fake
point and running the symbolizer render code. The actual render
is saved in a thunk for after the group layout has been done.
This includes XML parsing of group symbolizer and related objects and
process_group_symbolizer method in the AGG renderer. This also includes
code to collect group symbolizer indexed columns, create sub features,
and match them to group rules.
- there are two versions:
- point-symbolizer-expressions: file
- point-symbolizer-expressions-all: additionally test
allow-overlap, opacity, transform, ignore-placement, comp-op
which are not supported right now
- there are two versions:
- polygon-symbolizer-expressions: fill, fill-opacity, gamma
- polygon-symbolizer-expressions-all: additionally test
comp-op which is not supported right now
- there are two versions:
- line-symbolizer-expressions: stroke, stroke-width, stroke-opacity, offset
- line-symbolizer-expressions-all: additionally test
stroke-dasharray, stroke-linecap, stroke-linejoin, comp-op
which are not supported right now