streamline web documentation

This is the next step in reducing the amount of typing
in bookmaker, and presenting a web-base interface that
more closely matches the include documentation.

Moving towards making xxx_Reference solely contain
use documentation, and xxx_Overview (unpublished)
contain theory of operation documentation.

Fixed quite a few bugs along the way, and made
function and member documentation tighter.

TBR=caryclark@google.com
Docs-Preview: https://skia.org/?cl=160640
Change-Id: I763df4d59baa5dfd0177f0523294b5316434c4b0
Reviewed-on: https://skia-review.googlesource.com/c/160640
Reviewed-by: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@skia.org>
Auto-Submit: Cary Clark <caryclark@skia.org>
diff --git a/docs/SkBitmap_Reference.bmh b/docs/SkBitmap_Reference.bmh
index f4ed0a3..7faaf33 100644
--- a/docs/SkBitmap_Reference.bmh
+++ b/docs/SkBitmap_Reference.bmh
@@ -43,10 +43,7 @@
 #Class Allocator
 #Line # abstract subclass of HeapAllocator ##
 #Code
-    class Allocator : public SkRefCnt {
-    public:
-        virtual bool allocPixelRef(SkBitmap* bitmap) = 0;
-    };
+#Populate
 ##
 
 Abstract subclass of HeapAllocator.
@@ -79,10 +76,7 @@
 #Line # allocates pixel memory from heap ##
 
 #Code
-    class HeapAllocator : public Allocator {
-    public:
-        bool allocPixelRef(SkBitmap* bitmap) override;
-    };
+#Populate
 ##
 
 Subclass of SkBitmap::Allocator that returns a Pixel_Ref that allocates its pixel
@@ -877,12 +871,12 @@
     SkBitmap bitmap;
     SkAlphaType alphaTypes[] = { #list_of_alpha_types#
                                };
-    SkDebugf("%88s", "Canonical    Unknown           Opaque            Premul            Unpremul\n");
+    SkDebugf("%18s%15s%17s%18s%19s\n", "Canonical", "Unknown", "Opaque", "Premul", "Unpremul");
     for (SkColorType colorType : { #list_of_color_types#
                                  } ) {
         for (SkAlphaType canonicalAlphaType : alphaTypes) {
             SkColorTypeValidateAlphaType(colorType, kUnknown_SkAlphaType, &canonicalAlphaType );
-            SkDebugf("%10s %10s ", colors[(int) colorType], alphas[(int) canonicalAlphaType ]);
+            SkDebugf("%12s %9s  ", colors[(int) colorType], alphas[(int) canonicalAlphaType ]);
             for (SkAlphaType alphaType : alphaTypes) {
                 bitmap.setInfo(SkImageInfo::Make(4, 4, colorType, canonicalAlphaType));
                 bool result = bitmap.setAlphaType(alphaType);
@@ -1309,7 +1303,7 @@
     SkDebugf("dimensionsAsBounds %c= bounds\n", dimensionsAsBounds == bounds ? '=' : '!');
 ##
 
-#SeeAlso height() width()
+#SeeAlso height width
 
 ##
 
@@ -1403,9 +1397,7 @@
 #Enum AllocFlags
 #Line # zero pixel memory ##
 #Code
-    enum AllocFlags {
-        kZeroPixels_AllocFlag = 1 << 0,
-    };
+#Populate
 ##
 
 AllocFlags provides the option to zero pixel memory when allocated.
@@ -1418,7 +1410,7 @@
 #NoExample
 ##
 
-#SeeAlso tryAllocPixelsFlags allocPixelsFlags erase() eraseColor
+#SeeAlso tryAllocPixelsFlags allocPixelsFlags erase eraseColor
 
 ##
 
@@ -3213,7 +3205,7 @@
     #StdOut ##
 ##
 
-#SeeAlso pixmap() installPixels readPixels writePixels
+#SeeAlso pixmap installPixels readPixels writePixels
 
 ##
 
diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh
index 4cf2ca6..8cbb609 100644
--- a/docs/SkCanvas_Reference.bmh
+++ b/docs/SkCanvas_Reference.bmh
@@ -1294,7 +1294,7 @@
 }
 ##
 
-#SeeAlso save() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restore() restoreToCount
+#SeeAlso save saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restore() restoreToCount
 
 #Method int save()
 
@@ -1334,7 +1334,7 @@
 }
 ##
 
-#SeeAlso saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restore() restoreToCount
+#SeeAlso saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restore restoreToCount
 
 ##
 
@@ -1358,7 +1358,7 @@
 }
 ##
 
-#SeeAlso save() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restoreToCount
+#SeeAlso save saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha restoreToCount
 
 ##
 
@@ -1390,7 +1390,7 @@
 ##
 ##
 
-#SeeAlso save() restore() restoreToCount
+#SeeAlso save restore restoreToCount
 
 ##
 
@@ -1424,7 +1424,7 @@
 ##
 ##
 
-#SeeAlso restore() getSaveCount save()
+#SeeAlso restore getSaveCount save
 
 ##
 
@@ -1498,7 +1498,7 @@
 }
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
 
 ##
 
@@ -1551,7 +1551,7 @@
 }
 ##
 
-#SeeAlso save() restore() saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
+#SeeAlso save restore saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
 
 ##
 
@@ -1608,7 +1608,7 @@
     }
     ##
 
-#SeeAlso save() restore() saveLayer saveLayerAlpha SaveLayerRec
+#SeeAlso save restore saveLayer saveLayerAlpha SaveLayerRec
 
 ##
 
@@ -1650,7 +1650,7 @@
     canvas->restore();
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests SaveLayerRec
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests SaveLayerRec
 
 ##
 
@@ -1712,7 +1712,7 @@
 }
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha SaveLayerRec
 
 #Enum ##
 
@@ -1815,7 +1815,7 @@
     ##
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
 
 ##
 
@@ -1841,7 +1841,7 @@
     ##
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
 
 ##
 
@@ -1872,7 +1872,7 @@
     ##
 ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
 
 ##
 
@@ -1903,7 +1903,7 @@
 
 #Return                SaveLayerRec fully specified ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
 
 ##
 
@@ -1954,7 +1954,7 @@
 
 #ToDo above example needs to replace GetResourceAsImage with way to select image in fiddle ##
 
-#SeeAlso save() restore() saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
+#SeeAlso save restore saveLayer saveLayerPreserveLCDTextRequests saveLayerAlpha
 
 ##
 
diff --git a/docs/SkColor_Reference.bmh b/docs/SkColor_Reference.bmh
index c71ad1f..82f6d60 100644
--- a/docs/SkColor_Reference.bmh
+++ b/docs/SkColor_Reference.bmh
@@ -33,7 +33,7 @@
 #Line # defines Alpha as eight bits ##
 
 #Code
