wip pixmap docs
wip pixmap docs Docs-Preview: https://skia.org/?cl=42522 Bug: skia: 6898 Change-Id: I85947bc36ea057ed008b87d7bef2efa82d7c89ad Reviewed-on: https://skia-review.googlesource.com/42522 Reviewed-by: Cary Clark <caryclark@skia.org> Commit-Queue: Cary Clark <caryclark@skia.org>
This commit is contained in:
parent
d29f0e7ccb
commit
d0530ba8f4
@ -95,7 +95,7 @@ when no Surface is required, and some helpers implicitly create Raster_Surface.
|
||||
# drawArc # Draws Arc using Clip, Matrix, and Paint.##
|
||||
# drawAtlas # Draws sprites using Clip, Matrix, and Paint.##
|
||||
# drawBitmap # Draws Bitmap at (x, y) position. ##
|
||||
# drawBitmapLattice # Draws differentially stretched Bitmap. ##
|
||||
# drawBitmapLattice # Draws proportionally stretched Bitmap. ##
|
||||
# drawBitmapNine # Draws Nine_Patch Bitmap. ##
|
||||
# drawBitmapRect # Draws Bitmap, source Rect to destination Rect. ##
|
||||
# drawCircle # Draws Circle using Clip, Matrix, and Paint. ##
|
||||
@ -104,7 +104,7 @@ when no Surface is required, and some helpers implicitly create Raster_Surface.
|
||||
# drawDrawable # Draws Drawable, encapsulated drawing commands. ##
|
||||
# drawIRect # Draws IRect using Clip, Matrix, and Paint. ##
|
||||
# drawImage # Draws Image at (x, y) position. ##
|
||||
# drawImageLattice # Draws differentially stretched Image. ##
|
||||
# drawImageLattice # Draws proportionally stretched Image. ##
|
||||
# drawImageNine # Draws Nine_Patch Image. ##
|
||||
# drawImageRect # Draws Image, source Rect to destination Rect. ##
|
||||
# drawLine # Draws line segment between two points.##
|
||||
@ -314,10 +314,10 @@ void draw(SkCanvas* ) {
|
||||
|
||||
#Method SkCanvas()
|
||||
|
||||
Creates an empty canvas with no backing device or pixels, with
|
||||
Creates an empty Canvas with no backing device or pixels, with
|
||||
a width and height of zero.
|
||||
|
||||
#Return empty canvas ##
|
||||
#Return empty Canvas ##
|
||||
|
||||
#Example
|
||||
|
||||
@ -369,11 +369,11 @@ void draw(SkCanvas* canvas) {
|
||||
Creates Canvas of the specified dimensions without a Surface.
|
||||
Used by Subclasses with custom implementations for draw methods.
|
||||
|
||||
If props equals nullptr, Surface_Properties are created with Surface_Properties_Legacy_Font_Host settings,
|
||||
which choose the pixel striping direction and order. Since a platform may dynamically
|
||||
change its direction when the device is rotated, and since a platform may have
|
||||
multiple monitors with different characteristics, it's best not to rely on this
|
||||
legacy behavior.
|
||||
If props equals nullptr, Surface_Properties are created with
|
||||
Surface_Properties_Legacy_Font_Host settings, which choose the pixel striping
|
||||
direction and order. Since a platform may dynamically change its direction when
|
||||
the device is rotated, and since a platform may have multiple monitors with
|
||||
different characteristics, it is best not to rely on this legacy behavior.
|
||||
|
||||
#Param width zero or greater ##
|
||||
#Param height zero or greater ##
|
||||
@ -465,16 +465,16 @@ The actual output depends on the installed fonts.
|
||||
}
|
||||
|
||||
#StdOut
|
||||
-----
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
-----
|
||||
---x-
|
||||
---x-
|
||||
-----
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
---x-
|
||||
-----
|
||||
---x-
|
||||
---x-
|
||||
-----
|
||||
#StdOut ##
|
||||
##
|
||||
@ -1252,7 +1252,7 @@ this->imageInfo.alphaType()
|
||||
|
||||
#Param info width, height, Image_Color_Type, and Image_Alpha_Type of pixels ##
|
||||
#Param pixels pixels to copy, of size info.height() times rowBytes, or larger ##
|
||||
#Param rowBytes size of one pixels row; info.width() times pixel size, or larger ##
|
||||
#Param rowBytes size of one row of pixels; info.width() times pixel size, or larger ##
|
||||
#Param x offset into Canvas writable pixels in x; may be negative ##
|
||||
#Param y offset into Canvas writable pixels in y; may be negative ##
|
||||
|
||||
@ -1551,6 +1551,7 @@ depth = 1
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
#Topic Layer
|
||||
#Substitute layer
|
||||
#Alias Layers
|
||||
|
||||
Layer allocates a temporary Bitmap to draw into. When the drawing is
|
||||
@ -3118,7 +3119,7 @@ void draw(SkCanvas* canvas) {
|
||||
enum PointMode {
|
||||
kPoints_PointMode,
|
||||
kLines_PointMode,
|
||||
kPolygon_PointMode
|
||||
kPolygon_PointMode,
|
||||
};
|
||||
##
|
||||
|
||||
@ -4284,7 +4285,7 @@ void draw(SkCanvas* canvas) {
|
||||
#Method void drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst,
|
||||
const SkPaint* paint = nullptr)
|
||||
|
||||
Draw Image image stretched differentially to fit into Rect dst.
|
||||
Draw Image image stretched proportionally to fit into Rect dst.
|
||||
IRect center divides the image into nine sections: four sides, four corners, and
|
||||
the center. Corners are unmodified or scaled down proportionately if their sides
|
||||
are larger than dst; center and four sides are scaled to fit remaining space, if any.
|
||||
@ -4350,7 +4351,7 @@ void draw(SkCanvas* canvas) {
|
||||
#Method void drawImageNine(const sk_sp<SkImage>& image, const SkIRect& center, const SkRect& dst,
|
||||
const SkPaint* paint = nullptr)
|
||||
|
||||
Draw Image image stretched differentially to fit into Rect dst.
|
||||
Draw Image image stretched proportionally to fit into Rect dst.
|
||||
IRect center divides the image into nine sections: four sides, four corners, and
|
||||
the center. Corners are not scaled, or scaled down proportionately if their sides
|
||||
are larger than dst; center and four sides are scaled to fit remaining space, if any.
|
||||
@ -4635,7 +4636,7 @@ void draw(SkCanvas* canvas) {
|
||||
#Method void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst,
|
||||
const SkPaint* paint = nullptr)
|
||||
|
||||
Draw Bitmap bitmap stretched differentially to fit into Rect dst.
|
||||
Draw Bitmap bitmap stretched proportionally to fit into Rect dst.
|
||||
IRect center divides the bitmap into nine sections: four sides, four corners,
|
||||
and the center. Corners are not scaled, or scaled down proportionately if their
|
||||
sides are larger than dst; center and four sides are scaled to fit remaining
|
||||
@ -4783,7 +4784,7 @@ void draw(SkCanvas* canvas) {
|
||||
#Method void drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice, const SkRect& dst,
|
||||
const SkPaint* paint = nullptr)
|
||||
|
||||
Draw Bitmap bitmap stretched differentially to fit into Rect dst.
|
||||
Draw Bitmap bitmap stretched proportionally to fit into Rect dst.
|
||||
|
||||
Lattice lattice divides bitmap into a rectangular grid.
|
||||
Each intersection of an even-numbered row and column is fixed; like the corners
|
||||
@ -4860,7 +4861,7 @@ void draw(SkCanvas* canvas) {
|
||||
#Method void drawImageLattice(const SkImage* image, const Lattice& lattice, const SkRect& dst,
|
||||
const SkPaint* paint = nullptr)
|
||||
|
||||
Draw Image image stretched differentially to fit into Rect dst.
|
||||
Draw Image image stretched proportionally to fit into Rect dst.
|
||||
|
||||
Lattice lattice divides image into a rectangular grid.
|
||||
Each intersection of an even-numbered row and column is fixed; like the corners
|
||||
|
@ -348,7 +348,7 @@ This prevents objects with Reference_Count from being modified once Paint refers
|
||||
|
||||
#Method SkPaint(SkPaint&& paint)
|
||||
|
||||
Implements a move constructor to avoid incrementing the reference counts
|
||||
Implements a move constructor to avoid increasing the reference counts
|
||||
of objects referenced by the paint.
|
||||
|
||||
After the call, paint is undefined, and can be safely destructed.
|
||||
@ -443,7 +443,7 @@ are increased by one. paint is unmodified.
|
||||
|
||||
#Method SkPaint& operator=(SkPaint&& paint)
|
||||
|
||||
Moves the paint to avoid incrementing the reference counts
|
||||
Moves the paint to avoid increasing the reference counts
|
||||
of objects referenced by the paint parameter. Objects containing Reference_Count in the
|
||||
prior destination are decreased by one; those objects are deleted if the resulting count
|
||||
is zero.
|
||||
@ -1178,7 +1178,7 @@ kLCDRenderText_Flag or kSubpixelText_Flag (or both) at compile time.
|
||||
|
||||
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's the same as setting Hinting to kNo_Hinting.
|
||||
If kLinearText_Flag is clear, it is the same as setting Hinting to kNo_Hinting.
|
||||
|
||||
#Method bool isLinearText() const
|
||||
|
||||
@ -2838,7 +2838,7 @@ void draw(SkCanvas* canvas) {
|
||||
|
||||
Optional colors used when filling a path, such as a gradient.
|
||||
|
||||
Sets Shader to shader, decrementing Reference_Count of the previous Shader.
|
||||
Sets Shader to shader, decreasing Reference_Count of the previous Shader.
|
||||
Does not alter shader Reference_Count.
|
||||
|
||||
#Param shader how geometry is filled with color; if nullptr, Color is used instead ##
|
||||
@ -2930,7 +2930,7 @@ void draw(SkCanvas* canvas) {
|
||||
|
||||
#Method void setColorFilter(sk_sp<SkColorFilter> colorFilter)
|
||||
|
||||
Sets Color_Filter to filter, decrementing Reference_Count of the previous Color_Filter.
|
||||
Sets Color_Filter to filter, decreasing Reference_Count of the previous Color_Filter.
|
||||
Pass nullptr to clear Color_Filter.
|
||||
Does not alter filter Reference_Count.
|
||||
|
||||
@ -3120,7 +3120,7 @@ If Paint has no Path_Effect, the path geometry is unaltered when filled or strok
|
||||
#Method void setPathEffect(sk_sp<SkPathEffect> pathEffect)
|
||||
|
||||
Sets Path_Effect to pathEffect,
|
||||
decrementing Reference_Count of the previous Path_Effect.
|
||||
decreasing Reference_Count of the previous Path_Effect.
|
||||
Pass nullptr to leave the path geometry unaltered.
|
||||
Does not alter pathEffect Reference_Count.
|
||||
|
||||
@ -3204,7 +3204,7 @@ Set Mask_Filter to nullptr to prevent Mask_Filter from modifying the draw.
|
||||
#Method void setMaskFilter(sk_sp<SkMaskFilter> maskFilter)
|
||||
|
||||
Sets Mask_Filter to maskFilter,
|
||||
decrementing Reference_Count of the previous Mask_Filter.
|
||||
decreasing Reference_Count of the previous Mask_Filter.
|
||||
Pass nullptr to clear Mask_Filter and leave Mask_Filter effect on Mask_Alpha unaltered.
|
||||
Does not affect Rasterizer.
|
||||
Does not alter maskFilter Reference_Count.
|
||||
@ -3299,7 +3299,7 @@ implementation.
|
||||
#Method void setTypeface(sk_sp<SkTypeface> typeface)
|
||||
|
||||
Sets Typeface to typeface,
|
||||
decrementing Reference_Count of the previous Typeface.
|
||||
decreasing Reference_Count of the previous Typeface.
|
||||
Pass nullptr to clear Typeface and use the default typeface.
|
||||
Does not alter typeface Reference_Count.
|
||||
|
||||
@ -3416,7 +3416,7 @@ Path, and Text.
|
||||
#Method void setRasterizer(sk_sp<SkRasterizer> rasterizer)
|
||||
|
||||
Sets Rasterizer to rasterizer,
|
||||
decrementing Reference_Count of the previous Rasterizer.
|
||||
decreasing Reference_Count of the previous Rasterizer.
|
||||
Pass nullptr to clear Rasterizer and leave Rasterizer effect on Mask_Alpha unaltered.
|
||||
Does not affect Mask_Filter.
|
||||
Does not alter rasterizer Reference_Count.
|
||||
@ -3521,7 +3521,7 @@ Mask_Filter and Rasterizer.
|
||||
#Method void setImageFilter(sk_sp<SkImageFilter> imageFilter)
|
||||
|
||||
Sets Image_Filter to imageFilter,
|
||||
decrementing Reference_Count of the previous Image_Filter.
|
||||
decreasing Reference_Count of the previous Image_Filter.
|
||||
Pass nullptr to clear Image_Filter, and remove Image_Filter effect
|
||||
on drawing.
|
||||
Does not affect Rasterizer or Mask_Filter.
|
||||
@ -3642,7 +3642,7 @@ Deprecated.
|
||||
#Method void setDrawLooper(sk_sp<SkDrawLooper> drawLooper)
|
||||
|
||||
Sets Draw_Looper to drawLooper,
|
||||
decrementing Reference_Count of the previous drawLooper.
|
||||
decreasing Reference_Count of the previous drawLooper.
|
||||
Pass nullptr to clear Draw_Looper and leave Draw_Looper effect on drawing unaltered.
|
||||
Does not alter drawLooper Reference_Count.
|
||||
|
||||
@ -4000,11 +4000,11 @@ All character encoding are able to represent all of Unicode, differing only
|
||||
in the total storage required.
|
||||
|
||||
#A UTF-8 (RFC 3629) # https://tools.ietf.org/html/rfc3629 ## is made up of 8-bit bytes,
|
||||
and is a superset of ASCII.
|
||||
#A UTF-16 (RFC 2781) # https://tools.ietf.org/html/rfc2781 ## is made up of 16-bit words,
|
||||
and is a superset of Unicode ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF.
|
||||
#A UTF-32 # http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf ## is
|
||||
made up of 32-bit words, and is a superset of Unicode.
|
||||
and encodes ASCII in one byte, and all valid code points in Unicode in multiple bytes.
|
||||
#A UTF-16 (RFC 2781) # https://tools.ietf.org/html/rfc2781 ## uses one or two 16-bit words,
|
||||
and encodes Unicode ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF in one word.
|
||||
#A UTF-32 # http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf ## describes
|
||||
a 32-bit word, which encodes all code points in Unicode.
|
||||
|
||||
Font_Manager uses font data to convert character code points into glyph indices.
|
||||
A glyph index is a 16-bit word.
|
||||
|
2040
docs/SkPixmap_Reference.bmh
Normal file
2040
docs/SkPixmap_Reference.bmh
Normal file
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,10 @@
|
||||
SaveLayerFlags # not external; need to add typedef support
|
||||
SkUserConfig # not external, but still thinking about how markup refers to this
|
||||
SkXXX.h # ditto
|
||||
SkXXX_Reference # ditto
|
||||
Skia # ditto
|
||||
SK_DEBUG # ditto
|
||||
SK_RELEASE # ditto
|
||||
SK_USE_FREETYPE_EMBOLDEN # ditto
|
||||
SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION # ditto
|
||||
SK_BUILD_FOR_ANDROID_FRAMEWORK # ditto
|
||||
@ -53,6 +56,13 @@ FT_Load_Glyph
|
||||
#Class SkBitmap
|
||||
#Subtopic Row_Bytes
|
||||
##
|
||||
#Method void erase(SkColor c, const SkIRect& area) const
|
||||
##
|
||||
#Method bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes)
|
||||
##
|
||||
#Method bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
|
||||
int srcX, int srcY, SkTransferFunctionBehavior behavior) const
|
||||
##
|
||||
#Class ##
|
||||
##
|
||||
|
||||
@ -141,6 +151,16 @@ FT_Load_Glyph
|
||||
#Topic ##
|
||||
|
||||
#Topic Color_Space
|
||||
#Class SkColorSpace
|
||||
#Method static sk_sp<SkColorSpace> MakeSRGBLinear()
|
||||
##
|
||||
##
|
||||
#EnumClass SkTransferFunctionBehavior
|
||||
#Const kRespect 0
|
||||
##
|
||||
#Const kIgnore 1
|
||||
##
|
||||
#EnumClass ##
|
||||
##
|
||||
|
||||
#Topic Core_Graphics
|
||||
@ -209,6 +229,18 @@ FT_Load_Glyph
|
||||
#Const kHigh_SkFilterQuality 3
|
||||
##
|
||||
#Enum ##
|
||||
#Subtopic Nearest_Neighbor
|
||||
#Substitute nearest neighbor filter
|
||||
##
|
||||
#Subtopic Bilerp
|
||||
#Substitute bilerp filter
|
||||
##
|
||||
#Subtopic MipMap
|
||||
#Substitute mip-map filter
|
||||
##
|
||||
#Subtopic BiCubic
|
||||
#Substitute bicubic filter
|
||||
##
|
||||
#Topic ##
|
||||
|
||||
#Topic Font
|
||||
@ -242,12 +274,21 @@ FT_Load_Glyph
|
||||
|
||||
#Topic Image
|
||||
#Subtopic Alpha_Type
|
||||
#Alias Alpha_Type
|
||||
#Enum SkAlphaType
|
||||
#Const kUnknown_SkAlphaType 0
|
||||
##
|
||||
#Const kOpaque_SkAlphaType 1
|
||||
##
|
||||
#Const kPremul_SkAlphaType 2
|
||||
##
|
||||
#Const kUnpremul_SkAlphaType 3
|
||||
##
|
||||
##
|
||||
#Subtopic ##
|
||||
#Subtopic Color_Type
|
||||
#Subtopic Color_Type
|
||||
#Alias Color_Type
|
||||
#Alias Color_Types
|
||||
#Enum SkColorType
|
||||
#Const kUnknown_SkColorType 0
|
||||
##
|
||||
@ -276,12 +317,27 @@ FT_Load_Glyph
|
||||
#Struct SkImageInfo
|
||||
#Method SkImageInfo()
|
||||
##
|
||||
#Method SkImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const
|
||||
##
|
||||
#Method size_t minRowBytes() const
|
||||
##
|
||||
#Method bool isOpaque() const
|
||||
##
|
||||
#Method int bytesPerPixel() const
|
||||
##
|
||||
##
|
||||
#Subtopic ##
|
||||
#Class SkImage
|
||||
#Method sk_sp<SkShader> makeShader(SkShader::TileMode, SkShader::TileMode,
|
||||
const SkMatrix* localMatrix = nullptr) const
|
||||
##
|
||||
#Method static sk_sp<SkImage> MakeRasterCopy(const SkPixmap&)
|
||||
##
|
||||
#Method bool readPixels(const SkPixmap& dst, int srcX, int srcY,
|
||||
CachingHint = kAllow_CachingHint) const
|
||||
##
|
||||
#Method bool scalePixels(const SkPixmap& dst, SkFilterQuality, CachingHint = kAllow_CachingHint) const
|
||||
##
|
||||
##
|
||||
#Topic ##
|
||||
|
||||
@ -297,6 +353,8 @@ FT_Load_Glyph
|
||||
|
||||
#Topic IRect
|
||||
#Struct SkIRect
|
||||
#Method bool intersect(const SkIRect& r)
|
||||
##
|
||||
##
|
||||
##
|
||||
|
||||
@ -308,6 +366,20 @@ FT_Load_Glyph
|
||||
#Topic ##
|
||||
|
||||
#Topic Mask
|
||||
#Class SkMask
|
||||
#Enum Format
|
||||
#Const kBW_Format 0
|
||||
##
|
||||
#Const kA8_Format 1
|
||||
##
|
||||
#Const k3D_Format 2
|
||||
##
|
||||
#Const kARGB32_Format 3
|
||||
##
|
||||
k#Const LCD16_Format 4
|
||||
##
|
||||
##
|
||||
##
|
||||
#Topic ##
|
||||
|
||||
#Topic Mask_Alpha
|
||||
@ -318,6 +390,11 @@ FT_Load_Glyph
|
||||
#Class ##
|
||||
#Topic ##
|
||||
|
||||
#Topic Math
|
||||
#Method static inline bool sk_64_isS32(int64_t value)
|
||||
##
|
||||
##
|
||||
|
||||
#Topic Matrix
|
||||
#Struct SkMatrix
|
||||
#Struct ##
|
||||
@ -405,12 +482,12 @@ FT_Load_Glyph
|
||||
##
|
||||
##
|
||||
|
||||
#Enum SkPixelGeometry
|
||||
#Topic PixelRef
|
||||
#Class SkPixelRef
|
||||
##
|
||||
##
|
||||
|
||||
#Topic Pixmap
|
||||
#Class SkPixmap
|
||||
##
|
||||
#Enum SkPixelGeometry
|
||||
##
|
||||
|
||||
#Topic Point
|
||||
@ -533,6 +610,8 @@ FT_Load_Glyph
|
||||
#Method static sk_sp<SkSurface> MakeRasterDirect(const SkImageInfo&, void* pixels, size_t rowBytes,
|
||||
const SkSurfaceProps* = nullptr)
|
||||
##
|
||||
#Method bool readPixels(const SkPixmap& dst, int srcX, int srcY);
|
||||
##
|
||||
##
|
||||
#Subtopic Properties
|
||||
#Class SkSurfaceProps
|
||||
|
@ -25,15 +25,35 @@ $ ninja -C out/dir bookmaker
|
||||
##
|
||||
|
||||
Generate an starter Bookmaker file from an existing include.
|
||||
This writes SkXXX.bmh in the current directory, which is
|
||||
out/dir/obj/ from an IDE.
|
||||
|
||||
#Code
|
||||
$ ./out/dir/bookmaker -t -i include/core/SkXXX.h
|
||||
$ ./out/dir/bookmaker -i include/core/SkXXX.h -t docs
|
||||
##
|
||||
|
||||
Copy SkXXX.bmh to docs.
|
||||
Use your favorite editor to fill out docs/SkXXX.bmh.
|
||||
If a method or function has an unnamed parameter, bookmaker generates an error:
|
||||
|
||||
#Code
|
||||
###$
|
||||
C:/puregit/include/core/SkPixmap.h(208): error: #Method missing param name
|
||||
bool erase(const SkColor4f&, const SkIRect* subset = nullptr) const
|
||||
^
|
||||
$$$#
|
||||
##
|
||||
|
||||
All parameters require names to allow markdown and doxygen documents to refer to
|
||||
them. After naming all parameters, check in the include before continuing.
|
||||
|
||||
A successful run generates
|
||||
#Code
|
||||
docs/SkXXX_Reference.bmh
|
||||
##
|
||||
.
|
||||
|
||||
Next, use your favorite editor to fill out
|
||||
#Code
|
||||
docs/SkXXX_Reference.bmh
|
||||
##
|
||||
.
|
||||
|
||||
#Subtopic Style
|
||||
|
||||
@ -102,13 +122,14 @@ This reports if a method no longer exists or its parameters have changed.
|
||||
$ ./out/dir/bookmaker -x -b docs/SkXXX.bmh -i include/core/SkXXX.h
|
||||
##
|
||||
|
||||
Generate an updated include header.
|
||||
This writes the updated SkXXX.h to the current directory.
|
||||
Generate an updated include header. Run:
|
||||
|
||||
#Code
|
||||
$ ./out/dir/bookmaker -p -b docs -i include/core/SkXXX.h
|
||||
##
|
||||
|
||||
to write the updated SkXXX.h to the current directory.
|
||||
|
||||
#Subtopic Bugs
|
||||
|
||||
Bookmaker bugs are tracked #A here # bug.skia.org/6898 ##.
|
||||
|
@ -80,7 +80,7 @@ when no <a href="undocumented#Surface">Surface</a> is required, and some helpers
|
||||
| <a href="#SkCanvas_drawArc">drawArc</a> | Draws <a href="undocumented#Arc">Arc</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
|
||||
| <a href="#SkCanvas_drawAtlas">drawAtlas</a> | Draws sprites using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
|
||||
| <a href="#SkCanvas_drawBitmap">drawBitmap</a> | Draws <a href="undocumented#Bitmap">Bitmap</a> at (x, y) position. |
|
||||
| <a href="#SkCanvas_drawBitmapLattice">drawBitmapLattice</a> | Draws differentially stretched <a href="undocumented#Bitmap">Bitmap</a>. |
|
||||
| <a href="#SkCanvas_drawBitmapLattice">drawBitmapLattice</a> | Draws proportionally stretched <a href="undocumented#Bitmap">Bitmap</a>. |
|
||||
| <a href="#SkCanvas_drawBitmapNine">drawBitmapNine</a> | Draws <a href="undocumented#Nine_Patch">Nine Patch</a> <a href="undocumented#Bitmap">Bitmap</a>. |
|
||||
| <a href="#SkCanvas_drawBitmapRect">drawBitmapRect</a> | Draws <a href="undocumented#Bitmap">Bitmap</a>, source <a href="undocumented#Rect">Rect</a> to destination <a href="undocumented#Rect">Rect</a>. |
|
||||
| <a href="#SkCanvas_drawCircle">drawCircle</a> | Draws <a href="undocumented#Circle">Circle</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
|
||||
@ -89,7 +89,7 @@ when no <a href="undocumented#Surface">Surface</a> is required, and some helpers
|
||||
| <a href="#SkCanvas_drawDrawable">drawDrawable</a> | Draws <a href="undocumented#Drawable">Drawable</a>, encapsulated drawing commands. |
|
||||
| <a href="#SkCanvas_drawIRect">drawIRect</a> | Draws <a href="undocumented#IRect">IRect</a> using <a href="#Clip">Clip</a>, <a href="#Matrix">Matrix</a>, and <a href="SkPaint_Reference#Paint">Paint</a>. |
|
||||
| <a href="#SkCanvas_drawImage">drawImage</a> | Draws <a href="undocumented#Image">Image</a> at (x, y) position. |
|
||||
| <a href="#SkCanvas_drawImageLattice">drawImageLattice</a> | Draws differentially stretched <a href="undocumented#Image">Image</a>. |
|
||||
| <a href="#SkCanvas_drawImageLattice">drawImageLattice</a> | Draws proportionally stretched <a href="undocumented#Image">Image</a>. |
|
||||
| <a href="#SkCanvas_drawImageNine">drawImageNine</a> | Draws <a href="undocumented#Nine_Patch">Nine Patch</a> <a href="undocumented#Image">Image</a>. |
|
||||
| <a href="#SkCanvas_drawImageRect">drawImageRect</a> | Draws <a href="undocumented#Image">Image</a>, source <a href="undocumented#Rect">Rect</a> to destination <a href="undocumented#Rect">Rect</a>. |
|
||||
| <a href="#SkCanvas_drawLine">drawLine</a> | Draws line segment between two points. |
|
||||
@ -277,12 +277,12 @@ in the center.</div>
|
||||
SkCanvas()
|
||||
</pre>
|
||||
|
||||
Creates an empty canvas with no backing device or pixels, with
|
||||
Creates an empty <a href="#Canvas">Canvas</a> with no backing device or pixels, with
|
||||
a width and height of zero.
|
||||
|
||||
### Return Value
|
||||
|
||||
empty canvas
|
||||
empty <a href="#Canvas">Canvas</a>
|
||||
|
||||
### Example
|
||||
|
||||
@ -310,11 +310,11 @@ SkCanvas(int width, int height, const SkSurfaceProps* props = nullptr)
|
||||
Creates <a href="#Canvas">Canvas</a> of the specified dimensions without a <a href="undocumented#Surface">Surface</a>.
|
||||
Used by <a href="undocumented#Subclasses">Subclasses</a> with custom implementations for draw methods.
|
||||
|
||||
If <a href="#SkCanvas_int_int_const_SkSurfaceProps_star_props">props</a> equals nullptr, <a href="#Properties">Surface Properties</a> are created with <a href="#Properties_Legacy_Font_Host">Surface Properties Legacy Font Host</a> settings,
|
||||
which choose the pixel striping direction and order. Since a platform may dynamically
|
||||
change its direction when the device is rotated, and since a platform may have
|
||||
multiple monitors with different characteristics, it's best not to rely on this
|
||||
legacy behavior.
|
||||
If <a href="#SkCanvas_int_int_const_SkSurfaceProps_star_props">props</a> equals nullptr, <a href="#Properties">Surface Properties</a> are created with
|
||||
<a href="#Properties_Legacy_Font_Host">Surface Properties Legacy Font Host</a> settings, which choose the pixel striping
|
||||
direction and order. Since a platform may dynamically change its direction when
|
||||
the device is rotated, and since a platform may have multiple monitors with
|
||||
different characteristics, it is best not to rely on this legacy behavior.
|
||||
|
||||
### Parameters
|
||||
|
||||
@ -981,7 +981,7 @@ Does not copy, and returns false if:
|
||||
<td>Source and destination rectangles do not intersect.</td> </tr> <tr>
|
||||
<td><a href="#Canvas">Canvas</a> pixels could not be converted to <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.colorType() or <a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.alphaType().</td> </tr> <tr>
|
||||
<td><a href="#Canvas">Canvas</a> pixels are not readable; for instance, <a href="#Canvas">Canvas</a> is document-based.</td> </tr> <tr>
|
||||
<td><a href="undocumented#Pixmap">Pixmap</a> pixels could not be allocated.</td> </tr> <tr>
|
||||
<td><a href="SkPixmap_Reference#Pixmap">Pixmap</a> pixels could not be allocated.</td> </tr> <tr>
|
||||
<td><a href="#SkCanvas_readPixels_2_pixmap">pixmap</a>.rowBytes() is too small to contain one row of pixels.</td> </tr>
|
||||
</table>
|
||||
|
||||
@ -1130,7 +1130,7 @@ width, height, <a href="#Color_Type">Image Color Type</a>, and <a href="#Alpha_T
|
||||
</tr> <tr> <td><a name="SkCanvas_writePixels_pixels"> <code><strong>pixels </strong></code> </a></td> <td>
|
||||
<a href="#SkCanvas_writePixels_pixels">pixels</a> to copy, of size <a href="#SkCanvas_writePixels_info">info</a>.height() times <a href="#SkCanvas_writePixels_rowBytes">rowBytes</a>, or larger</td>
|
||||
</tr> <tr> <td><a name="SkCanvas_writePixels_rowBytes"> <code><strong>rowBytes </strong></code> </a></td> <td>
|
||||
size of one <a href="#SkCanvas_writePixels_pixels">pixels</a> row; <a href="#SkCanvas_writePixels_info">info</a>.width() times pixel size, or larger</td>
|
||||
size of one row of <a href="#SkCanvas_writePixels_pixels">pixels</a>; <a href="#SkCanvas_writePixels_info">info</a>.width() times pixel size, or larger</td>
|
||||
</tr> <tr> <td><a name="SkCanvas_writePixels_x"> <code><strong>x </strong></code> </a></td> <td>
|
||||
offset into <a href="#Canvas">Canvas</a> writable <a href="#SkCanvas_writePixels_pixels">pixels</a> in <a href="#SkCanvas_writePixels_x">x</a>; may be negative</td>
|
||||
</tr> <tr> <td><a name="SkCanvas_writePixels_y"> <code><strong>y </strong></code> </a></td> <td>
|
||||
@ -2730,7 +2730,7 @@ graphics state used to fill <a href="#Canvas">Canvas</a></td>
|
||||
enum <a href="#SkCanvas_PointMode">PointMode</a> {
|
||||
<a href="#SkCanvas_kPoints_PointMode">kPoints PointMode</a>,
|
||||
<a href="#SkCanvas_kLines_PointMode">kLines PointMode</a>,
|
||||
<a href="#SkCanvas_kPolygon_PointMode">kPolygon PointMode</a>
|
||||
<a href="#SkCanvas_kPolygon_PointMode">kPolygon PointMode</a>,
|
||||
};</pre>
|
||||
|
||||
Selects if an array of points are drawn as discrete points, as lines, or as
|
||||
@ -3692,7 +3692,7 @@ void drawImageNine(const SkImage* image, const SkIRect& center,
|
||||
const SkRect& dst, const SkPaint* paint = nullptr)
|
||||
</pre>
|
||||
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_image">image</a> stretched differentially to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_dst">dst</a>.
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_image">image</a> stretched proportionally to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_dst">dst</a>.
|
||||
<a href="undocumented#IRect">IRect</a> <a href="#SkCanvas_drawImageNine_center">center</a> divides the <a href="#SkCanvas_drawImageNine_image">image</a> into nine sections: four sides, four corners, and
|
||||
the <a href="#SkCanvas_drawImageNine_center">center</a>. Corners are unmodified or scaled down proportionately if their sides
|
||||
are larger than <a href="#SkCanvas_drawImageNine_dst">dst</a>; <a href="#SkCanvas_drawImageNine_center">center</a> and four sides are scaled to fit remaining space, if any.
|
||||
@ -3735,7 +3735,7 @@ void drawImageNine(const sk_sp<SkImage>& image, const SkIRect& center,
|
||||
const SkRect& dst, const SkPaint* paint = nullptr)
|
||||
</pre>
|
||||
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_2_image">image</a> stretched differentially to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_2_dst">dst</a>.
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageNine_2_image">image</a> stretched proportionally to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageNine_2_dst">dst</a>.
|
||||
<a href="undocumented#IRect">IRect</a> <a href="#SkCanvas_drawImageNine_2_center">center</a> divides the <a href="#SkCanvas_drawImageNine_2_image">image</a> into nine sections: four sides, four corners, and
|
||||
the <a href="#SkCanvas_drawImageNine_2_center">center</a>. Corners are not scaled, or scaled down proportionately if their sides
|
||||
are larger than <a href="#SkCanvas_drawImageNine_2_dst">dst</a>; <a href="#SkCanvas_drawImageNine_2_center">center</a> and four sides are scaled to fit remaining space, if any.
|
||||
@ -3958,7 +3958,7 @@ void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
|
||||
const SkRect& dst, const SkPaint* paint = nullptr)
|
||||
</pre>
|
||||
|
||||
Draw <a href="undocumented#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> stretched differentially to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawBitmapNine_dst">dst</a>.
|
||||
Draw <a href="undocumented#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> stretched proportionally to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawBitmapNine_dst">dst</a>.
|
||||
<a href="undocumented#IRect">IRect</a> <a href="#SkCanvas_drawBitmapNine_center">center</a> divides the <a href="#SkCanvas_drawBitmapNine_bitmap">bitmap</a> into nine sections: four sides, four corners,
|
||||
and the <a href="#SkCanvas_drawBitmapNine_center">center</a>. Corners are not scaled, or scaled down proportionately if their
|
||||
sides are larger than <a href="#SkCanvas_drawBitmapNine_dst">dst</a>; <a href="#SkCanvas_drawBitmapNine_center">center</a> and four sides are scaled to fit remaining
|
||||
@ -4085,7 +4085,7 @@ void drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice,
|
||||
const SkRect& dst, const SkPaint* paint = nullptr)
|
||||
</pre>
|
||||
|
||||
Draw <a href="undocumented#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> stretched differentially to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawBitmapLattice_dst">dst</a>.
|
||||
Draw <a href="undocumented#Bitmap">Bitmap</a> <a href="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> stretched proportionally to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawBitmapLattice_dst">dst</a>.
|
||||
|
||||
<a href="#SkCanvas_Lattice">Lattice</a> <a href="#SkCanvas_drawBitmapLattice_lattice">lattice</a> divides <a href="#SkCanvas_drawBitmapLattice_bitmap">bitmap</a> into a rectangular grid.
|
||||
Each intersection of an even-numbered row and column is fixed; like the corners
|
||||
@ -4137,7 +4137,7 @@ void drawImageLattice(const SkImage* image, const Lattice& lattice,
|
||||
const SkRect& dst, const SkPaint* paint = nullptr)
|
||||
</pre>
|
||||
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageLattice_image">image</a> stretched differentially to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageLattice_dst">dst</a>.
|
||||
Draw <a href="undocumented#Image">Image</a> <a href="#SkCanvas_drawImageLattice_image">image</a> stretched proportionally to fit into <a href="undocumented#Rect">Rect</a> <a href="#SkCanvas_drawImageLattice_dst">dst</a>.
|
||||
|
||||
<a href="#SkCanvas_Lattice">Lattice</a> <a href="#SkCanvas_drawImageLattice_lattice">lattice</a> divides <a href="#SkCanvas_drawImageLattice_image">image</a> into a rectangular grid.
|
||||
Each intersection of an even-numbered row and column is fixed; like the corners
|
||||
|
@ -332,7 +332,7 @@ SK_ColorBLUE == paint2.getColor()
|
||||
SkPaint(SkPaint&& paint)
|
||||
</pre>
|
||||
|
||||
Implements a move constructor to avoid incrementing the reference counts
|
||||
Implements a move constructor to avoid increasing the reference counts
|
||||
of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
|
||||
|
||||
After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
|
||||
@ -450,7 +450,7 @@ SK_ColorRED == paint2.getColor()
|
||||
SkPaint& operator=(SkPaint&& paint)
|
||||
</pre>
|
||||
|
||||
Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid incrementing the reference counts
|
||||
Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid increasing the reference counts
|
||||
of objects referenced by the <a href="#SkPaint_move_assignment_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
|
||||
prior destination are decreased by one; those objects are deleted if the resulting count
|
||||
is zero.
|
||||
@ -1143,7 +1143,7 @@ When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is enabled, the
|
||||
|
||||
<a href="SkPaint_Reference#Linear_Text">Linear Text</a> selects whether text is rendered as a <a href="undocumented#Glyph">Glyph</a> or as a <a href="SkPath_Reference#Path">Path</a>.
|
||||
If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is set, it has the same effect as setting <a href="#SkPaint_Hinting">Hinting</a> to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
|
||||
If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear, it's the same as setting <a href="#SkPaint_Hinting">Hinting</a> to <a href="#SkPaint_kNo_Hinting">kNo Hinting</a>.
|
||||
If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear, it is the same as setting <a href="#SkPaint_Hinting">Hinting</a> to <a href="#SkPaint_kNo_Hinting">kNo Hinting</a>.
|
||||
|
||||
<a name="SkPaint_isLinearText"></a>
|
||||
## isLinearText
|
||||
@ -2825,7 +2825,7 @@ void setShader(sk_sp<SkShader> shader)
|
||||
|
||||
Optional colors used when filling a path, such as a gradient.
|
||||
|
||||
Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
|
||||
Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
|
||||
Does not alter <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
|
||||
### Parameters
|
||||
@ -2917,7 +2917,7 @@ color filter unique: false
|
||||
void setColorFilter(sk_sp<SkColorFilter> colorFilter)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Color_Filter">Color Filter</a>.
|
||||
Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Color_Filter">Color Filter</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
|
||||
Does not alter filter <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
|
||||
@ -3115,7 +3115,7 @@ void setPathEffect(sk_sp<SkPathEffect> pathEffect)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Path_Effect">Path Effect</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Path_Effect">Path Effect</a>.
|
||||
Pass nullptr to leave the path geometry unaltered.
|
||||
Does not alter <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
|
||||
@ -3209,7 +3209,7 @@ void setMaskFilter(sk_sp<SkMaskFilter> maskFilter)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Mask_Filter">Mask Filter</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Mask_Filter">Mask Filter</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
|
||||
Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
|
||||
Does not alter <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
@ -3302,7 +3302,7 @@ void setTypeface(sk_sp<SkTypeface> typeface)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>.
|
||||
Does not alter <a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
|
||||
@ -3399,7 +3399,7 @@ void setRasterizer(sk_sp<SkRasterizer> rasterizer)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Rasterizer">Rasterizer</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Rasterizer">Rasterizer</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
|
||||
Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
|
||||
Does not alter <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
@ -3496,7 +3496,7 @@ void setImageFilter(sk_sp<SkImageFilter> imageFilter)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Image_Filter">Image Filter</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Image_Filter">Image Filter</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Image_Filter">Image Filter</a>, and remove <a href="undocumented#Image_Filter">Image Filter</a> effect
|
||||
on drawing.
|
||||
Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
|
||||
@ -3609,7 +3609,7 @@ void setDrawLooper(sk_sp<SkDrawLooper> drawLooper)
|
||||
</pre>
|
||||
|
||||
Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>,
|
||||
decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>.
|
||||
decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>.
|
||||
Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on drawing unaltered.
|
||||
Does not alter <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a>.
|
||||
|
||||
@ -3947,11 +3947,11 @@ All character encoding are able to represent all of <a href="undocumented#Unicod
|
||||
in the total storage required.
|
||||
|
||||
<a href="undocumented#UTF_8">UTF-8</a> (<a href="undocumented#RFC">RFC</a> 3629)is made up of 8-bit bytes,
|
||||
and is a superset of <a href="undocumented#ASCII">ASCII</a>.
|
||||
<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)is made up of 16-bit words,
|
||||
and is a superset of <a href="undocumented#Unicode">Unicode</a> ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF.
|
||||
<a href="undocumented#UTF_32">UTF-32</a>is
|
||||
made up of 32-bit words, and is a superset of <a href="undocumented#Unicode">Unicode</a>.
|
||||
and encodes <a href="undocumented#ASCII">ASCII</a> in one byte, and all valid code points in <a href="undocumented#Unicode">Unicode</a> in multiple bytes.
|
||||
<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)uses one or two 16-bit words,
|
||||
and encodes <a href="undocumented#Unicode">Unicode</a> ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF in one word.
|
||||
<a href="undocumented#UTF_32">UTF-32</a>describes
|
||||
a 32-bit word, which encodes all code points in <a href="undocumented#Unicode">Unicode</a>.
|
||||
|
||||
<a href="undocumented#Font_Manager">Font Manager</a> uses font data to convert character code points into glyph indices.
|
||||
A glyph index is a 16-bit word.
|
||||
|
2066
site/user/api/SkPixmap_Reference.md
Normal file
2066
site/user/api/SkPixmap_Reference.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -32,9 +32,10 @@ Using the SkCanvas API:
|
||||
|
||||
Reference:
|
||||
|
||||
1. **[SkCanvas Reference](/user/api/SkCanvas_Reference)** - the drawing context.
|
||||
1. **[SkCanvas Reference](/user/api/SkCanvas_Reference)** - drawing context
|
||||
2. **[SkPaint Reference](/user/api/SkPaint_Reference)** - color, stroke, font, effects
|
||||
3. **[SkPath Reference](/user/api/SkPath_Reference)** - paths
|
||||
4. **[SkPixmap Reference](/user/api/SkPixmap_Reference)** - pixel map: image info and pixel address
|
||||
|
||||
Autogenerated Doxygen Documentaion
|
||||
----------------------------------
|
||||
|
@ -93,6 +93,10 @@ bool equalsWithinTolerance(const SkPoint& p) const
|
||||
|
||||
# <a name="SkDumpCanvas"></a> Class SkDumpCanvas
|
||||
|
||||
# <a name="HTML_Canvas"></a> HTML Canvas
|
||||
|
||||
## <a name="ArcTo"></a> ArcTo
|
||||
|
||||
# <a name="Alias"></a> Alias
|
||||
|
||||
# <a name="Anti-alias"></a> Anti-alias
|
||||
@ -107,6 +111,34 @@ bool equalsWithinTolerance(const SkPoint& p) const
|
||||
|
||||
## <a name="Row_Bytes"></a> Row Bytes
|
||||
|
||||
<a name="SkBitmap_erase"></a>
|
||||
## erase
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
void erase(SkColor c, const SkIRect& area) const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkBitmap_installPixels"></a>
|
||||
## installPixels
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool installPixels(const SkImageInfo& info, void* pixels, size_t rowBytes)
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkBitmap_readPixels"></a>
|
||||
## readPixels
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
|
||||
int srcX, int srcY, SkTransferFunctionBehavior behavior) const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
# <a name="Blend_Mode"></a> Blend Mode
|
||||
|
||||
## <a name="SkBlendMode"></a> Enum SkBlendMode
|
||||
@ -233,6 +265,31 @@ int SkColorSetARGB(a, r, g, b)
|
||||
|
||||
# <a name="Color_Space"></a> Color Space
|
||||
|
||||
# <a name="SkColorSpace"></a> Class SkColorSpace
|
||||
|
||||
<a name="SkColorSpace_MakeSRGBLinear"></a>
|
||||
## MakeSRGBLinear
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
static sk_sp<SkColorSpace> MakeSRGBLinear()
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
## <a name="SkTransferFunctionBehavior"></a> Enum SkTransferFunctionBehavior
|
||||
|
||||
### Constants
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><a name="SkTransferFunctionBehavior_kRespect"> <code><strong>SkTransferFunctionBehavior::kRespect </strong></code> </a></td><td>0</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="SkTransferFunctionBehavior_kIgnore"> <code><strong>SkTransferFunctionBehavior::kIgnore </strong></code> </a></td><td>1</td><td></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
# <a name="Core_Graphics"></a> Core Graphics
|
||||
|
||||
# <a name="Core_Text"></a> Core Text
|
||||
@ -302,6 +359,16 @@ static std::unique_ptr<SkCanvas>
|
||||
|
||||
</table>
|
||||
|
||||
## <a name="Nearest_Neighbor"></a> Nearest Neighbor
|
||||
|
||||
## <a name="Bilerp"></a> Bilerp
|
||||
|
||||
## <a name="MipMap"></a> MipMap
|
||||
|
||||
## <a name="BiCubic"></a> BiCubic
|
||||
|
||||
# <a name="Left_Side_Bearing"></a> Left Side Bearing
|
||||
|
||||
# <a name="Font"></a> Font
|
||||
|
||||
## <a name="Advance"></a> Advance
|
||||
@ -316,10 +383,6 @@ static std::unique_ptr<SkCanvas>
|
||||
|
||||
# <a name="GPU_Surface"></a> GPU Surface
|
||||
|
||||
# <a name="HTML_Canvas"></a> HTML Canvas
|
||||
|
||||
## <a name="ArcTo"></a> ArcTo
|
||||
|
||||
# <a name="Image"></a> Image
|
||||
|
||||
## <a name="Alpha_Type"></a> Alpha Type
|
||||
@ -329,9 +392,18 @@ static std::unique_ptr<SkCanvas>
|
||||
### Constants
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><a name="kUnknown_SkAlphaType"> <code><strong>kUnknown_SkAlphaType </strong></code> </a></td><td>0</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="kOpaque_SkAlphaType"> <code><strong>kOpaque_SkAlphaType </strong></code> </a></td><td>1</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="kPremul_SkAlphaType"> <code><strong>kPremul_SkAlphaType </strong></code> </a></td><td>2</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="kUnpremul_SkAlphaType"> <code><strong>kUnpremul_SkAlphaType </strong></code> </a></td><td>3</td><td></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
@ -393,6 +465,42 @@ SkImageInfo()
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImageInfo_makeColorSpace"></a>
|
||||
## makeColorSpace
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
SkImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImageInfo_minRowBytes"></a>
|
||||
## minRowBytes
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
size_t minRowBytes() const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImageInfo_isOpaque"></a>
|
||||
## isOpaque
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool isOpaque() const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImageInfo_bytesPerPixel"></a>
|
||||
## bytesPerPixel
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
int bytesPerPixel() const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
# <a name="SkImage"></a> Class SkImage
|
||||
|
||||
<a name="SkImage_makeShader"></a>
|
||||
@ -405,6 +513,35 @@ sk_sp<SkShader> makeShader(SkShader::TileMode, SkShader::TileMode,
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImage_MakeRasterCopy"></a>
|
||||
## MakeRasterCopy
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
static sk_sp<SkImage> MakeRasterCopy(const SkPixmap&)
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImage_readPixels"></a>
|
||||
## readPixels
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool readPixels(const SkPixmap& dst, int srcX, int srcY,
|
||||
CachingHint = kAllow_CachingHint) const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
<a name="SkImage_scalePixels"></a>
|
||||
## scalePixels
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool scalePixels(const SkPixmap& dst, SkFilterQuality,
|
||||
CachingHint = kAllow_CachingHint) const
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
# <a name="Image_Filter"></a> Image Filter
|
||||
|
||||
## <a name="Scaling"></a> Scaling
|
||||
@ -417,16 +554,59 @@ sk_sp<SkShader> makeShader(SkShader::TileMode, SkShader::TileMode,
|
||||
|
||||
# <a name="SkIRect"></a> Struct SkIRect
|
||||
|
||||
# <a name="Left_Side_Bearing"></a> Left Side Bearing
|
||||
<a name="SkIRect_intersect"></a>
|
||||
## intersect
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool intersect(const SkIRect& r)
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
# <a name="Mask"></a> Mask
|
||||
|
||||
# <a name="SkMask"></a> Class SkMask
|
||||
|
||||
## <a name="SkMask_Format"></a> Enum SkMask::Format
|
||||
|
||||
### Constants
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><a name="SkMask_kBW_Format"> <code><strong>SkMask::kBW_Format </strong></code> </a></td><td>0</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="SkMask_kA8_Format"> <code><strong>SkMask::kA8_Format </strong></code> </a></td><td>1</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="SkMask_k3D_Format"> <code><strong>SkMask::k3D_Format </strong></code> </a></td><td>2</td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a name="SkMask_kARGB32_Format"> <code><strong>SkMask::kARGB32_Format </strong></code> </a></td><td>3</td><td></td>
|
||||
</tr>
|
||||
k <tr>
|
||||
<td><a name="SkMask_LCD16_Format"> <code><strong>SkMask::LCD16_Format </strong></code> </a></td><td>4</td><td></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
# <a name="Mask_Alpha"></a> Mask Alpha
|
||||
|
||||
# <a name="Mask_Filter"></a> Mask Filter
|
||||
|
||||
# <a name="SkMaskFilter"></a> Class SkMaskFilter
|
||||
|
||||
# <a name="Math"></a> Math
|
||||
|
||||
<a name="sk_64_isS32"></a>
|
||||
## sk_64_isS32
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
static inline bool sk_64_isS32(int64_t value)
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
# <a name="Matrix"></a> Matrix
|
||||
|
||||
# <a name="SkMatrix"></a> Struct SkMatrix
|
||||
@ -521,9 +701,9 @@ SkCanvas* beginRecording(const SkRect& bounds, SkBBHFactory* bbhFactory = NULL,
|
||||
|
||||
## <a name="Storage"></a> Storage
|
||||
|
||||
# <a name="Pixmap"></a> Pixmap
|
||||
# <a name="PixelRef"></a> PixelRef
|
||||
|
||||
# <a name="SkPixmap"></a> Class SkPixmap
|
||||
# <a name="SkPixelRef"></a> Class SkPixelRef
|
||||
|
||||
# <a name="PostScript"></a> PostScript
|
||||
|
||||
@ -628,6 +808,15 @@ static sk_sp<SkSurface> MakeRasterDirect(const SkImageInfo&, void* pixels,
|
||||
|
||||
---
|
||||
|
||||
<a name="SkSurface_readPixels"></a>
|
||||
## readPixels
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
|
||||
bool readPixels(const SkPixmap& dst, int srcX, int srcY) ;
|
||||
</pre>
|
||||
|
||||
---
|
||||
|
||||
## <a name="Properties"></a> Properties
|
||||
|
||||
# <a name="SkSurfaceProps"></a> Class SkSurfaceProps
|
||||
|
@ -17,14 +17,34 @@ Build <a href="#Bookmaker">Bookmaker</a>.
|
||||
$ ninja -<a href="undocumented#C">C</a> out/dir bookmaker</pre>
|
||||
|
||||
Generate an starter <a href="#Bookmaker">Bookmaker</a> file from an existing include.
|
||||
This writes <a href="usingBookmaker#SkXXX">SkXXX</a>.bmh in the current directory, which is
|
||||
out/dir/obj/ from an IDE.
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
$ ./out/dir/bookmaker -t -i include/core/<a href="usingBookmaker#SkXXX">SkXXX</a>.h</pre>
|
||||
$ ./out/dir/bookmaker -i include/core/<a href="undocumented#SkXXX.h">SkXXX.h</a> -t docs</pre>
|
||||
|
||||
Copy <a href="usingBookmaker#SkXXX">SkXXX</a>.bmh to docs.
|
||||
Use your favorite editor to fill out docs/<a href="usingBookmaker#SkXXX">SkXXX</a>.bmh.
|
||||
If a method or function has an unnamed parameter, bookmaker generates an error:
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
<a href="undocumented#C">C</a>:/puregit/include/core/<a href="SkPixmap_Reference#SkPixmap">SkPixmap</a>.h(208): error: # missing param name
|
||||
bool erase(const SkColor4f&, const SkIRect* subset = nullptr) const
|
||||
^
|
||||
</pre>
|
||||
|
||||
All parameters require names to allow markdown and doxygen documents to refer to
|
||||
them. After naming all parameters, check in the include before continuing.
|
||||
|
||||
A successful run generates
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
docs/<a href="undocumented#SkXXX_Reference">SkXXX Reference</a>.bmh</pre>
|
||||
|
||||
.
|
||||
|
||||
Next, use your favorite editor to fill out
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
docs/<a href="undocumented#SkXXX_Reference">SkXXX Reference</a>.bmh</pre>
|
||||
|
||||
.
|
||||
|
||||
## <a name="Style"></a> Style
|
||||
|
||||
@ -86,12 +106,13 @@ This reports if a method no longer exists or its parameters have changed.
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
$ ./out/dir/bookmaker -x -b docs/<a href="usingBookmaker#SkXXX">SkXXX</a>.bmh -i include/core/<a href="usingBookmaker#SkXXX">SkXXX</a>.h</pre>
|
||||
|
||||
Generate an updated include header.
|
||||
This writes the updated <a href="undocumented#SkXXX.h">SkXXX.h</a> to the current directory.
|
||||
Generate an updated include header. Run:
|
||||
|
||||
<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
|
||||
$ ./out/dir/bookmaker -p -b docs -i include/core/<a href="usingBookmaker#SkXXX">SkXXX</a>.h</pre>
|
||||
|
||||
to write the updated <a href="undocumented#SkXXX.h">SkXXX.h</a> to the current directory.
|
||||
|
||||
## <a name="Bugs"></a> Bugs
|
||||
|
||||
<a href="#Bookmaker">Bookmaker</a> bugs are trackedhere.
|
||||
|
@ -938,6 +938,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
|
||||
definition->fFiddle = normalized_name(name);
|
||||
}
|
||||
definition->fMarkType = markType;
|
||||
definition->fAnonymous = fAnonymous;
|
||||
this->setAsParent(definition);
|
||||
}
|
||||
} break;
|
||||
@ -1078,9 +1079,6 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy
|
||||
fMarkup.emplace_front(markType, defStart, fLineCount, fParent);
|
||||
definition = &fMarkup.front();
|
||||
definition->fContentStart = fChar;
|
||||
if (MarkType::kFormula == markType && MarkType::kRow == definition->fParent->fMarkType) {
|
||||
SkDebugf("");
|
||||
}
|
||||
definition->fName = typeNameBuilder[0];
|
||||
definition->fFiddle = fParent->fFiddle;
|
||||
char suffix = '\0';
|
||||
@ -1383,6 +1381,7 @@ bool BmhParser::dumpExamples(const char* fiddleJsonFileName) const {
|
||||
}
|
||||
fprintf(fiddleOut, "\n}\n");
|
||||
fclose(fiddleOut);
|
||||
SkDebugf("wrote %s\n", fiddleJsonFileName);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1525,10 +1524,6 @@ bool BmhParser::findDefinitions() {
|
||||
}
|
||||
}
|
||||
} else if (TableState::kNone == fTableState) {
|
||||
bool parentIsList = MarkType::kList == fParent->fMarkType;
|
||||
if (parentIsList && fLineCount > 1230) {
|
||||
SkDebugf("");
|
||||
}
|
||||
// fixme? no nested tables for now
|
||||
fColStart = fChar - 1;
|
||||
fMarkup.emplace_front(MarkType::kRow, fColStart, fLineCount, fParent);
|
||||
@ -1627,6 +1622,7 @@ bool HackParser::hackFiles() {
|
||||
} while (!this->eof());
|
||||
fprintf(out, "%.*s", (int) (fEnd - start), start);
|
||||
fclose(out);
|
||||
SkDebugf("wrote %s\n", filename.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2143,15 +2139,16 @@ string BmhParser::word(const string& prefix, const string& delimiter) {
|
||||
// pass one: parse text, collect definitions
|
||||
// pass two: lookup references
|
||||
|
||||
DEFINE_string2(bmh, b, "", "A path to a *.bmh file or a directory.");
|
||||
DEFINE_string2(bmh, b, "", "Path to a *.bmh file or a directory.");
|
||||
DEFINE_string2(examples, e, "", "File of fiddlecli input, usually fiddle.json (For now, disables -r -f -s)");
|
||||
DEFINE_string2(fiddle, f, "", "File of fiddlecli output, usually fiddleout.json.");
|
||||
DEFINE_string2(include, i, "", "A path to a *.h file or a directory.");
|
||||
DEFINE_string2(include, i, "", "Path to a *.h file or a directory.");
|
||||
DEFINE_bool2(hack, k, false, "Do a find/replace hack to update all *.bmh files. (Requires -b)");
|
||||
DEFINE_bool2(stdout, o, false, "Write file out to standard out.");
|
||||
DEFINE_bool2(populate, p, false, "Populate include from bmh. (Requires -b -i)");
|
||||
DEFINE_string2(ref, r, "", "Resolve refs and write bmh_*.md files to path. (Requires -b)");
|
||||
DEFINE_string2(spellcheck, s, "", "Spell-check [once, all, mispellings]. (Requires -b)");
|
||||
DEFINE_bool2(tokens, t, false, "Output include tokens. (Requires -i)");
|
||||
DEFINE_string2(spellcheck, s, "", "Spell-check [once, all, mispelling]. (Requires -b)");
|
||||
DEFINE_string2(tokens, t, "", "Directory to write bmh from include. (Requires -i)");
|
||||
DEFINE_bool2(crosscheck, x, false, "Check bmh against includes. (Requires -b -i)");
|
||||
|
||||
static int count_children(const Definition& def, MarkType markType) {
|
||||
@ -2220,7 +2217,6 @@ int main(int argc, char** const argv) {
|
||||
SkDebugf("hack failed\n");
|
||||
return -1;
|
||||
}
|
||||
SkDebugf("hack success\n");
|
||||
return 0;
|
||||
}
|
||||
if ((FLAGS_include.isEmpty() || FLAGS_bmh.isEmpty()) && FLAGS_populate) {
|
||||
@ -2238,7 +2234,7 @@ int main(int argc, char** const argv) {
|
||||
SkCommandLineFlags::PrintUsage();
|
||||
return 1;
|
||||
}
|
||||
if (FLAGS_include.isEmpty() && FLAGS_tokens) {
|
||||
if (FLAGS_include.isEmpty() && !FLAGS_tokens.isEmpty()) {
|
||||
SkDebugf("-t requires -i\n");
|
||||
SkCommandLineFlags::PrintUsage();
|
||||
return 1;
|
||||
@ -2255,14 +2251,16 @@ int main(int argc, char** const argv) {
|
||||
}
|
||||
bool done = false;
|
||||
if (!FLAGS_include.isEmpty()) {
|
||||
if (FLAGS_tokens || FLAGS_crosscheck) {
|
||||
if (!FLAGS_tokens.isEmpty() || FLAGS_crosscheck) {
|
||||
IncludeParser includeParser;
|
||||
includeParser.validate();
|
||||
if (!includeParser.parseFile(FLAGS_include[0], ".h")) {
|
||||
return -1;
|
||||
}
|
||||
if (FLAGS_tokens) {
|
||||
includeParser.dumpTokens();
|
||||
if (!FLAGS_tokens.isEmpty()) {
|
||||
if (includeParser.dumpTokens(FLAGS_tokens[0])) {
|
||||
bmhParser.fWroteOut = true;
|
||||
}
|
||||
done = true;
|
||||
} else if (FLAGS_crosscheck) {
|
||||
if (!includeParser.crossCheck(bmhParser)) {
|
||||
@ -2276,9 +2274,11 @@ int main(int argc, char** const argv) {
|
||||
if (!includeWriter.parseFile(FLAGS_include[0], ".h")) {
|
||||
return -1;
|
||||
}
|
||||
includeWriter.fDebugOut = FLAGS_stdout;
|
||||
if (!includeWriter.populate(bmhParser)) {
|
||||
return -1;
|
||||
}
|
||||
bmhParser.fWroteOut = true;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
@ -2290,7 +2290,9 @@ int main(int argc, char** const argv) {
|
||||
}
|
||||
if (!done && !FLAGS_ref.isEmpty() && FLAGS_examples.isEmpty()) {
|
||||
MdOut mdOut(bmhParser);
|
||||
mdOut.buildReferences(FLAGS_bmh[0], FLAGS_ref[0]);
|
||||
if (mdOut.buildReferences(FLAGS_bmh[0], FLAGS_ref[0])) {
|
||||
bmhParser.fWroteOut = true;
|
||||
}
|
||||
}
|
||||
if (!done && !FLAGS_spellcheck.isEmpty() && FLAGS_examples.isEmpty()) {
|
||||
bmhParser.spellCheck(FLAGS_bmh[0], FLAGS_spellcheck);
|
||||
@ -2307,18 +2309,21 @@ int main(int argc, char** const argv) {
|
||||
if (!bmhParser.dumpExamples(FLAGS_examples[0])) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
for (const auto& topic : bmhParser.fTopicMap) {
|
||||
if (topic.second->fParent) {
|
||||
continue;
|
||||
if (!bmhParser.fWroteOut) {
|
||||
for (const auto& topic : bmhParser.fTopicMap) {
|
||||
if (topic.second->fParent) {
|
||||
continue;
|
||||
}
|
||||
examples += count_children(*topic.second, MarkType::kExample);
|
||||
methods += count_children(*topic.second, MarkType::kMethod);
|
||||
topics += count_children(*topic.second, MarkType::kSubtopic);
|
||||
topics += count_children(*topic.second, MarkType::kTopic);
|
||||
}
|
||||
examples += count_children(*topic.second, MarkType::kExample);
|
||||
methods += count_children(*topic.second, MarkType::kMethod);
|
||||
topics += count_children(*topic.second, MarkType::kSubtopic);
|
||||
topics += count_children(*topic.second, MarkType::kTopic);
|
||||
SkDebugf("topics=%d classes=%d methods=%d examples=%d\n",
|
||||
bmhParser.fTopicMap.size(), bmhParser.fClassMap.size(),
|
||||
methods, examples);
|
||||
}
|
||||
SkDebugf("topics=%d classes=%d methods=%d examples=%d\n",
|
||||
bmhParser.fTopicMap.size(), bmhParser.fClassMap.size(),
|
||||
methods, examples);
|
||||
return 0;
|
||||
}
|
||||
|
@ -8,8 +8,6 @@
|
||||
#ifndef bookmaker_DEFINED
|
||||
#define bookmaker_DEFINED
|
||||
|
||||
#define STDOUT_TO_IDE_OUT 0
|
||||
|
||||
#include "SkCommandLineFlags.h"
|
||||
#include "SkData.h"
|
||||
|
||||
@ -71,7 +69,10 @@ enum class KeyWord {
|
||||
kStruct,
|
||||
kTemplate,
|
||||
kTypedef,
|
||||
kUint16_t,
|
||||
kUint32_t,
|
||||
kUint64_t,
|
||||
kUint8_t,
|
||||
kUnion,
|
||||
kUnsigned,
|
||||
kVoid,
|
||||
@ -161,6 +162,24 @@ enum class Punctuation { // catch-all for misc symbols tracked in C
|
||||
kColon, // for foo() : bar(1), baz(2) {}
|
||||
};
|
||||
|
||||
enum class KeyProperty {
|
||||
kNone,
|
||||
kClassSection,
|
||||
kFunction,
|
||||
kModifier,
|
||||
kNumber,
|
||||
kObject,
|
||||
kPreprocessor,
|
||||
};
|
||||
|
||||
struct IncludeKey {
|
||||
const char* fName;
|
||||
KeyWord fKeyWord;
|
||||
KeyProperty fProperty;
|
||||
};
|
||||
|
||||
extern const IncludeKey kKeyWords[];
|
||||
|
||||
static inline bool has_nonwhitespace(const string& s) {
|
||||
bool nonwhite = false;
|
||||
for (const char& c : s) {
|
||||
@ -449,7 +468,9 @@ public:
|
||||
bool skipName(const char* word) {
|
||||
size_t len = strlen(word);
|
||||
if (len <= (size_t) (fEnd - fChar) && !strncmp(word, fChar, len)) {
|
||||
fChar += len;
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
this->next();
|
||||
}
|
||||
}
|
||||
return this->eof() || ' ' >= fChar[0];
|
||||
}
|
||||
@ -890,6 +911,7 @@ public:
|
||||
bool fPrivate = false;
|
||||
bool fShort = false;
|
||||
bool fMemberStart = false;
|
||||
bool fAnonymous = false;
|
||||
mutable bool fVisited = false;
|
||||
};
|
||||
|
||||
@ -959,6 +981,7 @@ public:
|
||||
|
||||
ParserCommon() : TextParser()
|
||||
, fParent(nullptr)
|
||||
, fDebugOut(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -972,9 +995,9 @@ public:
|
||||
|
||||
void indentToColumn(int column) {
|
||||
SkASSERT(column >= fColumn);
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
SkDebugf("%*s", column - fColumn, "");
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
SkDebugf("%*s", column - fColumn, "");
|
||||
}
|
||||
fprintf(fOut, "%*s", column - fColumn, "");
|
||||
fColumn = column;
|
||||
fSpaces += column - fColumn;
|
||||
@ -1068,10 +1091,13 @@ public:
|
||||
fPendingSpace = false;
|
||||
}
|
||||
writePending();
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
string check(data, size);
|
||||
SkDebugf("%s", check.c_str());
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
if (!strncmp("SK_SUPPORT", data, 10)) {
|
||||
SkDebugf("");
|
||||
}
|
||||
string check(data, size);
|
||||
SkDebugf("%s", check.c_str());
|
||||
}
|
||||
fprintf(fOut, "%.*s", size, data);
|
||||
int added = 0;
|
||||
while (size > 0 && '\n' != data[--size]) {
|
||||
@ -1109,9 +1135,6 @@ public:
|
||||
}
|
||||
|
||||
void writeString(const char* str) {
|
||||
if (!strcmp("utf-8", str)) {
|
||||
SkDebugf("");
|
||||
}
|
||||
SkASSERT(strlen(str) > 0);
|
||||
SkASSERT(' ' < str[0]);
|
||||
SkASSERT(' ' < str[strlen(str) - 1]);
|
||||
@ -1119,9 +1142,12 @@ public:
|
||||
fPendingSpace = false;
|
||||
}
|
||||
writePending();
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
SkDebugf("%s", str);
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
if (!strncmp("SK_SUPPORT", str, 10)) {
|
||||
SkDebugf("");
|
||||
}
|
||||
SkDebugf("%s", str);
|
||||
}
|
||||
SkASSERT(!strchr(str, '\n'));
|
||||
fprintf(fOut, "%s", str);
|
||||
fColumn += strlen(str);
|
||||
@ -1134,9 +1160,9 @@ public:
|
||||
fPendingLF = SkTMin(fPendingLF, fMaxLF);
|
||||
bool wroteLF = false;
|
||||
while (fLinefeeds < fPendingLF) {
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
SkDebugf("\n");
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
SkDebugf("\n");
|
||||
}
|
||||
fprintf(fOut, "\n");
|
||||
++fLinefeeds;
|
||||
wroteLF = true;
|
||||
@ -1145,17 +1171,17 @@ public:
|
||||
if (wroteLF) {
|
||||
SkASSERT(0 == fColumn);
|
||||
SkASSERT(fIndent >= fSpaces);
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
SkDebugf("%*s", fIndent - fSpaces, "");
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
SkDebugf("%*s", fIndent - fSpaces, "");
|
||||
}
|
||||
fprintf(fOut, "%*s", fIndent - fSpaces, "");
|
||||
fColumn = fIndent;
|
||||
fSpaces = fIndent;
|
||||
}
|
||||
if (fPendingSpace) {
|
||||
#if STDOUT_TO_IDE_OUT
|
||||
SkDebugf(" ");
|
||||
#endif
|
||||
if (fDebugOut) {
|
||||
SkDebugf(" ");
|
||||
}
|
||||
fprintf(fOut, " ");
|
||||
++fColumn;
|
||||
fPendingSpace = false;
|
||||
@ -1173,6 +1199,7 @@ public:
|
||||
int fColumn; // current column; number of chars past last linefeed
|
||||
int fIndent; // desired indention
|
||||
bool fPendingSpace; // a space should preceed the next string or block
|
||||
bool fDebugOut; // set true to write to std out
|
||||
private:
|
||||
typedef TextParser INHERITED;
|
||||
};
|
||||
@ -1231,7 +1258,7 @@ public:
|
||||
, { "Alias", nullptr, MarkType::kAlias, R_N, E_N, 0 }
|
||||
, { "Bug", nullptr, MarkType::kBug, R_N, E_N, 0 }
|
||||
, { "Class", &fClassMap, MarkType::kClass, R_Y, E_O, M_CSST | M(Root) }
|
||||
, { "Code", nullptr, MarkType::kCode, R_Y, E_N, M_CSST | M_E }
|
||||
, { "Code", nullptr, MarkType::kCode, R_O, E_N, M_CSST | M_E }
|
||||
, { "", nullptr, MarkType::kColumn, R_Y, E_N, M(Row) }
|
||||
, { "", nullptr, MarkType::kComment, R_N, E_N, 0 }
|
||||
, { "Const", &fConstMap, MarkType::kConst, R_Y, E_N, M_E | M_ST }
|
||||
@ -1396,7 +1423,7 @@ public:
|
||||
bool fInComment;
|
||||
bool fInString;
|
||||
bool fCheckMethods;
|
||||
|
||||
bool fWroteOut = false;
|
||||
private:
|
||||
typedef ParserCommon INHERITED;
|
||||
};
|
||||
@ -1489,7 +1516,7 @@ public:
|
||||
IClassDefinition* defineClass(const Definition& includeDef, const string& className);
|
||||
void dumpClassTokens(IClassDefinition& classDef);
|
||||
void dumpComment(Definition* token);
|
||||
void dumpTokens();
|
||||
bool dumpTokens(const string& directory);
|
||||
bool findComments(const Definition& includeDef, Definition* markupDef);
|
||||
|
||||
Definition* findIncludeObject(const Definition& includeDef, MarkType markType,
|
||||
@ -1651,6 +1678,11 @@ public:
|
||||
kMixed,
|
||||
};
|
||||
|
||||
enum class Phrase {
|
||||
kNo,
|
||||
kYes,
|
||||
};
|
||||
|
||||
enum class PunctuationState {
|
||||
kStart,
|
||||
kDelimiter,
|
||||
@ -1721,11 +1753,12 @@ public:
|
||||
fAttrDeprecated = nullptr;
|
||||
fAnonymousEnumCount = 1;
|
||||
fInStruct = false;
|
||||
fWroteMethod = false;
|
||||
}
|
||||
|
||||
string resolveMethod(const char* start, const char* end, bool first);
|
||||
string resolveRef(const char* start, const char* end, bool first, RefType* refType);
|
||||
Wrote rewriteBlock(int size, const char* data);
|
||||
Wrote rewriteBlock(int size, const char* data, Phrase phrase);
|
||||
Definition* structMemberOut(const Definition* memberStart, const Definition& child);
|
||||
void structOut(const Definition* root, const Definition& child,
|
||||
const char* commentStart, const char* commentEnd);
|
||||
@ -1748,6 +1781,7 @@ private:
|
||||
int fStructValueTab;
|
||||
int fStructCommentTab;
|
||||
bool fInStruct;
|
||||
bool fWroteMethod;
|
||||
|
||||
typedef IncludeParser INHERITED;
|
||||
};
|
||||
@ -1822,6 +1856,7 @@ private:
|
||||
bool buildRefFromFile(const char* fileName, const char* outDir);
|
||||
bool checkParamReturnBody(const Definition* def) const;
|
||||
void childrenOut(const Definition* def, const char* contentStart);
|
||||
const Definition* findParamType();
|
||||
const Definition* isDefined(const TextParser& parser, const string& ref, bool report) const;
|
||||
string linkName(const Definition* ) const;
|
||||
string linkRef(const string& leadingSpaces, const Definition*, const string& ref) const;
|
||||
@ -1837,6 +1872,7 @@ private:
|
||||
fEnumClass = nullptr;
|
||||
fMethod = nullptr;
|
||||
fRoot = nullptr;
|
||||
fLastParam = nullptr;
|
||||
fTableState = TableState::kNone;
|
||||
fHasFiddle = false;
|
||||
fInDescription = false;
|
||||
@ -1857,6 +1893,7 @@ private:
|
||||
const Definition* fEnumClass;
|
||||
Definition* fMethod;
|
||||
RootDefinition* fRoot;
|
||||
const Definition* fLastParam;
|
||||
TableState fTableState;
|
||||
bool fHasFiddle;
|
||||
bool fInDescription; // FIXME: for now, ignore unfound camelCase in description since it may
|
||||
|
@ -55,7 +55,6 @@ bool FiddleParser::parseFiddles() {
|
||||
if (']' != this->peek()) {
|
||||
// report compiler errors
|
||||
int brackets = 1;
|
||||
const char* errorStart = fChar;
|
||||
do {
|
||||
if ('[' == this->peek()) {
|
||||
++brackets;
|
||||
@ -63,8 +62,7 @@ bool FiddleParser::parseFiddles() {
|
||||
--brackets;
|
||||
}
|
||||
} while (!this->eof() && this->next() && brackets > 0);
|
||||
SkDebugf("fiddle compile error in %s: %.*s\n", name.c_str(), (int) (fChar - errorStart),
|
||||
errorStart);
|
||||
this->reportError("fiddle compile error");
|
||||
}
|
||||
if (!this->skipExact("],\n")) {
|
||||
return false;
|
||||
@ -73,12 +71,10 @@ bool FiddleParser::parseFiddles() {
|
||||
return false;
|
||||
}
|
||||
if ('"' != this->peek()) {
|
||||
const char* errorStart = fChar;
|
||||
if (!this->skipToEndBracket('"')) {
|
||||
return false;
|
||||
}
|
||||
SkDebugf("fiddle runtime error in %s: %.*s\n", name.c_str(), (int) (fChar - errorStart),
|
||||
errorStart);
|
||||
this->reportError("fiddle runtime error");
|
||||
}
|
||||
if (!this->skipExact("\",\n")) {
|
||||
return false;
|
||||
@ -92,7 +88,7 @@ bool FiddleParser::parseFiddles() {
|
||||
}
|
||||
Definition* example = this->findExample(name);
|
||||
if (!example) {
|
||||
SkDebugf("missing example %s\n", name.c_str());
|
||||
this->reportError("missing example");
|
||||
}
|
||||
string hash(hashStart, fChar - hashStart);
|
||||
if (example) {
|
||||
@ -141,21 +137,21 @@ bool FiddleParser::parseFiddles() {
|
||||
SkASSERT(fiddleLen > 0);
|
||||
if (bmhLen != fiddleLen) {
|
||||
if (!foundVolatile) {
|
||||
SkDebugf("mismatched stdout len in %s\n", name.c_str());
|
||||
bmh.reportError("mismatched stdout len\n");
|
||||
}
|
||||
} else if (strncmp(bmh.fChar, fiddle.fChar, fiddleLen)) {
|
||||
if (!foundVolatile) {
|
||||
SkDebugf("mismatched stdout text in %s\n", name.c_str());
|
||||
bmh.reportError("mismatched stdout text\n");
|
||||
}
|
||||
}
|
||||
bmh.skipToLineStart();
|
||||
fiddle.skipToLineStart();
|
||||
} while (!bmh.eof() && !fiddle.eof());
|
||||
if (!foundStdOut) {
|
||||
SkDebugf("bmh %s missing stdout\n", name.c_str());
|
||||
bmh.reportError("bmh %s missing stdout\n");
|
||||
} else if (!bmh.eof() || !fiddle.eof()) {
|
||||
if (!foundVolatile) {
|
||||
SkDebugf("%s mismatched stdout eof\n", name.c_str());
|
||||
bmh.reportError("%s mismatched stdout eof\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,22 +7,6 @@
|
||||
|
||||
#include "bookmaker.h"
|
||||
|
||||
enum class KeyProperty {
|
||||
kNone,
|
||||
kClassSection,
|
||||
kFunction,
|
||||
kModifier,
|
||||
kNumber,
|
||||
kObject,
|
||||
kPreprocessor,
|
||||
};
|
||||
|
||||
struct IncludeKey {
|
||||
const char* fName;
|
||||
KeyWord fKeyWord;
|
||||
KeyProperty fProperty;
|
||||
};
|
||||
|
||||
const IncludeKey kKeyWords[] = {
|
||||
{ "", KeyWord::kNone, KeyProperty::kNone },
|
||||
{ "SK_API", KeyWord::kSK_API, KeyProperty::kModifier },
|
||||
@ -55,7 +39,10 @@ const IncludeKey kKeyWords[] = {
|
||||
{ "struct", KeyWord::kStruct, KeyProperty::kObject },
|
||||
{ "template", KeyWord::kTemplate, KeyProperty::kObject },
|
||||
{ "typedef", KeyWord::kTypedef, KeyProperty::kObject },
|
||||
{ "uint16_t", KeyWord::kUint16_t, KeyProperty::kNumber },
|
||||
{ "uint32_t", KeyWord::kUint32_t, KeyProperty::kNumber },
|
||||
{ "uint64_t", KeyWord::kUint64_t, KeyProperty::kNumber },
|
||||
{ "uint8_t", KeyWord::kUint8_t, KeyProperty::kNumber },
|
||||
{ "union", KeyWord::kUnion, KeyProperty::kObject },
|
||||
{ "unsigned", KeyWord::kUnsigned, KeyProperty::kNumber },
|
||||
{ "void", KeyWord::kVoid, KeyProperty::kNumber },
|
||||
@ -417,6 +404,8 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
|
||||
if (!root->dumpUnVisited()) {
|
||||
SkDebugf("some struct elements not found; struct finding in includeParser is missing\n");
|
||||
}
|
||||
SkDebugf("cross-checked %s\n", className.c_str());
|
||||
bmhParser.fWroteOut = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -683,13 +672,17 @@ void IncludeParser::dumpComment(Definition* token) {
|
||||
}
|
||||
|
||||
// dump equivalent markup
|
||||
void IncludeParser::dumpTokens() {
|
||||
bool IncludeParser::dumpTokens(const string& dir) {
|
||||
string skClassName = this->className();
|
||||
string fileName = skClassName + ".bmh";
|
||||
string fileName = dir;
|
||||
if (dir.length() && '/' != dir[dir.length() - 1]) {
|
||||
fileName += '/';
|
||||
}
|
||||
fileName += skClassName + "_Reference.bmh";
|
||||
fOut = fopen(fileName.c_str(), "wb");
|
||||
if (!fOut) {
|
||||
SkDebugf("could not open output file %s\n", fileName.c_str());
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
string prefixName = skClassName.substr(0, 2);
|
||||
string topicName = skClassName.length() > 2 && isupper(skClassName[2]) &&
|
||||
@ -811,6 +804,8 @@ void IncludeParser::dumpTokens() {
|
||||
fprintf(fOut, "#Topic %s ##" "\n",
|
||||
topicName.c_str());
|
||||
fclose(fOut);
|
||||
SkDebugf("wrote %s\n", fileName.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IncludeParser::findComments(const Definition& includeDef, Definition* markupDef) {
|
||||
@ -960,7 +955,8 @@ bool IncludeParser::parseComment(const string& filename, const char* start, cons
|
||||
if (!parser.skipWord(kKeyWords[(int) markupDef->fKeyWord].fName)) {
|
||||
return reportError<bool>("missing object type");
|
||||
}
|
||||
if (!parser.skipWord(markupDef->fName.c_str())) {
|
||||
if (!parser.skipWord(markupDef->fName.c_str()) &&
|
||||
KeyWord::kEnum != markupDef->fKeyWord) {
|
||||
return reportError<bool>("missing object name");
|
||||
}
|
||||
|
||||
@ -1232,6 +1228,9 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (end > start && ' ' >= end[-1]) {
|
||||
--end;
|
||||
}
|
||||
markupDef->fTokens.emplace_back(MarkType::kMethod, start, end, tokenIter->fLineCount,
|
||||
markupDef);
|
||||
Definition* markupChild = &markupDef->fTokens.back();
|
||||
@ -1404,14 +1403,14 @@ bool IncludeParser::parseChar() {
|
||||
char test = *fChar;
|
||||
if ('\\' == fPrev) {
|
||||
if ('\n' == test) {
|
||||
++fLineCount;
|
||||
// ++fLineCount;
|
||||
fLine = fChar + 1;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
switch (test) {
|
||||
case '\n':
|
||||
++fLineCount;
|
||||
// ++fLineCount;
|
||||
fLine = fChar + 1;
|
||||
if (fInChar) {
|
||||
return reportError<bool>("malformed char");
|
||||
@ -1777,7 +1776,7 @@ bool IncludeParser::parseChar() {
|
||||
}
|
||||
done:
|
||||
fPrev = test;
|
||||
++fChar;
|
||||
this->next();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -79,12 +79,12 @@ void IncludeWriter::enumHeaderOut(const RootDefinition* root,
|
||||
this->lfcr();
|
||||
wroteHeader = true;
|
||||
}
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart);
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart, Phrase::kNo);
|
||||
if (MarkType::kAnchor == test->fMarkType) {
|
||||
commentStart = test->fContentStart;
|
||||
commentEnd = test->fChildren[0]->fStart;
|
||||
this->writeSpace();
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart);
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart, Phrase::kNo);
|
||||
this->writeSpace();
|
||||
}
|
||||
commentStart = test->fTerminator;
|
||||
@ -207,7 +207,7 @@ void IncludeWriter::enumMembersOut(const RootDefinition* root, Definition& child
|
||||
this->indentToColumn(fEnumItemCommentTab);
|
||||
this->writeString("//!<");
|
||||
this->writeSpace();
|
||||
this->rewriteBlock(commentLen, commentStart);
|
||||
this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
}
|
||||
if (onePast) {
|
||||
fIndent -= 4;
|
||||
@ -274,7 +274,8 @@ void IncludeWriter::enumMembersOut(const RootDefinition* root, Definition& child
|
||||
if (!currentEnumItem->fShort) {
|
||||
this->writeCommentHeader();
|
||||
fIndent += 4;
|
||||
bool wroteLineFeed = Wrote::kLF == this->rewriteBlock(commentLen, commentStart);
|
||||
bool wroteLineFeed = Wrote::kLF ==
|
||||
this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
fIndent -= 4;
|
||||
if (wroteLineFeed || fColumn > 100 - 3 /* space * / */ ) {
|
||||
this->lfcr();
|
||||
@ -405,6 +406,9 @@ void IncludeWriter::enumSizeItems(const Definition& child) {
|
||||
|
||||
// walk children and output complete method doxygen description
|
||||
void IncludeWriter::methodOut(const Definition* method, const Definition& child) {
|
||||
if ("SkPath::getGenerationID" == method->fName) {
|
||||
SkDebugf("");
|
||||
}
|
||||
fBmhMethod = method;
|
||||
fMethodDef = &child;
|
||||
fContinuation = nullptr;
|
||||
@ -427,14 +431,14 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
commentLen = (int) (methodProp->fStart - commentStart);
|
||||
if (commentLen > 0) {
|
||||
SkASSERT(commentLen < 1000);
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart)) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart, Phrase::kNo)) {
|
||||
this->lfcr();
|
||||
}
|
||||
}
|
||||
commentStart = methodProp->fContentStart;
|
||||
commentLen = (int) (methodProp->fContentEnd - commentStart);
|
||||
if (commentLen > 0) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart)) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart, Phrase::kNo)) {
|
||||
this->lfcr();
|
||||
}
|
||||
}
|
||||
@ -447,7 +451,7 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
commentStart = methodProp->fContentStart;
|
||||
commentLen = (int) (methodProp->fContentEnd - commentStart);
|
||||
if (commentLen > 0) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart)) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart, Phrase::kNo)) {
|
||||
this->lfcr();
|
||||
}
|
||||
}
|
||||
@ -458,7 +462,7 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
commentLen = (int) (methodProp->fStart - commentStart);
|
||||
if (commentLen > 0) {
|
||||
SkASSERT(commentLen < 1000);
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart)) {
|
||||
if (Wrote::kNone != this->rewriteBlock(commentLen, commentStart, Phrase::kNo)) {
|
||||
this->lfcr();
|
||||
}
|
||||
}
|
||||
@ -474,7 +478,7 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
}
|
||||
}
|
||||
SkASSERT(commentLen > 0 && commentLen < 1500);
|
||||
this->rewriteBlock(commentLen, commentStart);
|
||||
this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
// compute indention column
|
||||
size_t column = 0;
|
||||
bool hasParmReturn = false;
|
||||
@ -513,7 +517,7 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
// FIXME : detect this earlier; assert if #Return is empty
|
||||
SkASSERT(partLen > 0 && partLen < 200);
|
||||
fIndent = column;
|
||||
this->rewriteBlock(partLen, partStart);
|
||||
this->rewriteBlock(partLen, partStart, Phrase::kYes);
|
||||
fIndent = saveIndent;
|
||||
this->lfcr();
|
||||
}
|
||||
@ -525,6 +529,7 @@ void IncludeWriter::methodOut(const Definition* method, const Definition& child)
|
||||
this->writeCommentTrailer();
|
||||
fBmhMethod = nullptr;
|
||||
fMethodDef = nullptr;
|
||||
fWroteMethod = true;
|
||||
}
|
||||
|
||||
void IncludeWriter::structOut(const Definition* root, const Definition& child,
|
||||
@ -537,15 +542,18 @@ void IncludeWriter::structOut(const Definition* root, const Definition& child,
|
||||
this->writeString(child.fName.c_str());
|
||||
fIndent += 4;
|
||||
this->lfcr();
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart);
|
||||
this->rewriteBlock((int) (commentEnd - commentStart), commentStart, Phrase::kNo);
|
||||
fIndent -= 4;
|
||||
this->lfcr();
|
||||
this->writeCommentTrailer();
|
||||
}
|
||||
|
||||
Definition* IncludeWriter::structMemberOut(const Definition* memberStart, const Definition& child) {
|
||||
const char* blockStart = fDeferComment ? fLastComment->fContentEnd : fStart;
|
||||
this->writeBlockTrim((int) (memberStart->fStart - blockStart), blockStart);
|
||||
const char* blockStart = !fWroteMethod && fDeferComment ? fLastComment->fContentEnd : fStart;
|
||||
const char* blockEnd = fWroteMethod && fDeferComment ? fDeferComment->fStart - 1 :
|
||||
memberStart->fStart;
|
||||
this->writeBlockTrim((int) (blockEnd - blockStart), blockStart);
|
||||
fWroteMethod = false;
|
||||
const char* commentStart = nullptr;
|
||||
ptrdiff_t commentLen = 0;
|
||||
string name(child.fContentStart, (int) (child.fContentEnd - child.fContentStart));
|
||||
@ -567,7 +575,7 @@ Definition* IncludeWriter::structMemberOut(const Definition* memberStart, const
|
||||
fIndent += 4;
|
||||
for (auto child : commentBlock->fChildren) {
|
||||
commentLen = child->fStart - commentStart;
|
||||
wroteLineFeed |= Wrote::kLF == this->rewriteBlock(commentLen, commentStart);
|
||||
wroteLineFeed |= Wrote::kLF == this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
if (MarkType::kFormula == child->fMarkType) {
|
||||
this->writeSpace();
|
||||
this->writeBlock((int) (child->fContentEnd - child->fContentStart),
|
||||
@ -576,7 +584,7 @@ Definition* IncludeWriter::structMemberOut(const Definition* memberStart, const
|
||||
commentStart = child->fTerminator;
|
||||
}
|
||||
commentLen = commentBlock->fContentEnd - commentStart;
|
||||
wroteLineFeed |= Wrote::kLF == this->rewriteBlock(commentLen, commentStart);
|
||||
wroteLineFeed |= Wrote::kLF == this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
fIndent -= 4;
|
||||
if (wroteLineFeed || fColumn > 100 - 3 /* space * / */ ) {
|
||||
this->lfcr();
|
||||
@ -610,7 +618,7 @@ Definition* IncludeWriter::structMemberOut(const Definition* memberStart, const
|
||||
this->indentToColumn(fStructCommentTab);
|
||||
this->writeString("//!<");
|
||||
this->writeSpace();
|
||||
this->rewriteBlock(commentLen, commentStart);
|
||||
this->rewriteBlock(commentLen, commentStart, Phrase::kNo);
|
||||
this->lfcr();
|
||||
}
|
||||
return valueEnd;
|
||||
@ -652,7 +660,10 @@ void IncludeWriter::structSizeMembers(Definition& child) {
|
||||
case KeyWord::kConstExpr:
|
||||
case KeyWord::kStatic:
|
||||
case KeyWord::kInt:
|
||||
case KeyWord::kUint8_t:
|
||||
case KeyWord::kUint16_t:
|
||||
case KeyWord::kUint32_t:
|
||||
case KeyWord::kUint64_t:
|
||||
case KeyWord::kSize_t:
|
||||
case KeyWord::kFloat:
|
||||
case KeyWord::kBool:
|
||||
@ -768,10 +779,14 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
|
||||
}
|
||||
if (fContinuation) {
|
||||
if (Definition::Type::kKeyWord == child.fType) {
|
||||
if (KeyWord::kFriend == child.fKeyWord || KeyWord::kBool == child.fKeyWord ||
|
||||
if (KeyWord::kFriend == child.fKeyWord ||
|
||||
KeyWord::kSK_API == child.fKeyWord) {
|
||||
continue;
|
||||
}
|
||||
const IncludeKey& includeKey = kKeyWords[(int) child.fKeyWord];
|
||||
if (KeyProperty::kNumber == includeKey.fProperty) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (Definition::Type::kBracket == child.fType && Bracket::kParen == child.fBracket) {
|
||||
if (!clonedMethod) {
|
||||
@ -832,6 +847,11 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
|
||||
this->methodOut(method, child);
|
||||
continue;
|
||||
}
|
||||
if (Definition::Type::kPunctuation == child.fType &&
|
||||
Punctuation::kAsterisk == child.fPunctuation &&
|
||||
clonedMethod) {
|
||||
continue;
|
||||
}
|
||||
if (inConstructor) {
|
||||
continue;
|
||||
}
|
||||
@ -983,7 +1003,10 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
|
||||
case KeyWord::kConstExpr:
|
||||
case KeyWord::kStatic:
|
||||
case KeyWord::kInt:
|
||||
case KeyWord::kUint8_t:
|
||||
case KeyWord::kUint16_t:
|
||||
case KeyWord::kUint32_t:
|
||||
case KeyWord::kUint64_t:
|
||||
case KeyWord::kUnsigned:
|
||||
case KeyWord::kSize_t:
|
||||
case KeyWord::kFloat:
|
||||
@ -1024,6 +1047,8 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
|
||||
fIndent -= 4;
|
||||
fContinuation = nullptr;
|
||||
fDeferComment = nullptr;
|
||||
} else if (KeyWord::kUint8_t == child.fKeyWord) {
|
||||
continue;
|
||||
} else {
|
||||
if (fInEnum && KeyWord::kClass == child.fChildren[0]->fKeyWord) {
|
||||
if (!this->populate(child.fChildren[0], &pair, root)) {
|
||||
@ -1039,6 +1064,7 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
|
||||
if (KeyWord::kEnum == child.fParent->fKeyWord ||
|
||||
(KeyWord::kClass == child.fParent->fKeyWord && child.fParent->fParent &&
|
||||
KeyWord::kEnum == child.fParent->fParent->fKeyWord)) {
|
||||
SkASSERT(Bracket::kBrace == child.fBracket);
|
||||
this->enumMembersOut(root, child);
|
||||
this->writeString("};");
|
||||
this->lf(2);
|
||||
@ -1098,6 +1124,9 @@ bool IncludeWriter::populate(BmhParser& bmhParser) {
|
||||
bool allPassed = true;
|
||||
for (auto& includeMapper : fIncludeMap) {
|
||||
size_t lastSlash = includeMapper.first.rfind('/');
|
||||
if (string::npos == lastSlash) {
|
||||
lastSlash = includeMapper.first.rfind('\\');
|
||||
}
|
||||
if (string::npos == lastSlash || lastSlash >= includeMapper.first.length() - 1) {
|
||||
return this->reportError<bool>("malformed include name");
|
||||
}
|
||||
@ -1126,6 +1155,7 @@ bool IncludeWriter::populate(BmhParser& bmhParser) {
|
||||
this->lfcr();
|
||||
this->writePending();
|
||||
fclose(fOut);
|
||||
SkDebugf("wrote %s\n", fileName.c_str());
|
||||
}
|
||||
return allPassed;
|
||||
}
|
||||
@ -1226,17 +1256,21 @@ string IncludeWriter::resolveRef(const char* start, const char* end, bool first,
|
||||
(int) (child->fContentEnd - child->fContentStart));
|
||||
break;
|
||||
}
|
||||
if (MarkType::kClass == child->fMarkType ||
|
||||
MarkType::kStruct == child->fMarkType ||
|
||||
MarkType::kEnum == child->fMarkType ||
|
||||
MarkType::kEnumClass == child->fMarkType) {
|
||||
substitute = child->fName;
|
||||
if (MarkType::kEnum == child->fMarkType && fInEnum) {
|
||||
size_t parentClassEnd = substitute.find("::");
|
||||
SkASSERT(string::npos != parentClassEnd);
|
||||
substitute = substitute.substr(parentClassEnd + 2);
|
||||
}
|
||||
if (!substitute.length()) {
|
||||
for (auto child : rootDef->fChildren) {
|
||||
if (MarkType::kClass == child->fMarkType ||
|
||||
MarkType::kStruct == child->fMarkType ||
|
||||
(MarkType::kEnum == child->fMarkType && !child->fAnonymous) ||
|
||||
MarkType::kEnumClass == child->fMarkType) {
|
||||
substitute = child->fName;
|
||||
if (MarkType::kEnum == child->fMarkType && fInEnum) {
|
||||
size_t parentClassEnd = substitute.find("::");
|
||||
SkASSERT(string::npos != parentClassEnd);
|
||||
substitute = substitute.substr(parentClassEnd + 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!substitute.length()) {
|
||||
@ -1244,7 +1278,7 @@ string IncludeWriter::resolveRef(const char* start, const char* end, bool first,
|
||||
if (parent) {
|
||||
if (MarkType::kClass == parent->fMarkType ||
|
||||
MarkType::kStruct == parent->fMarkType ||
|
||||
MarkType::kEnum == parent->fMarkType ||
|
||||
(MarkType::kEnum == parent->fMarkType && !parent->fAnonymous) ||
|
||||
MarkType::kEnumClass == parent->fMarkType) {
|
||||
if (parent->fParent != fRootTopic) {
|
||||
substitute = parent->fName;
|
||||
@ -1324,7 +1358,7 @@ int IncludeWriter::lookupReference(const PunctuationState punctuation, const Wor
|
||||
}
|
||||
|
||||
/* returns true if rewriteBlock wrote linefeeds */
|
||||
IncludeWriter::Wrote IncludeWriter::rewriteBlock(int size, const char* data) {
|
||||
IncludeWriter::Wrote IncludeWriter::rewriteBlock(int size, const char* data, Phrase phrase) {
|
||||
bool wroteLineFeeds = false;
|
||||
while (size > 0 && data[0] <= ' ') {
|
||||
--size;
|
||||
@ -1338,7 +1372,8 @@ IncludeWriter::Wrote IncludeWriter::rewriteBlock(int size, const char* data) {
|
||||
}
|
||||
int run = 0;
|
||||
Word word = Word::kStart;
|
||||
PunctuationState punctuation = PunctuationState::kStart;
|
||||
PunctuationState punctuation = Phrase::kNo == phrase ?
|
||||
PunctuationState::kStart : PunctuationState::kSpace;
|
||||
int start = 0;
|
||||
int lastWrite = 0;
|
||||
int lineFeeds = 0;
|
||||
|
@ -22,7 +22,9 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
|
||||
bool lineStart = true;
|
||||
string ref;
|
||||
string leadingSpaces;
|
||||
int distFromParam = 99;
|
||||
do {
|
||||
++distFromParam;
|
||||
const char* base = t.fChar;
|
||||
t.skipWhiteSpace();
|
||||
const char* wordStart = t.fChar;
|
||||
@ -138,6 +140,8 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
|
||||
const Definition* def;
|
||||
if (fMethod && (def = fMethod->hasParam(ref))) {
|
||||
result += linkRef(leadingSpaces, def, ref);
|
||||
fLastParam = def;
|
||||
distFromParam = 0;
|
||||
continue;
|
||||
} else if (!fInDescription && ref[0] != '0'
|
||||
&& string::npos != ref.find_first_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ")) {
|
||||
@ -145,6 +149,23 @@ string MdOut::addReferences(const char* refStart, const char* refEnd,
|
||||
if (('f' != ref[0] && string::npos == ref.find("()"))
|
||||
// || '.' != t.backup(ref.c_str())
|
||||
&& ('k' != ref[0] && string::npos == ref.find("_Private"))) {
|
||||
if ('.' == wordStart[0] && distFromParam == 1) {
|
||||
const Definition* paramType = this->findParamType();
|
||||
if (paramType) {
|
||||
string fullName = paramType->fName + "::" + ref;
|
||||
bool found = false;
|
||||
for (auto child : paramType->fChildren) {
|
||||
if (fullName == child->fName) {
|
||||
result += linkRef(leadingSpaces, paramType, ref);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (BmhParser::Resolvable::kOut != resolvable) {
|
||||
t.reportError("missed camelCase");
|
||||
return result;
|
||||
@ -242,6 +263,7 @@ bool MdOut::buildRefFromFile(const char* name, const char* outDir) {
|
||||
filename = match + ".md";
|
||||
match += ".bmh";
|
||||
fOut = nullptr;
|
||||
string fullName;
|
||||
for (const auto& topic : fBmhParser.fTopicMap) {
|
||||
Definition* topicDef = topic.second;
|
||||
if (topicDef->fParent) {
|
||||
@ -255,7 +277,7 @@ bool MdOut::buildRefFromFile(const char* name, const char* outDir) {
|
||||
continue;
|
||||
}
|
||||
if (!fOut) {
|
||||
string fullName(outDir);
|
||||
fullName = outDir;
|
||||
if ('/' != fullName.back()) {
|
||||
fullName += '/';
|
||||
}
|
||||
@ -279,6 +301,7 @@ bool MdOut::buildRefFromFile(const char* name, const char* outDir) {
|
||||
if (fOut) {
|
||||
this->writePending();
|
||||
fclose(fOut);
|
||||
SkDebugf("wrote %s\n", fullName.c_str());
|
||||
fOut = nullptr;
|
||||
}
|
||||
return true;
|
||||
@ -330,6 +353,31 @@ void MdOut::childrenOut(const Definition* def, const char* start) {
|
||||
}
|
||||
}
|
||||
|
||||
const Definition* MdOut::findParamType() {
|
||||
SkASSERT(fMethod);
|
||||
TextParser parser(fMethod->fFileName, fMethod->fStart, fMethod->fContentStart,
|
||||
fMethod->fLineCount);
|
||||
string lastFull;
|
||||
do {
|
||||
parser.skipToAlpha();
|
||||
if (parser.eof()) {
|
||||
return nullptr;
|
||||
}
|
||||
const char* word = parser.fChar;
|
||||
parser.skipFullName();
|
||||
SkASSERT(!parser.eof());
|
||||
string name = string(word, parser.fChar - word);
|
||||
if (fLastParam->fName == name) {
|
||||
const Definition* paramType = this->isDefined(parser, lastFull, false);
|
||||
return paramType;
|
||||
}
|
||||
if (isupper(name[0])) {
|
||||
lastFull = name;
|
||||
}
|
||||
} while (true);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const Definition* MdOut::isDefined(const TextParser& parser, const string& ref, bool report) const {
|
||||
auto rootIter = fBmhParser.fClassMap.find(ref);
|
||||
if (rootIter != fBmhParser.fClassMap.end()) {
|
||||
|
@ -485,9 +485,11 @@ void SpellCheck::report(SkCommandLineFlags::StringArray report) {
|
||||
}
|
||||
}
|
||||
SkDebugf("\n");
|
||||
return;
|
||||
}
|
||||
if (report.contains("all")) {
|
||||
int column = 0;
|
||||
char lastInitial = 'a';
|
||||
for (auto iter : elems) {
|
||||
if (string::npos != iter.second.fFile.find("undocumented.bmh")) {
|
||||
continue;
|
||||
@ -509,50 +511,47 @@ void SpellCheck::report(SkCommandLineFlags::StringArray report) {
|
||||
if (!allLower) {
|
||||
continue;
|
||||
}
|
||||
if (column + check.length() > 100) {
|
||||
if (column + check.length() > 100 || check[0] != lastInitial) {
|
||||
SkDebugf("\n");
|
||||
column = 0;
|
||||
}
|
||||
if (check[0] != lastInitial) {
|
||||
SkDebugf("\n");
|
||||
lastInitial = check[0];
|
||||
}
|
||||
SkDebugf("%s ", check.c_str());
|
||||
column += check.length();
|
||||
}
|
||||
SkDebugf("\n\n");
|
||||
return;
|
||||
}
|
||||
if (report.contains("mispellings")) {
|
||||
const char* mispelled[] = {
|
||||
"decrementing",
|
||||
"differentially",
|
||||
"incrementing",
|
||||
"superset",
|
||||
};
|
||||
const char** mispellPtr = mispelled;
|
||||
const char** mispellEnd = &mispelled[SK_ARRAY_COUNT(mispelled)];
|
||||
for (auto iter : elems) {
|
||||
if (string::npos != iter.second.fFile.find("undocumented.bmh")) {
|
||||
continue;
|
||||
}
|
||||
if (string::npos != iter.second.fFile.find("markup.bmh")) {
|
||||
continue;
|
||||
}
|
||||
if (string::npos != iter.second.fFile.find("usingBookmaker.bmh")) {
|
||||
continue;
|
||||
}
|
||||
string check = iter.first.c_str();
|
||||
while (check.compare(*mispellPtr) > 0) {
|
||||
SkDebugf("%s not found\n", *mispellPtr);
|
||||
if (mispellEnd == ++mispellPtr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (mispellEnd == mispellPtr) {
|
||||
int index = 0;
|
||||
const char* mispelled = report[0];
|
||||
for (auto iter : elems) {
|
||||
if (string::npos != iter.second.fFile.find("undocumented.bmh")) {
|
||||
continue;
|
||||
}
|
||||
if (string::npos != iter.second.fFile.find("markup.bmh")) {
|
||||
continue;
|
||||
}
|
||||
if (string::npos != iter.second.fFile.find("usingBookmaker.bmh")) {
|
||||
continue;
|
||||
}
|
||||
string check = iter.first.c_str();
|
||||
while (check.compare(mispelled) > 0) {
|
||||
SkDebugf("%s not found\n", mispelled);
|
||||
if (report.count() == ++index) {
|
||||
break;
|
||||
}
|
||||
if (check.compare(*mispellPtr) == 0) {
|
||||
SkDebugf("%s(%d): %s\n", iter.second.fFile.c_str(), iter.second.fLine,
|
||||
iter.first.c_str());
|
||||
if (mispellEnd == ++mispellPtr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (report.count() == index) {
|
||||
break;
|
||||
}
|
||||
if (check.compare(mispelled) == 0) {
|
||||
SkDebugf("%s(%d): %s\n", iter.second.fFile.c_str(), iter.second.fLine,
|
||||
iter.first.c_str());
|
||||
if (report.count() == ++index) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user