General clean up on bookmaker.

Command line runs without error for
SkBitmap, SkPath, SkRect, SkIRect,
SkPixmap, SkCanvas.

Docs-Preview: https://skia.org/?cl=57112
TBR: caryclark@google.com
Bug: skia:6898
Change-Id: I73b69ae8ffdf0a1e6bc187dc8a9dfb28f7766faa
Reviewed-on: https://skia-review.googlesource.com/57112
Reviewed-by: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@skia.org>
diff --git a/docs/SkBitmap_Reference.bmh b/docs/SkBitmap_Reference.bmh
index 35f4de6..2758023 100644
--- a/docs/SkBitmap_Reference.bmh
+++ b/docs/SkBitmap_Reference.bmh
@@ -223,6 +223,7 @@
         SkDebugf("pixel address = %p\n", bitmap.getPixels());
     }
 #StdOut
+#Volatile
 pixel address = (nil)
 pixel address = 0x560ddd0ac670
 ##
diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh
index 3e73691..486fe46 100644
--- a/docs/SkCanvas_Reference.bmh
+++ b/docs/SkCanvas_Reference.bmh
@@ -6104,4 +6104,55 @@
 ##
 
 #Class SkCanvas ##
+
+#Class SkAutoCanvasRestore
+
+Stack helper class calls SkCanvas::restoreToCount() when SkAutoCanvasRestore
+goes out of scope. Use this to guarantee that the canvas is restored to a known
+state.
+
+#Method SkAutoCanvasRestore(SkCanvas* canvas, bool doSave)
+
+Preserves Canvas save count. Optionally saves Canvas Clip and Matrix.
+
+#Param canvas  Canvas to guard ##
+#Param doSave  call SkCanvas::save() ##
+
+#Return utility to restore Canvas state on destructor ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso SkCanvas::save SkCanvas::restore
+
+##
+
+#Method ~SkAutoCanvasRestore()
+
+Restores Canvas to saved state.
+
+#Example
+// incomplete
+##
+
+#SeeAlso SkCanvas::save SkCanvas::restore
+
+##
+
+#Method void restore()
+
+Restores Canvas to saved state immediately. Subsequent calls and class 
+destructor have no effect.
+
+#Example
+// incomplete
+##
+
+#SeeAlso SkCanvas::save SkCanvas::restore
+
+##
+
+#Class SkAutoCanvasRestore ##
+
 #Topic Canvas ##
diff --git a/docs/SkIRect_Reference.bmh b/docs/SkIRect_Reference.bmh
index 0a9ddf8..d92c087 100644
--- a/docs/SkIRect_Reference.bmh
+++ b/docs/SkIRect_Reference.bmh
@@ -23,10 +23,10 @@
 #Subtopic Operators
 #Table
 #Legend
-# description                                                # function ##
+# description                                         # function ##
 #Legend ##
-# friend bool operator!=(const SkIRect& a, const SkIRect& b) # Returns true if members are unequal. ##
-# friend bool operator==(const SkIRect& a, const SkIRect& b) # Returns true if members are equal. ##
+# bool operator!=(const SkIRect& a, const SkIRect& b) # Returns true if members are unequal. ##
+# bool operator==(const SkIRect& a, const SkIRect& b) # Returns true if members are equal. ##
 #Table ##
 #Subtopic ##
 
@@ -106,7 +106,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkIRect SK_WARN_UNUSED_RESULT MakeEmpty()
+#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeEmpty()
 
 Returns constructed IRect set to (0, 0, 0, 0).
 Many other rectangles are empty; if left is equal to or greater than right,
@@ -166,7 +166,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h)
+#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h)
 
 Returns constructed IRect set to (0, 0, w, h). Does not validate input; w or h
 may be negative.
@@ -194,7 +194,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size)
+#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size)
 
 Returns constructed IRect set to (0, 0, size.width(), size.height()). 
 Does not validate input; size.width() or size.height() may be negative.