-typedef uint8_t SkAlpha;
+#Populate
 ##
 
 8-bit type for an alpha value. 255 is 100% opaque, zero is 100% transparent.
@@ -48,7 +48,7 @@
 #Line # defines Color as 32 bits ##
 
 #Code
-typedef uint32_t SkColor;
+#Populate
 ##
 
 32-bit ARGB Color value, Unpremultiplied. Color components are always in
@@ -99,9 +99,7 @@
 #Line # returns opaque Color ##
 
 #Code
-###$
-    #define SkColorSetRGB(r, g, b)  SkColorSetARGB(0xFF, r, g, b)
-$$$#
+#Populate
 ##
 
 Returns Color value from 8-bit component values, with Alpha set
@@ -131,9 +129,7 @@
 #Line # returns Alpha component ##
 
 #Code
-###$
-    #define SkColorGetA(color)      (((color) >> 24) & 0xFF)
-$$$#
+#Populate
 ##
 
 Returns Alpha byte from Color value.
@@ -163,9 +159,7 @@
 #Line # returns red component ##
 
 #Code
-###$
-    #define SkColorGetR(color)      (((color) >> 16) & 0xFF)
-$$$#
+#Populate
 ##
 
 Returns red component of Color, from zero to 255.
@@ -194,9 +188,7 @@
 #Line # returns green component ##
 
 #Code
-###$
-    #define SkColorGetG(color)      (((color) >>  8) & 0xFF)
-$$$#
+#Populate
 ##
 
 Returns green component of Color, from zero to 255.
@@ -225,9 +217,7 @@
 #Line # returns blue component ##
 
 #Code
-###$
-    #define SkColorGetB(color)      (((color) >>  0) & 0xFF)
-$$$#
+#Populate
 ##
 
 Returns blue component of Color, from zero to 255.
@@ -286,10 +276,10 @@
 #Subtopic Alpha_Constants
 #In Constant
 #Line # constants for Alpha ##
+#Filter SK_Alpha
 
 #Code
-    constexpr SkAlpha SK_AlphaTRANSPARENT = 0x00;
-    constexpr SkAlpha SK_AlphaOPAQUE      = 0xFF;
+#Populate
 ##
 
 Alpha constants are conveniences to represent fully transparent and fully
@@ -297,19 +287,15 @@
 
 #Const SK_AlphaTRANSPARENT 0x00
 #Line # fully transparent SkAlpha ##
-#Details Transparent
 Represents fully transparent SkAlpha value. SkAlpha ranges from zero,
 fully transparent; to 255, fully opaque.
 ##
 #Const SK_AlphaOPAQUE 0xFF
 #Line # fully opaque SkAlpha ##
-#Details Opaque
 Represents fully opaque SkAlpha value. SkAlpha ranges from zero,
 fully transparent; to 255, fully opaque.
 ##
 
-#Subtopic Transparent
-
 #Example
 #Image 1
 #Height 128
@@ -348,17 +334,15 @@
     canvas->drawBitmap(bitmap, 0, 0);
 ##
 
-#SeeAlso SkAlpha SK_ColorTRANSPARENT SK_AlphaOPAQUE
-
-#Subtopic Transparent ##
 
 # ------------------------------------------------------------------------------
 
-#Subtopic Opaque
-
 #Example
 #Image 1
 #Height 128
