MBGLOfflineRegionObserver is owned by the offline database thread, and might be destroyed by the time the dispatch_async completes. Instead of implicitly capturing this, capture a copy of the MBGLOfflinePack weak pointer.
* [ios, macos] Fact-checked expression guide
Corrected various factual inaccuracies in the “Predicates and Expressions” guide. Moved some explanation from the predicates section to the expressions section. Added sections for all the other expression types we support.
* [ios, macos] Reorganized custom function documentation
Reorganized the custom function documentation as a series of sections with headers and definition lists instead of a monolithic table. Copyedited various sections for accuracy. Linked references to custom functions. Added format string examples for all custom functions.
* [ios, macos] Made h3 more visible
* [ios, macos] Added Objective-C example of placeholders
* [ios, macos] Documented trig functions
* [ios, macos] Also increase h3 code size
* [ios, macos] Replaced Markdown with HTML in definition
* [ios, macos] Replaced Markdown with HTML in custom function documentation
* [ios, macos] Clarified stops
* [ios, macos] Cross-referenced functions
Each custom function definition cross-references the corresponding aftermarket function (or vice versa), the corresponding style specification expression operator, and any related NSExpression syntax.
* [ios, macos] Fixed links in predicate guide
* [ios, macos] Consolidated and documented NSExpression categories
Consolidated the NSExpression categories into a single category, with marks to separate different tasks. Documented the MGLAdditions category so that it shows up in the jazzy documentation.
* [ios, macos] Fixed NSExpression private category mixup
Fixes issue #11729. Close relative of issue #10956.
It is possible for us to receive Glyphs from the server that are valid, but have an invalid bitmap. In that case, the glyphs will be present in the `GlyphMap` used for shaping, but not present in the `GlyphPositions` used in `getGlyphQuads`. `SymbolInstance::hasText` looked at the shaping instead of the actual quads.
`symbol_projection.cpp` should never try to project a label without any quads, but we'll also try to make it so that it doesn't crash if it does.
`CATransform3D`'s matrix is internally typed as `CGFloat`, which we were implicitly casting to from `double`.... except that the `-Wc++11-narrowing` flag disallows implicit narrowing casts and we need `double` precision, anyway.
* [ios, macos] Use MGLMatrix4 a 4x4 double matrix for MGLOpenGLStyleLayer projection matrix.
* [ios, macos] Don't use union for MGLMatrix4