@@ -221,7 +221,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b)
+#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b)
 
 Returns constructed IRect set to (l, t, r, b). Does not sort input; Rect may
 result in fLeft greater than fRight, or fTop greater than fBottom.
@@ -252,7 +252,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h)
+#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h)
 
 Returns constructed IRect set to
 #Formula
@@ -266,7 +266,7 @@
 #Param w  added to x and stored in fRight ##
 #Param h  added to y and stored in fBottom ##
 
-#Return bounds (x, y, x + w, y + h) ##
+#Return bounds at (x, y) with width w and height h ##
 
 #Example
     SkIRect rect = SkIRect::MakeXYWH(5, 35, -15, 25);

@@ -627,7 +627,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method friend bool operator==(const SkIRect& a, const SkIRect& b)
+#Method bool operator==(const SkIRect& a, const SkIRect& b)
 
 Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are 
 identical to corresponding members in b.
@@ -652,7 +652,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method friend bool operator!=(const SkIRect& a, const SkIRect& b)
+#Method bool operator!=(const SkIRect& a, const SkIRect& b)
 
 Returns true if any member in a: fLeft, fTop, fRight, and fBottom; is not 
 identical to the corresponding member in b.
diff --git a/docs/SkMatrix_Reference.bmh b/docs/SkMatrix_Reference.bmh
index db7e7c3..0db0fa8 100644
--- a/docs/SkMatrix_Reference.bmh
+++ b/docs/SkMatrix_Reference.bmh
@@ -3,10 +3,13 @@
 
 #Class SkMatrix
 
-The SkMatrix class holds a 3x3 matrix for transforming coordinates.
+Matrix holds a 3x3 matrix for transforming coordinates.
+Matrix elements are in column major order.
+
 SkMatrix does not have a constructor, so it must be explicitly initialized
 using either reset() - to construct an identity matrix, or one of the set
 functions (e.g. setTranslate, setRotate, etc.).
+
 SkMatrix is not thread safe unless getType is called first.
 
 #Topic Overview
@@ -25,8 +28,10 @@
 #Legend
 # description                                                         # function ##
 #Legend ##
-# friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b) # ##
-# friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b) # ##
+# friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b) # Returns true if members are unequal. ##
+# friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b) # Returns true if members are equal. ##
+# SkScalar operator[](int index) const # Returns one of nine Matrix values. ##
+# SkScalar& operator[](int index) # Returns a writable reference to one of nine Matrix values. ##
 #Table ##
 #Subtopic ##
 
@@ -35,46 +40,45 @@
 #Legend
 # description            # function ##
 #Legend ##