+#Description
+Color the parts of the bitmap green if they contain fully opaque pixels.
+##
     std::vector<int32_t> srcPixels;
     srcPixels.resize(source.height() * source.rowBytes());
     SkPixmap pixmap(SkImageInfo::MakeN32Premul(source.width(), source.height()),
@@ -378,92 +362,30 @@
     canvas->drawBitmap(bitmap, 0, 0);
 ##
 
-#SeeAlso SkAlpha SK_AlphaTRANSPARENT
+#SeeAlso SkAlpha SK_ColorTRANSPARENT SK_ColorBLACK
 
-#Subtopic Opaque ##
 #Subtopic Alpha_Constants ##
 
 #Subtopic Color_Constants
 #In Constant
 #Line # constants for Color ##
+#Filter SK_Color
 
-# ------------------------------------------------------------------------------
 #Code
-    constexpr SkColor SK_ColorTRANSPARENT = SkColorSetARGB(0x00, 0x00, 0x00, 0x00);
-    constexpr SkColor SK_ColorBLACK       = SkColorSetARGB(0xFF, 0x00, 0x00, 0x00);
-    constexpr SkColor SK_ColorDKGRAY      = SkColorSetARGB(0xFF, 0x44, 0x44, 0x44);
-    constexpr SkColor SK_ColorGRAY        = SkColorSetARGB(0xFF, 0x88, 0x88, 0x88);
-    constexpr SkColor SK_ColorLTGRAY      = SkColorSetARGB(0xFF, 0xCC, 0xCC, 0xCC);
-    constexpr SkColor SK_ColorWHITE       = SkColorSetARGB(0xFF, 0xFF, 0xFF, 0xFF);
-    constexpr SkColor SK_ColorRED         = SkColorSetARGB(0xFF, 0xFF, 0x00, 0x00);
-    constexpr SkColor SK_ColorGREEN       = SkColorSetARGB(0xFF, 0x00, 0xFF, 0x00);
-    constexpr SkColor SK_ColorBLUE        = SkColorSetARGB(0xFF, 0x00, 0x00, 0xFF);
-    constexpr SkColor SK_ColorYELLOW      = SkColorSetARGB(0xFF, 0xFF, 0xFF, 0x00);
-    constexpr SkColor SK_ColorCYAN        = SkColorSetARGB(0xFF, 0x00, 0xFF, 0xFF);
-    constexpr SkColor SK_ColorMAGENTA     = SkColorSetARGB(0xFF, 0xFF, 0x00, 0xFF);
+#Populate
 ##
 
 Color names are provided as conveniences, but are not otherwise special.
 The values chosen for names may not be the same as values used by
 SVG, HTML, CSS, or colors named by a platform.
 
-#Example
-###$
-$Function
-#define SKIA_COLOR_PAIR(name) "SK_Color" #name, SK_Color##name
-$$
-void draw(SkCanvas* canvas) {
-    struct ColorCompare {
-        const char* fSVGName;
-        SkColor fSVGColor;
-        const char* fSkiaName;
-        SkColor fSkiaColor;
-    } colorCompare[] = {  // see https://www.w3.org/TR/SVG/types.html#ColorKeywords
-        {"black",     SkColorSetRGB(  0,   0,   0),    SKIA_COLOR_PAIR(BLACK) },
-        {"darkgray",  SkColorSetRGB(169, 169, 169),    SKIA_COLOR_PAIR(DKGRAY) },
-        {"gray",      SkColorSetRGB(128, 128, 128),    SKIA_COLOR_PAIR(GRAY) },
-        {"lightgray", SkColorSetRGB(211, 211, 211),    SKIA_COLOR_PAIR(LTGRAY) },
-        {"white",     SkColorSetRGB(255, 255, 255),    SKIA_COLOR_PAIR(WHITE) },
-        {"red",       SkColorSetRGB(255,   0,   0),    SKIA_COLOR_PAIR(RED) },
-        {"green",     SkColorSetRGB(  0, 128,   0),    SKIA_COLOR_PAIR(GREEN) },
-        {"blue",      SkColorSetRGB(  0,   0, 255),    SKIA_COLOR_PAIR(BLUE) },
-        {"yellow",    SkColorSetRGB(255, 255,   0),    SKIA_COLOR_PAIR(YELLOW) },
-        {"aqua",      SkColorSetRGB(  0, 255, 255),    SKIA_COLOR_PAIR(CYAN) },
-        {"fuchsia",   SkColorSetRGB(255,   0, 255),    SKIA_COLOR_PAIR(MAGENTA) },
-    };
-    SkPaint paint;
-    paint.setAntiAlias(true);
-    paint.setTextSize(14);
-    for (auto compare : colorCompare) {
-        paint.setStyle(SkPaint::kFill_Style);
-        paint.setColor(compare.fSVGColor);
-        canvas->drawRect({5, 5, 15, 15}, paint);
-        paint.setColor(SK_ColorBLACK);
-        canvas->drawString(compare.fSVGName, 20, 16, paint);
-        paint.setColor(compare.fSkiaColor);
-        canvas->drawRect({105, 5, 115, 15}, paint);
-        paint.setColor(SK_ColorBLACK);
-        canvas->drawString(compare.fSkiaName, 120, 16, paint);
-        paint.setStyle(SkPaint::kStroke_Style);
-        canvas->drawRect({5, 5, 15, 15}, paint);
-        canvas->drawRect({105, 5, 115, 15}, paint);
-        canvas->translate(0, 20);
-    }
-}
-$$$#
-##
-
-# ------------------------------------------------------------------------------
-
 #Const SK_ColorTRANSPARENT 0x00000000
 #Line # transparent Color ##
-#Details Transparent
     Represents fully transparent SkColor. May be used to initialize a destination
     containing a mask or a non-rectangular image.
 ##
 #Const SK_ColorBLACK 0xFF000000
 #Line # black Color ##
-#Details Black
     Represents fully opaque black.
 ##
 #Const SK_ColorDKGRAY 0xFF444444
@@ -511,11 +433,56 @@
     Represents fully opaque magenta. HTML_Fuchsia is equivalent.
 ##
 
-# ------------------------------------------------------------------------------
-
-#Subtopic Transparent
+#Example
+###$
+$Function
+#define SKIA_COLOR_PAIR(name) "SK_Color" #name, SK_Color##name
+$$
+void draw(SkCanvas* canvas) {
+    struct ColorCompare {
+        const char* fSVGName;
+        SkColor fSVGColor;
+        const char* fSkiaName;
+        SkColor fSkiaColor;
+    } colorCompare[] = {  // see https://www.w3.org/TR/SVG/types.html#ColorKeywords
+        {"black",     SkColorSetRGB(  0,   0,   0),    SKIA_COLOR_PAIR(BLACK) },
+        {"darkgray",  SkColorSetRGB(169, 169, 169),    SKIA_COLOR_PAIR(DKGRAY) },
+        {"gray",      SkColorSetRGB(128, 128, 128),    SKIA_COLOR_PAIR(GRAY) },
+        {"lightgray", SkColorSetRGB(211, 211, 211),    SKIA_COLOR_PAIR(LTGRAY) },
+        {"white",     SkColorSetRGB(255, 255, 255),    SKIA_COLOR_PAIR(WHITE) },
+        {"red",       SkColorSetRGB(255,   0,   0),    SKIA_COLOR_PAIR(RED) },
+        {"green",     SkColorSetRGB(  0, 128,   0),    SKIA_COLOR_PAIR(GREEN) },
+        {"blue",      SkColorSetRGB(  0,   0, 255),    SKIA_COLOR_PAIR(BLUE) },
+        {"yellow",    SkColorSetRGB(255, 255,   0),    SKIA_COLOR_PAIR(YELLOW) },
+        {"aqua",      SkColorSetRGB(  0, 255, 255),    SKIA_COLOR_PAIR(CYAN) },
+        {"fuchsia",   SkColorSetRGB(255,   0, 255),    SKIA_COLOR_PAIR(MAGENTA) },
+    };
+    SkPaint paint;
+    paint.setAntiAlias(true);
+    paint.setTextSize(14);
+    for (auto compare : colorCompare) {
+        paint.setStyle(SkPaint::kFill_Style);
+        paint.setColor(compare.fSVGColor);
+        canvas->drawRect({5, 5, 15, 15}, paint);
+        paint.setColor(SK_ColorBLACK);
+        canvas->drawString(compare.fSVGName, 20, 16, paint);
+        paint.setColor(compare.fSkiaColor);
+        canvas->drawRect({105, 5, 115, 15}, paint);
+        paint.setColor(SK_ColorBLACK);
+        canvas->drawString(compare.fSkiaName, 120, 16, paint);
+        paint.setStyle(SkPaint::kStroke_Style);
+        canvas->drawRect({5, 5, 15, 15}, paint);
+        canvas->drawRect({105, 5, 115, 15}, paint);
+        canvas->translate(0, 20);
+    }
+}
+$$$#
+##
 
 #Example
+#Description
+SK_ColorTRANSPARENT sets Color Alpha and components to zero.
+##
 #Image 3
     std::vector<uint32_t> srcPixels;
     constexpr int width = 256;
@@ -532,15 +499,10 @@
     canvas->drawBitmap(bitmap, 48, 48);
 ##
 
-#SeeAlso SK_AlphaTRANSPARENT SkCanvas::clear
-
-##
-
-# ------------------------------------------------------------------------------
-
-#Subtopic Black
-
 #Example
+#Description
+SK_ColorBLACK sets Color Alpha to one and components to zero.
+##
     std::vector<uint32_t> srcPixels;
     constexpr int width = 256;
     constexpr int height = 256;
@@ -556,15 +518,10 @@
     canvas->drawBitmap(bitmap, 48, 48);
 ##
 
-#SeeAlso SK_ColorTRANSPARENT
-
-##
-
-# ------------------------------------------------------------------------------
-
-#Subtopic White
-
 #Example
+#Description
+SK_ColorWHITE sets Color Alpha and components to one.
+##
     std::vector<uint32_t> srcPixels;
     constexpr int width = 256;
     constexpr int height = 256;
@@ -580,9 +537,7 @@
     canvas->drawBitmap(bitmap, 48, 48);
 ##
 
-#SeeAlso SK_ColorTRANSPARENT
-
-##
+#SeeAlso SK_ColorTRANSPARENT SkCanvas::clear SK_AlphaOPAQUE
 
 #Subtopic Color_Constants ##
 
@@ -766,7 +721,7 @@
 #Line # defines Premultiplied Color as 32 bits ##
 
 #Code
-typedef uint32_t SkPMColor;
+#Populate
 ##
 
 32-bit ARGB color value, Premultiplied. The byte order for this value is
diff --git a/docs/SkIRect_Reference.bmh b/docs/SkIRect_Reference.bmh
index 00f4f8a..2d90880 100644
--- a/docs/SkIRect_Reference.bmh
+++ b/docs/SkIRect_Reference.bmh
@@ -14,8 +14,6 @@
 is less than or equal to its left, or if its bottom is less than or equal to
 its top, it is considered empty.
 
-#Subtopic Members
-
 #Member int32_t  fLeft
 #Line # smaller x-axis bounds ##
 May contain any value. The smaller of the horizontal values when sorted.
@@ -40,10 +38,6 @@
 When equal to or less than fTop, IRect is empty.
 ##
 
-#Subtopic Members ##
-
-#Subtopic Constructors
-
 # ------------------------------------------------------------------------------
 
 #Method static constexpr SkIRect MakeEmpty()
@@ -203,8 +197,6 @@
 
 ##
 
-#Subtopic Constructors ##
-
 #Subtopic Property
 #Line # member values, center, validity ##
 ##
diff --git a/docs/SkImage_Reference.bmh b/docs/SkImage_Reference.bmh
index 2a8f35d..7ca584a 100644
--- a/docs/SkImage_Reference.bmh
+++ b/docs/SkImage_Reference.bmh
@@ -134,7 +134,7 @@
 #Line # parameter type for MakeFromRaster ##
 
 #Code
-typedef void* ReleaseContext;
+#Populate
 ##
 
 Caller data passed to RasterReleaseProc; may be nullptr.
@@ -147,7 +147,7 @@
 #Line #  parameter type for MakeFromRaster ##
 
 #Code
-typedef void (*RasterReleaseProc)(const void* pixels, ReleaseContext);
+#Populate
 ##
 
 Function called when Image no longer shares pixels. ReleaseContext is
@@ -340,7 +340,7 @@
 #Line # parameter type for MakeFromTexture ##
 
 #Code
-typedef void (*TextureReleaseProc)(ReleaseContext releaseContext);
+#Populate
 ##
 
 User function called when supplied texture may be deleted.
@@ -855,10 +855,7 @@
 #EnumClass BitDepth
 #Line # options for MakeFromPicture ##
 #Code
-    enum class BitDepth {
-        kU8,
-        kF16,
-    };
+#Populate
 ##
 
 #Const kU8 0
@@ -1538,10 +1535,7 @@
 #Enum CachingHint
 #Line # options for readPixels and scalePixels ##
 #Code
-    enum CachingHint {
-        kAllow_CachingHint,
-        kDisallow_CachingHint,
-    };
+#Populate
 ##
 
 CachingHint selects whether Skia may internally cache Bitmaps generated by
@@ -2115,7 +2109,7 @@
 #Line # parameter type for MakeBackendTextureFromSkImage ##
 
 #Code
-typedef std::function<void(GrBackendTexture)> BackendTextureReleaseProc;
+#Populate
 ##
 
 Defines a callback function, taking one parameter of type GrBackendTexture with
@@ -2197,9 +2191,7 @@
 #Enum LegacyBitmapMode
 #Deprecated soon
 #Code
-    enum LegacyBitmapMode {
-        kRO_LegacyBitmapMode,
-    };
+#Populate
 ##
 
 #Const kRO_LegacyBitmapMode 0
diff --git a/docs/SkMatrix_Reference.bmh b/docs/SkMatrix_Reference.bmh
index 7843bf1..0d5475b 100644
--- a/docs/SkMatrix_Reference.bmh
+++ b/docs/SkMatrix_Reference.bmh
@@ -162,13 +162,7 @@
 #Enum TypeMask
 #Line # bit field for Matrix complexity ##
 #Code
-    enum TypeMask {
-        kIdentity_Mask = 0,
-        kTranslate_Mask = 0x01,
-        kScale_Mask = 0x02,
-        kAffine_Mask = 0x04,
-        kPerspective_Mask = 0x08,
-    };
+#Populate
 ##
 
 Enum of bit fields for mask returned by getType.
@@ -613,17 +607,9 @@
 #Subtopic MemberIndex
 #In Constant
 #Line # member indices ##
-
+#Filter kM
 #Code
-    static constexpr int kMScaleX = 0;
-    static constexpr int kMSkewX  = 1;
-    static constexpr int kMTransX = 2;
-    static constexpr int kMSkewY  = 3;
-    static constexpr int kMScaleY = 4;
-    static constexpr int kMTransY = 5;
-    static constexpr int kMPersp0 = 6;
-    static constexpr int kMPersp1 = 7;
-    static constexpr int kMPersp2 = 8;
+#Populate
 ##
 
 Matrix organizes its values in row order. These members correspond to
@@ -687,14 +673,10 @@
 #Subtopic AffineIndex
 #In Constant
 #Line # affine member indices ##
+#Filter KA
 
 #Code
-    static constexpr int kAScaleX = 0;
-    static constexpr int kASkewY  = 1;
-    static constexpr int kASkewX  = 2;
-    static constexpr int kAScaleY = 3;
-    static constexpr int kATransX = 4;
-    static constexpr int kATransY = 5;
+#Populate
 ##
 
 Affine arrays are in column major order to match the matrix used by
diff --git a/docs/SkPaint_Reference.bmh b/docs/SkPaint_Reference.bmh
index 8af62ba..8316c9e 100644
--- a/docs/SkPaint_Reference.bmh
+++ b/docs/SkPaint_Reference.bmh
@@ -40,12 +40,7 @@
 Multiple colors are drawn either by using multiple paints or with objects like
 Shader attached to Paint.
 
-#Subtopic Initializers
-#Line # constructors and initialization ##
-
 #Method SkPaint()
-
-#In Initializers
 #Line # constructs with default values ##
 Constructs Paint with default values.
 
@@ -113,8 +108,6 @@
 ##
 
 #Method SkPaint(const SkPaint& paint)
-
-#In Initializers
 #Line # makes a shallow copy ##
 Makes a shallow copy of Paint. Typeface, Path_Effect, Shader,
 Mask_Filter, Color_Filter, Draw_Looper, and Image_Filter are shared
@@ -147,8 +140,6 @@
 ##
 
 #Method SkPaint(SkPaint&& paint)
-
-#In Initializers
 #Line # moves paint without copying it ##
     Implements a move constructor to avoid increasing the reference counts
     of objects referenced by the paint.
@@ -176,8 +167,7 @@
 # ------------------------------------------------------------------------------
 
 #Method void reset()
-
-#In Initializers
+#In Constructors
 #Line # sets to default values ##
 Sets all Paint contents to their initial values. This is equivalent to replacing
 Paint with the result of SkPaint().
@@ -195,12 +185,9 @@
 
 ##
 
-#Subtopic Initializers ##
-
 # ------------------------------------------------------------------------------
 
 #Method ~SkPaint()
-
 #Line # decreases Reference_Count of owned objects ##
 Decreases Paint Reference_Count of owned objects: Typeface, Path_Effect, Shader,
 Mask_Filter, Color_Filter, Draw_Looper, and Image_Filter. If the
@@ -216,9 +203,9 @@
 
 #Subtopic Management
 #Line # paint copying, moving, comparing ##
+##
 
 #Method SkPaint& operator=(const SkPaint& paint)
-
 #In Management
 #Line # makes a shallow copy ##
 Makes a shallow copy of Paint. Typeface, Path_Effect, Shader,
@@ -250,7 +237,6 @@
 # ------------------------------------------------------------------------------
 
 #Method SkPaint& operator=(SkPaint&& paint)
-
 #In Management
 #Line # moves paint without copying it ##
 Moves the paint to avoid increasing the reference counts
@@ -280,8 +266,6 @@
 # ------------------------------------------------------------------------------
 
 #Method bool operator==(const SkPaint& a, const SkPaint& b)
-
-#In Management
 #Line # compares paints for equality ##
     Compares a and b, and returns true if a and b are equivalent. May return false
     if Typeface, Path_Effect, Shader, Mask_Filter, Color_Filter,
@@ -313,8 +297,6 @@
 # ------------------------------------------------------------------------------
 
 #Method bool operator!=(const SkPaint& a, const SkPaint& b)
-
-#In Management
 #Line # compares paints for inequality ##
     Compares a and b, and returns true if a and b are not equivalent. May return true
     if Typeface, Path_Effect, Shader, Mask_Filter, Color_Filter,
@@ -343,7 +325,6 @@
 # ------------------------------------------------------------------------------
 
 #Method uint32_t getHash() const
-
 #In Management
 #Line # returns a shallow hash for equality checks ##
 Returns a hash generated from Paint values and pointers.
@@ -374,23 +355,17 @@
 
 ##
 
-#Subtopic Management ##
-
 # ------------------------------------------------------------------------------
 
 #Subtopic Hinting
 #Line # glyph outline adjustment ##
+##
 
 #Enum Hinting
 #Line # level of glyph outline adjustment ##
 
 #Code
-    enum Hinting {
-        kNo_Hinting            = 0,
-        kSlight_Hinting        = 1,
-        kNormal_Hinting        = 2,
-        kFull_Hinting          = 3,
-    };
+#Populate
 ##
 
 Hinting adjusts the glyph outlines so that the shape provides a uniform
@@ -450,7 +425,6 @@
 #Enum ##
 
 #Method Hinting getHinting() const
-
 #In Hinting
 #Line # returns Hinting, glyph outline adjustment level ##
     Returns level of glyph outline adjustment.
@@ -498,29 +472,16 @@
     ##
 ##
 
-#Subtopic Hinting ##
 # ------------------------------------------------------------------------------
 #Subtopic Flags
 #Line # attributes represented by single bits ##
+##
 
 #Enum Flags
 #Line # values described by bits and masks ##
 
 #Code
-    enum Flags {
-        kAntiAlias_Flag       = 0x01,
-        kDither_Flag          = 0x04,
-        kFakeBoldText_Flag    = 0x20,
-        kLinearText_Flag      = 0x40,
-        kSubpixelText_Flag    = 0x80,
-        kLCDRenderText_Flag   = 0x200,
-        kEmbeddedBitmapText_Flag = 0x400,
-        kAutoHinting_Flag     = 0x800,
-        kVerticalText_Flag    = 0x1000,
-
-        kAllFlags = 0xFFFF,
-    };
-
+#Populate
 ##
 
 The bit values stored in Flags.
@@ -571,10 +532,7 @@
 Only valid for Android framework.
 
 #Code
-    enum ReserveFlags {
-        kUnderlineText_ReserveFlag   = 0x08,
-        kStrikeThruText_ReserveFlag  = 0x10,
-    };
+#Populate
 ##
 
 #Const kUnderlineText_ReserveFlag   0x0008
@@ -586,7 +544,6 @@
 ##
 
 #Method uint32_t getFlags() const
-
 #In Flags
 #Line # returns Flags stored in a bit field ##
 Returns paint settings described by Flags. Each setting uses one
@@ -608,7 +565,6 @@
 ##
 
 #Method void setFlags(uint32_t flags)
-
 #In Flags
 #Line # sets multiple Flags in a bit field ##
 Replaces Flags with flags, the union of the Flags members.
@@ -630,7 +586,6 @@
 
 ##
 
-#Subtopic Flags ##
 # ------------------------------------------------------------------------------
 #Subtopic Anti_Alias
 #Alias Anti_Alias
@@ -697,6 +652,7 @@
         }
     }
 ##
+#Subtopic Anti_Alias ##
 
 #Method bool isAntiAlias() const
 #In Anti_alias
@@ -724,7 +680,6 @@
 ##
 
 #Method void setAntiAlias(bool aa)
-
 #In Anti_alias
 #Line # sets or clears Anti_Alias ##
     Requests, but does not require, that Path edge pixels draw opaque or with
@@ -748,7 +703,6 @@
 
 ##
 
-#Subtopic Anti_Alias ##
 # ------------------------------------------------------------------------------
 #Subtopic Dither
 #Line # distributing color error ##
@@ -824,9 +778,10 @@
     canvas->drawBitmap(bm32, 0, 11, &paint);
 }
 ##
+#SeeAlso Gradient kRGB_565_SkColorType
+#Subtopic Dither ##
 
 #Method bool isDither() const
-
 #In Dither
 #Line # returns true if Dither is set ##
     Returns true if color error may be distributed to smooth color transition.
@@ -852,7 +807,6 @@
 ##
 
 #Method void setDither(bool dither)
-
 #In Dither
 #Line # sets or clears Dither ##
     Requests, but does not require, to distribute color error.
@@ -877,9 +831,6 @@
 
 ##
 
-#SeeAlso Gradient kRGB_565_SkColorType
-
-#Subtopic Dither ##
 # ------------------------------------------------------------------------------
 #Subtopic Device_Text
 #Line # increase precision of glyph position ##