-# Concat                 # ##
-# GetMapPtsProc          # ##
-# GetMapXYProc           # ##
-# I                      # ##
-# InvalidMatrix          # ##
-# MakeRectToRect         # ##
-# MakeScale              # ##
-# MakeTrans              # ##
-# SetAffineIdentity      # ##
-# [                      # ##
-# asAffine               # ##
-# cheapEqualTo           # ##
-# decomposeScale         # ##
-# dirtyMatrixTypeCache   # ##
-# dump                   # ##
-# fixedStepInX           # ##
-# get                    # ##
-# get9                   # ##
-# getMapPtsProc          # ##
-# getMapXYProc           # ##
-# getMaxScale            # ##
-# getMinMaxScales        # ##
-# getMinScale            # ##
-# getPerspX              # ##
-# getPerspY              # ##
-# getScaleX              # ##
-# getScaleY              # ##
-# getSkewX               # ##
-# getSkewY               # ##
-# getTranslateX          # ##
-# getTranslateY          # ##
-# getType                # ##
-# hasPerspective         # ##
-# invert                 # ##
-# isFinite               # ##
-# isFixedStepInX         # ##
-# isIdentity             # ##
-# isScaleTranslate       # ##
-# isSimilarity           # ##
-# isTranslate            # ##
+# Concat                 # Returns the concatenation of Matrix pair. ##
+# GetMapPtsProc          # Returns optimal function to map Point array. ##
+# GetMapXYProc           # Returns optimal function to map one Point. ##
+# I                      # Returns a reference to a const identity Matrix. ##
+# InvalidMatrix          # Returns a reference to a const invalid Matrix. ##
+# MakeRectToRect         # Constructs from source Rect to destination Rect. ##
+# MakeScale              # Constructs from scale in x and y. ##
+# MakeTrans              # Constructs from translate in x and y. ##
+# SetAffineIdentity      # Sets 2x3 array to identity. ##
+# asAffine               # Copies to 2x3 array. ##
+# cheapEqualTo           # Compares Matrix pair using memcmp(). ##
+# decomposeScale         # Separates scale if possible. ##
+# dirtyMatrixTypeCache   # Private; used by testing. ##
+# dump                   # Sends text representation using floats to standard output. ##
+# fixedStepInX           # Returns step in x for a position in y. ##
+# get                    # Returns one of nine Matrix values. ##
+# get9                   # Returns all nine Matrix values. ##
+# getMapPtsProc          # Returns optimal function to map Point array. ##
+# getMapXYProc           # Returns optimal function to map one Point. ##
+# getMaxScale            # Returns maximum scaling, if possible. ##
+# getMinMaxScales        # Returns minimum and maximum scaling, if possible. ##
+# getMinScale            # Returns minimum scaling, if possible. ##
+# getPerspX              # Returns horizontal perspective factor. ##
+# getPerspY              # Returns vertical perspective factor. ##
+# getScaleX              # Returns horizontal scale factor. ##
+# getScaleY              # Returns vertical scale factor.##
+# getSkewX               # Returns horizontal skew factor. ##
+# getSkewY               # Returns vertical skew factor. ##
+# getTranslateX          # Returns horizontal translation factor. ##
+# getTranslateY          # Returns vertical translation factor. ##
+# getType                # Returns transform complexity. ##
+# hasPerspective         # Returns if transform includes perspective. ##
+# invert                 # Returns inverse, if possible. ##
+# isFinite               # Returns if all Matrix values are not infinity, NaN. ##
+# isFixedStepInX         # Returns if transformation supports fixed step in x. ##
+# isIdentity             # Returns if matrix equals the identity Matrix .##
+# isScaleTranslate       # Returns if transform is limited to scale and translate. ##
+# isSimilarity           # Returns if transform is limited to square scale and rotation. ##
+# isTranslate            # Returns if transform is limited to translate. ##
 # mapHomogeneousPoints   # ##
 # mapPoints              # ##
 # mapPointsWithStride    # ##
diff --git a/docs/SkPath_Reference.bmh b/docs/SkPath_Reference.bmh
index 8eb0077..e38b30d 100644
--- a/docs/SkPath_Reference.bmh
+++ b/docs/SkPath_Reference.bmh
@@ -1025,7 +1025,7 @@
 #Enum Convexity
 
 #Code