@@ -936,11 +887,11 @@
 Linear_Text selects whether text is rendered as a Glyph or as a Path.
 If kLinearText_Flag is set, it has the same effect as setting Hinting to kNormal_Hinting.
 If kLinearText_Flag is clear, it is the same as setting Hinting to kNo_Hinting.
+#Subtopic Linear_Text ##
 
 #Method bool isLinearText() const
-
-#Line # returns true if text is converted to Path ##
 #In Linear_Text
+#Line # returns true if text is converted to Path ##
     Returns true if text is converted to Path before drawing and measuring.
 
     Equivalent to getFlags masked with kLinearText_Flag.
@@ -970,9 +921,8 @@
 ##
 
 #Method void setLinearText(bool linearText)
-
-#Line # converts to Path before draw or measure ##
 #In Linear_Text
+#Line # converts to Path before draw or measure ##
     Returns true if text is converted to Path before drawing and measuring.
     By default, kLinearText_Flag is clear.
 
@@ -1004,8 +954,6 @@
     #SeeAlso isLinearText Hinting
 ##
 
-#Subtopic Linear_Text ##
-
 #Subtopic Subpixel_Text
 #Alias Subpixel_Text ##
 #Line # uses pixel transparency to represent fractional offset ##
@@ -1013,9 +961,9 @@
 Flags kSubpixelText_Flag uses the pixel transparency to represent a fractional offset.
 As the opaqueness
 of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
+#Subtopic Subpixel_Text ##
 
 #Method bool isSubpixelText() const
-
 #In Subpixel_Text
 #Line # returns true if Subpixel_Text is set ##
     Returns true if Glyphs at different sub-pixel positions may differ on pixel edge coverage.
@@ -1041,7 +989,6 @@
 ##
 
 #Method void setSubpixelText(bool subpixelText)
-
 #In Subpixel_Text
 #Line # sets or clears Subpixel_Text ##
     Requests, but does not require, that Glyphs respect sub-pixel positioning.
@@ -1064,8 +1011,6 @@
 
 ##
 
-#Subtopic Subpixel_Text ##
-
 #Subtopic LCD_Text
 #Line # text relying on the order of RGB stripes ##
 
@@ -1079,9 +1024,9 @@
 on the small size of the stripe and visual perception to make the color fringing imperceptible.
 LCD_Text can be enabled on devices that orient stripes horizontally or vertically, and that order
 the color components as RGB or BGR.
+#Subtopic LCD_Text ##
 
 #Method bool isLCDRenderText() const
-
 #In LCD_Text
 #Line # returns true if LCD_Text is set ##
     Returns true if Glyphs may use LCD striping to improve glyph edges.
@@ -1107,7 +1052,6 @@
 ##
 
 #Method void setLCDRenderText(bool lcdText)
-
 #In LCD_Text
 #Line # sets or clears LCD_Text ##
     Requests, but does not require, that Glyphs use LCD striping for glyph edges.
@@ -1131,8 +1075,6 @@
 
 ##
 
-#Subtopic LCD_Text ##
-
 # ------------------------------------------------------------------------------
 #Subtopic Font_Embedded_Bitmaps
 #Line # custom sized bitmap Glyphs ##
@@ -1179,9 +1121,9 @@
     canvas->scale(10, 10);
     canvas->drawBitmap(bitmap, -2, 1);
 ##
+#Subtopic Font_Embedded_Bitmaps ##
 
 #Method bool isEmbeddedBitmapText() const
-
 #In Font_Embedded_Bitmaps
 #Line # returns true if Font_Embedded_Bitmaps is set ##
     Returns true if Font_Engine may return Glyphs from font bitmaps instead of from outlines.
@@ -1211,7 +1153,6 @@
 ##
 
 #Method void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
-
 #In Font_Embedded_Bitmaps
 #Line # sets or clears Font_Embedded_Bitmaps ##
     Requests, but does not require, to use bitmaps in fonts instead of outlines.
@@ -1234,7 +1175,6 @@
 
 ##
 
-#Subtopic Font_Embedded_Bitmaps ##
 # ------------------------------------------------------------------------------
 #Subtopic Automatic_Hinting
 #Line # always adjust glyph paths ##
@@ -1246,9 +1186,9 @@
 kSlight_Hinting.
 
 Automatic_Hinting only affects platforms that use FreeType as the Font_Manager.
+#Subtopic Automatic_Hinting ##
 
 #Method bool isAutohinted() const
-
 #In Automatic_Hinting
 #Line # returns true if Glyphs are always hinted ##
     Returns true if Hinting is set to kNormal_Hinting or kFull_Hinting, and if
@@ -1279,7 +1219,6 @@
 ##
 
 #Method void setAutohinted(bool useAutohinter)
-
 #In Automatic_Hinting
 #Line # sets Glyphs to always be hinted ##
     Sets whether to always hint Glyphs.
@@ -1317,7 +1256,6 @@
 
 ##
 
-#Subtopic Automatic_Hinting ##
 # ------------------------------------------------------------------------------
 #Subtopic Vertical_Text
 #Line # orient text from top to bottom ##
@@ -1357,9 +1295,9 @@
 }
 
 ##
+#Subtopic Vertical_Text ##
 
 #Method bool isVerticalText() const
-
 #In Vertical_Text
 #Line # returns true if Vertical_Text is set ##
     Returns true if Glyphs are drawn top to bottom instead of left to right.
@@ -1385,7 +1323,6 @@
 ##
 
 #Method void setVerticalText(bool verticalText)
-
 #In Vertical_Text
 #Line # sets or clears Vertical_Text ##
     Returns true if text advance positions the next glyph below the previous glyph instead of to the
@@ -1409,7 +1346,6 @@
 
 ##
 
-#Subtopic Vertical_Text ##
 # ------------------------------------------------------------------------------
 
 #Subtopic Fake_Bold
@@ -1444,9 +1380,9 @@
     canvas->drawString("OjYy_-", 10, 115, paint);
 }
 ##
+#Subtopic Fake_Bold ##
 
 #Method bool isFakeBoldText() const
-
 #In Fake_Bold
 #Line # returns true if Fake_Bold is set ##
     Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
@@ -1473,7 +1409,6 @@
 ##
 
 #Method void setFakeBoldText(bool fakeBoldText)
-
 #In Fake_Bold
 #Line # sets or clears Fake_Bold ##
     Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