-    enum Convexity {
+    enum Convexity : uint8_t {
         kUnknown_Convexity, 
         kConvex_Convexity,
         kConcave_Convexity, 
diff --git a/docs/SkRect_Reference.bmh b/docs/SkRect_Reference.bmh
index 57f3ec6..7dc1e37 100644
--- a/docs/SkRect_Reference.bmh
+++ b/docs/SkRect_Reference.bmh
@@ -28,10 +28,10 @@
 #Subtopic Operators
 #Table
 #Legend
-# description                                              # function ##
+# description                                       # function ##
 #Legend ##
-# friend bool operator!=(const SkRect& a, const SkRect& b) # Returns true if member bits are unequal. ##
-# friend bool operator==(const SkRect& a, const SkRect& b) # Returns true if member bits are equal. ##
+# bool operator!=(const SkRect& a, const SkRect& b) # Returns true if member bits are unequal. ##
+# bool operator==(const SkRect& a, const SkRect& b) # Returns true if member bits are equal. ##
 #Table ##
 #Subtopic ##
 
@@ -47,6 +47,7 @@
 # MakeIWH               # Constructs from int input returning (0, 0, width, height). ##
 # MakeLTRB              # Constructs from SkScalar left, top, right, bottom. ##
 # MakeLargest           # Constructs (SK_ScalarMin, SK_ScalarMin, SK_ScalarMax, SK_ScalarMax). ##
+# MakeLargestS32        # Constructs largest signed integers that fit in 32-bit float. ##
 # MakeSize              # Constructs from Size returning (0, 0, width, height). ##
 # MakeWH                # Constructs from SkScalar input returning (0, 0, width, height). ##
 # MakeXYWH              # Constructs from SkScalar input returning (x, y, width, height). ##
@@ -184,13 +185,42 @@
 ##

 ##
 
-#SeeAlso isLargest setLargest SkIRect::MakeLargest
+#SeeAlso MakeLargestS32 isLargest setLargest SkIRect::MakeLargest
 
 ##
 
 # ------------------------------------------------------------------------------
 
-#Method static SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
+#Method static SkRect SK_WARN_UNUSED_RESULT MakeLargestS32()
+
+Returns constructed Rect that can be represented exactly with IRect. The left
+and top are set to the most negative integer value that fits in a 32-bit float,
+and the right and bottom are set to the most positive finite value that fits in
+a 32-bit float.
+
+These are the largest values for which round() is well defined.
+
+#Return bounds (SK_MinS32FitsInFloat, SK_MinS32FitsInFloat,
+                SK_MaxS32FitsInFloat, SK_MaxS32FitsInFloat)
+##
+
+#Example
+    SkRect f_rect = SkRect::MakeLargestS32();

+    SkIRect i_rect = f_rect.round();

+    SkRect r_rect = SkRect::Make(i_rect);

+    SkDebugf("f_rect %c= r_rect\n", f_rect == r_rect ? '=' : '!');

+#StdOut

+f_rect == r_rect

+##

+##
+
+#SeeAlso MakeLargest isLargest setLargest SkIRect::MakeLargest
+
+##
+
+# ------------------------------------------------------------------------------
+
+#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
 
 Returns constructed Rect set to SkScalar values (0, 0, w, h). Does not
 validate input; w or h may be negative.
@@ -253,7 +283,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
+#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
 
 Returns constructed Rect set to (0, 0, size.width(), size.height()). Does not
 validate input; size.width() or size.height() may be negative.
@@ -313,7 +343,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method static SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h)
+#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h)
 
 Returns constructed Rect set to
 #Formula
@@ -327,7 +357,7 @@
 #Param w  added to x and stored in fRight ##
 #Param h  added to y and stored in fBottom ##
 
-#Return bounds (x, y, x + w, y + h) ##
+#Return bounds at (x, y) with width w and height h ##
 
 #Example
     SkRect rect = SkRect::MakeXYWH(5, 35, -15, 25);

@@ -784,7 +814,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method friend bool operator==(const SkRect& a, const SkRect& b)
+#Method bool operator==(const SkRect& a, const SkRect& b)
 
 Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are  
 equal to the corresponding members in b.
@@ -827,7 +857,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method friend bool operator!=(const SkRect& a, const SkRect& b)
+#Method bool operator!=(const SkRect& a, const SkRect& b)
 
 Returns true if any in a: fLeft, fTop, fRight, and fBottom; does not   
 equal the corresponding members in b.
@@ -1962,7 +1992,7 @@
 
 # ------------------------------------------------------------------------------
 
-#Method    bool contains(const SkRect& r) const {
+#Method    bool contains(const SkRect& r) const
 
 Returns true if Rect contains r.
 Returns false if Rect is empty or r is empty.
diff --git a/docs/undocumented.bmh b/docs/undocumented.bmh
index d6a77b9..0239034 100644
--- a/docs/undocumented.bmh
+++ b/docs/undocumented.bmh
@@ -443,6 +443,12 @@
     #Typedef SkScalar
     #Typedef ##
     ##
+    #Const SK_MinS32FitsInFloat
+    to be written
+    ##
+    #Const SK_MaxS32FitsInFloat
+    to be written
+    ##
     #Const SK_ScalarMin
     to be written
     ##