@@ -1496,8 +1431,6 @@
 
 ##
 
-#Subtopic Fake_Bold ##
-
 # ------------------------------------------------------------------------------
 #Subtopic Full_Hinting_Spacing
 #Line # glyph spacing affected by hinting ##
@@ -1510,6 +1443,7 @@
 
 Full_Hinting_Spacing is not related to text Kerning, where the space between
 a specific pair of characters is adjusted using data in the font Kerning tables.
+#Subtopic Full_Hinting_Spacing ##
 
 #Method bool isDevKernText() const
 #Deprecated
@@ -1519,7 +1453,6 @@
 #Deprecated
 ##
 
-#Subtopic Full_Hinting_Spacing ##
 # ------------------------------------------------------------------------------
 #Subtopic Filter_Quality_Methods
 #Line # get and set Filter_Quality ##
@@ -1556,9 +1489,9 @@
     }
 }
 ##
+#Subtopic Filter_Quality_Methods ##
 
 #Method SkFilterQuality getFilterQuality() const
-
 #In Filter_Quality_Methods
 #Line # returns Filter_Quality, image filtering level ##
 Returns Filter_Quality, the image filtering level. A lower setting
@@ -1582,7 +1515,6 @@
 
 
 #Method void setFilterQuality(SkFilterQuality quality)
-
 #In Filter_Quality_Methods
 #Line # sets Filter_Quality, the image filtering level ##
 Sets Filter_Quality, the image filtering level. A lower setting
@@ -1608,7 +1540,6 @@
 
 ##
 
-#Subtopic Filter_Quality_Methods ##
 # ------------------------------------------------------------------------------
 #Subtopic Color_Methods
 #Line # get and set Color ##
@@ -1653,6 +1584,7 @@
         canvas->drawCircle(65, 65, 40, paint);
     }
 ##
+#Subtopic Color_Methods ##
 
 #Method SkColor getColor() const
 #In Color_Methods
@@ -1758,15 +1690,13 @@
 
 ##
 
-#Subtopic Color_Methods ##
-
 #Subtopic Alpha_Methods
 #Line # get and set Alpha ##
 
 Color_Alpha sets the transparency independent of RGB: red, blue, and green.
+#Subtopic Alpha_Methods ##
 
 #Method uint8_t getAlpha() const
-
 #In Alpha_Methods
 #Line # returns Color_Alpha, color opacity ##
     Retrieves Alpha from the Color used when stroking and filling.
@@ -1785,7 +1715,6 @@
 ##
 
 #Method void setAlpha(U8CPU a)
-
 #In Alpha_Methods
 #Line # sets Color_Alpha, color opacity ##
     Replaces Alpha, leaving RGB
@@ -1809,10 +1738,7 @@
 
 ##
 
-#Subtopic Alpha_Methods ##
-
 #Method void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
-
 #In Color_Methods
 #Line # sets color by component ##
     Sets Color used when drawing solid fills. The color components range from 0 to 255.
@@ -1845,34 +1771,27 @@
 Style specifies if the geometry is filled, stroked, or both filled and stroked.
 Some shapes ignore Style and are always drawn filled or stroked.
 
+#Subtopic Fill
 Set Style to kFill_Style to fill the shape.
 The fill covers the area inside the geometry for most shapes.
-
-Set Style to kStroke_Style to stroke the shape.
-
-# ------------------------------------------------------------------------------
-#Subtopic Fill
-#Line # fill and stroke ##
-#ToDo write up whatever generalities make sense to describe filling  ##
-
-#SeeAlso Path_Fill_Type
 #Subtopic Fill ##
 
 #Subtopic Stroke
-#Line # lines and curves with width ##
+Set Style to kStroke_Style to stroke the shape.
+
 The stroke covers the area described by following the shape edge with a pen or brush of
 Stroke_Width. The area covered where the shape starts and stops is described by Stroke_Cap.
 The area covered where the shape turns a corner is described by Stroke_Join.
 The stroke is centered on the shape; it extends equally on either side of the shape edge.
+#Subtopic Stroke ##
 
 As Stroke_Width gets smaller, the drawn path frame is thinner. Stroke_Width less than one
 may have gaps, and if kAntiAlias_Flag is set, Color_Alpha will increase to visually decrease coverage.
-#Subtopic Stroke ##
+
+#SeeAlso Path_Fill_Type Path_Effect Style_Fill Style_Stroke
+#Subtopic Style ##
 
 #Subtopic Hairline
-#Line # lines and curves with minimal width ##
-#Alias Hairline ## # maybe should be Stroke_Hairline ?
-
 Stroke_Width of zero has a special meaning and switches drawing to use Hairline.
 Hairline draws the thinnest continuous frame. If kAntiAlias_Flag is clear, adjacent pixels
 flow horizontally, vertically,or diagonally.
@@ -1885,19 +1804,20 @@
 GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
 while stroking.
 
+#SeeAlso Path_Fill_Type Path_Effect Style_Fill Style_Stroke
 #Subtopic Hairline ##
 
 #Enum Style
 #Line # stroke, fill, or both ##
 
 #Code
-    enum Style {
-        kFill_Style,
-        kStroke_Style,
-        kStrokeAndFill_Style,
-    };
+#Populate
+##
 
-    static constexpr int kStyleCount = kStrokeAndFill_Style + 1;
+#Code
+#In Constant
+#Filter kStyle
+#Populate
 ##
 
 Set Style to fill, stroke, or both fill and stroke geometry.
@@ -1940,7 +1860,6 @@
 #Enum Style ##
 
 #Method Style getStyle() const
-
 #In Style
 #Line # returns Style: stroke, fill, or both ##
     Returns whether the geometry is filled, stroked, or filled and stroked.
@@ -1961,7 +1880,6 @@
 ##
 
 #Method void setStyle(Style style)
-
 #In Style
 #Line # sets Style: stroke, fill, or both ##
     Sets whether the geometry is filled, stroked, or filled and stroked.
@@ -2002,9 +1920,6 @@
 #SeeAlso Style getStyle
 ##
 
-#SeeAlso Path_Fill_Type Path_Effect Style_Fill Style_Stroke
-#Subtopic Style ##
-
 # ------------------------------------------------------------------------------
 #Subtopic Stroke_Width
 #Line # thickness perpendicular to geometry ##
@@ -2217,21 +2132,19 @@
 # ------------------------------------------------------------------------------
 #Subtopic Stroke_Cap
 #Line # decorations at ends of open strokes ##
+#Subtopic Stroke_Cap ##
 
 #Enum Cap
 #Line # start and end geometry on stroked shapes ##
 
 #Code
-    enum Cap {
-        kButt_Cap,
-        kRound_Cap,
-        kSquare_Cap,
+#Populate
+##
 
-        kLast_Cap = kSquare_Cap,
-        kDefault_Cap = kButt_Cap,
-    };
-
-    static constexpr int kCapCount = kLast_Cap + 1;
+#Code
+#In Constant
+#Filter kCap
+#Populate
 ##
 
 Stroke_Cap draws at the beginning and end of an open Path_Contour.
@@ -2345,10 +2258,10 @@
     #SeeAlso Stroke_Cap getStrokeCap
 ##
 
-#Subtopic Stroke_Cap ##
 # ------------------------------------------------------------------------------
 #Subtopic Stroke_Join
 #Line # decoration at corners of strokes ##
+#Subtopic Stroke_Join ##
 
 Stroke_Join draws at the sharp corners of an open or closed Path_Contour.
 
@@ -2378,16 +2291,13 @@
 #Enum Join
 #Line # corner geometry on stroked shapes ##
 #Code
-    enum Join {
-        kMiter_Join,
-        kRound_Join,
-        kBevel_Join,
+#Populate
+##
 
-        kLast_Join = kBevel_Join,
-        kDefault_Join = kMiter_Join,
-    };
-
-    static constexpr int kJoinCount = kLast_Join + 1;
+#Code
+#In Constant
+#Filter kJoin
+#Populate
 ##
 
 Join specifies how corners are drawn when a shape is stroked. Join
@@ -2505,7 +2415,6 @@
 
 #SeeAlso Miter_Limit
 
-#Subtopic Stroke_Join ##
 # ------------------------------------------------------------------------------
 #Subtopic Fill_Path
 #Line # make Path from Path_Effect, stroking ##
@@ -2528,6 +2437,10 @@
 If the Style is kStroke_Style and the Stroke_Width is zero, getFillPath
 returns false since Hairline has no filled equivalent.
 
+#SeeAlso Style_Stroke Stroke_Width Path_Effect
+
+#Subtopic Fill_Path ##
+
 #Method bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
                      SkScalar resScale = 1) const
 #In Fill_Path
@@ -2609,9 +2522,6 @@
 
 ##
 
-#SeeAlso Style_Stroke Stroke_Width Path_Effect
-
-#Subtopic Fill_Path ##
 # ------------------------------------------------------------------------------
 #Subtopic Shader_Methods
 #Line # get and set Shader ##
@@ -3493,13 +3403,13 @@
 #Enum Align
 #Line # glyph locations relative to text position ##
 #Code
-    enum Align {
-        kLeft_Align,
-        kCenter_Align,
-        kRight_Align,
-    };
+#Populate
+##
 
-    static constexpr int kAlignCount = 3;
+#Code
+#In Constant
+#Filter kAlign
+#Populate
 ##
 
 Align adjusts the text relative to the text position.
@@ -3812,12 +3722,7 @@
 #Line # character or glyph encoded size ##
 
 #Code
-    enum TextEncoding {
-        kUTF8_TextEncoding,
-        kUTF16_TextEncoding,
-        kUTF32_TextEncoding,
-        kGlyphID_TextEncoding,
-    };
+#Populate
 ##
 
 TextEncoding determines whether text specifies character codes and their encoded
@@ -3997,36 +3902,7 @@
 #Line # values computed by Font_Manager using Typeface ##
 
 #Code
-    struct FontMetrics {
-        enum FontMetricsFlags {
-            kUnderlineThicknessIsValid_Flag = 1 << 0,
-            kUnderlinePositionIsValid_Flag = 1 << 1,
-            kStrikeoutThicknessIsValid_Flag = 1 << 2,
-            kStrikeoutPositionIsValid_Flag = 1 << 3,
-        };
-
-        uint32_t    fFlags;
-        SkScalar    fTop;
-        SkScalar    fAscent;
-        SkScalar    fDescent;
-        SkScalar    fBottom;
-        SkScalar    fLeading;
-        SkScalar    fAvgCharWidth;
-        SkScalar    fMaxCharWidth;
-        SkScalar    fXMin;
-        SkScalar    fXMax;
-        SkScalar    fXHeight;
-        SkScalar    fCapHeight;
-        SkScalar    fUnderlineThickness;
-        SkScalar    fUnderlinePosition;
-        SkScalar    fStrikeoutThickness;
-        SkScalar    fStrikeoutPosition;
-
-        bool hasUnderlineThickness(SkScalar* thickness) const;
-        bool hasUnderlinePosition(SkScalar* position) const;
-        bool hasStrikeoutThickness(SkScalar* thickness) const;
-        bool hasStrikeoutPosition(SkScalar* position) const;
-    };
+#Populate
 ##
 
     FontMetrics is filled out by getFontMetrics. FontMetrics contents reflect the values
@@ -4047,12 +3923,7 @@
     #Line # valid Font_Metrics ##
 
     #Code
-        enum FontMetricsFlags {
-            kUnderlineThicknessIsValid_Flag = 1 << 0,
-            kUnderlinePositionIsValid_Flag = 1 << 1,
-            kStrikeoutThicknessIsValid_Flag = 1 << 2,
-            kStrikeoutPositionIsValid_Flag = 1 << 3,
-        };
+    #Populate
     ##
 
     FontMetricsFlags are set in fFlags when underline and strikeout metrics are valid;
diff --git a/docs/SkPath_Reference.bmh b/docs/SkPath_Reference.bmh
index 1ed7b46..d75f9c6 100644
--- a/docs/SkPath_Reference.bmh
+++ b/docs/SkPath_Reference.bmh
@@ -1128,7 +1128,8 @@
 #Line # returns if final Contour forms a loop ##
 Returns if Contour is closed.
 Contour is closed if Path Verb array was last modified by close(). When stroked,
-closed Contour draws Paint_Stroke_Join instead of Paint_Stroke_Cap at first and last Point.
+closed Contour draws Paint_Stroke_Join instead of Paint_Stroke_Cap at first and
+last Point.
 
 #Return  true if the last Contour ends with a kClose_Verb ##
 
diff --git a/docs/SkRect_Reference.bmh b/docs/SkRect_Reference.bmh
index 2585e0e..d6dc20d 100644
--- a/docs/SkRect_Reference.bmh
+++ b/docs/SkRect_Reference.bmh
@@ -42,8 +42,6 @@
 vertical values when sorted. When equal to or less than fTop, Rect is empty.
 ##
 
-#Subtopic Constructors
-
 # ------------------------------------------------------------------------------
 
 #Method static constexpr SkRect MakeEmpty()
@@ -294,8 +292,6 @@
 
 ##
 
-#Subtopic Constructors ##
-
 #Subtopic Property
 #Line # member values, center, validity ##