# external references that will be documented eventually ...
#External
 DirectWrite TrueType Windows Linux Android iOS
 FreeType FreeType-based Harfbuzz   
 Descenders Kerning Unhinted 
 LCD RGB
 Unicode Unicode5 UTF-8 UTF-16 UTF-32 ASCII Unichar
 API
 CPU
 GPU GPU-backed OpenGL Vulkan
 RFC
 Bezier Coons Cartesian
 C C++ Destructor Subclasses
 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
 SK_IGNORE_TO_STRING #  ditto

# FreeType related
FT_LOAD_TARGET_LIGHT
FT_LOAD_TARGET_NORMAL
FT_LOAD_TARGET_LCD
FT_LOAD_TARGET_LCD_V
FT_LOAD_NO_HINTING
FT_Load_Glyph

#External ##

#Topic Alias
#Alias Aliased
#Alias Aliasing
##

#Topic Anti-alias
#Alias Anti-aliased
#Alias Anti-aliasing
##

#Topic Arc
#Alias Arcs
#Topic ##

#Topic BBH_Factory
#Class SkBBHFactory
##
##

#Topic Bitmap
#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 ##
##

#Topic Blend_Mode
#EnumClass SkBlendMode
    #Const kSrc 1
    ##
    #Const kSrcOver 3
    ##
    #Const kPlus 12
    ##
#EnumClass ##
#Topic ##

#Topic Circle
#Alias Circles
#Topic ##

#Topic Clip_Op
#EnumClass SkClipOp
    #Const kDifference 0
    ##
    #Const kIntersect 1
    ##
##
##

#Topic Color
    #Typedef SkColor
    #Typedef ##

    # fixme: defines, not methods, need new markup type
    #Method int SkColorGetA(color)
    ##
    #Method int SkColorGetR(color)
    ##
    #Method int SkColorGetG(color)
    ##
    #Method int SkColorGetB(color)
    ##
    #Method int SkColorSetARGB(a, r, g, b)
    ##

    #Const SK_ColorBLACK 0xFF000000 
    ##
    #Const SK_ColorBLUE 0xFF0000FF 
    ##
    #Const SK_ColorGREEN 0xFF00FF00 
    ##
    #Const SK_ColorRED 0xFFFF0000 
    ##
    #Const SK_ColorWHITE 0xFFFFFFFF 
    ##
    #Subtopic Alpha
        #Alias Alpha
    #Subtopic ##
    #Subtopic RGB
    #Substitute RGB
        #Subtopic Red
            #Alias Red
        #Subtopic ##
        #Subtopic Blue
            #Alias Blue
        #Subtopic ##
        #Subtopic Green
            #Alias Green
        #Subtopic ##
    #Subtopic ##
    #Subtopic ARGB
    #Substitute ARGB
    #Subtopic ##

    #Subtopic RBG
    #Substitute RBG
    #Subtopic ##

    #Subtopic RGB-565
    #Substitute RGB-565
    #Alias Color_RGB-565 # quit changing - to _ !
    #Subtopic ##
#Topic ##

#Topic Color_Filter
#Class SkColorFilter
#Class ##
#Topic ##

#Topic Color_Space
#Class SkColorSpace
    #Method static sk_sp<SkColorSpace> MakeSRGBLinear()
    ##
##
#EnumClass SkTransferFunctionBehavior
#Const kRespect 0
##
#Const kIgnore 1
##
#EnumClass ##
##

#Topic Core_Graphics
#Substitute Core Graphics
##

#Topic Core_Text
#Substitute Core Text
##

#Topic Curve
#Alias Curves
##

#Topic Data
##

#Topic Device
#Class SkBaseDevice
##
#Topic ##

#Topic Document
#Class SkDocument
    #Method SkCanvas* beginPage(SkScalar width, SkScalar height,
                        const SkRect* content = NULL)
    ##
##
#Subtopic PDF
##
##

#Topic Draw_Filter
#Class SkDrawFilter
##
##

#Topic Draw_Layer
##

#Topic Draw_Looper
#Class SkDrawLooper
#Class ##
#Topic ##

#Topic Drawable
#Class SkDrawable
    #Method void draw(SkCanvas*, const SkMatrix* = NULL)
    ##
##
##

#Topic Dump_Canvas
#Class SkDumpCanvas
##
#Topic ##

#Topic Filter_Quality
#Enum SkFilterQuality
    #Const kNone_SkFilterQuality 0
    ##
    #Const kLow_SkFilterQuality 1
    ##
    #Const kMedium_SkFilterQuality 2
    ##
    #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
#Subtopic Advance
#Subtopic ##
#Subtopic Engine
##
#Topic ##

#Topic Font_Manager
#Topic ##

#Topic Glyph
#Alias Glyphs
##

#Topic GPU_Context
#Substitute GPU context
##

#Topic GPU_Surface
#Substitute GPU surface
##

#Topic HTML_Canvas
    #Substitute HTML Canvas
    #Subtopic ArcTo
        #Substitute HTML Canvas arcTo
    ##
##

#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
    #Alias Color_Type
    #Alias Color_Types
        #Enum SkColorType
            #Const kUnknown_SkColorType 0
            ##
            #Const kAlpha_8_SkColorType 1
            ##
            #Const kRGB_565_SkColorType 2
            ##
            #Const kARGB_4444_SkColorType 3
            ##
            #Const kRGBA_8888_SkColorType 4
            ##
            #Const kBGRA_8888_SkColorType 5
            ##
            #Const kIndex_8_SkColorType 6
            ##
            #Const kGray_8_SkColorType 7
            ##
            #Const kRGBA_F16_SkColorType 8
            ##
            #ToDo   this is a lie; need to not require values for consts ##
            #Const kN32_SkColorType 4
            ##
        #Enum ##
    #Subtopic ##
    #Subtopic Info
        #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 ##

#Topic Image_Filter
#Subtopic Scaling
#Subtopic ##
#Class SkImageFilter
#Class ##
#Topic ##

#Topic Image_Scaling
##

#Topic IRect
#Struct SkIRect
    #Method bool intersect(const SkIRect& r)
    ##
##
##

#Topic Left_Side_Bearing 
##

#Topic Line
#Alias Lines
#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
#Topic ##

#Topic Mask_Filter
#Class SkMaskFilter
#Class ##
#Topic ##

#Topic Math
    #Method static inline bool sk_64_isS32(int64_t value)
    ##
##

#Topic Matrix
#Struct SkMatrix
#Struct ##
#Topic ##

#Topic Nine_Patch
##

#Topic Number_Types
    #Typedef SkGlyphID
    #Typedef ##
    #Typedef SkScalar
    #Typedef ##
    #Const SK_ScalarMax
    to be written
    ##
    #Const SK_ScalarInfinity
    to be written
    ##
    #Const SK_ScalarNegativeInfinity
    to be written
    ##
    #Const SK_ScalarNaN
    to be written
    ##
    #Typedef SkUnichar
    #Typedef ##
    #Typedef U8CPU
    #Typedef ##
#Topic ##

#Topic OS_X
#Substitute OS X
##

#Topic Oval
#Alias Ovals
#Topic ##

#Topic Paint_Defaults
#Const SkPaintDefaults_Flags 0
##
#Const SkPaintDefaults_Hinting 2
##
#Const SkPaintDefaults_TextSize 12
##
#Const SkPaintDefaults_MiterLimit 4
##
#Topic ##

#Topic Patch
#Alias Patches
#Topic ##

#Topic Path_Effect
    #Class SkPathEffect
    #Class ##
#Topic ##

#Topic Path_Measure
    #Class SkPathMeasure
            #Method void dump() const
            ##
    ##
##

#Topic PathOps
    #Method bool SK_API Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result)
    ##
#Topic ##

#Topic Picture
#Subtopic Recorder
    #Class SkPictureRecorder
        #Method SkCanvas* beginRecording(const SkRect& bounds,
                             SkBBHFactory* bbhFactory = NULL,
                             uint32_t recordFlags = 0)
        ##
    ##
##
##

#Topic Pixel
#Subtopic Storage
##
##

#Topic PixelRef
#Class SkPixelRef
##
##

#Enum SkPixelGeometry
##

#Topic Point
#Alias Points
    #Struct SkPoint
        #Method bool equalsWithinTolerance(const SkPoint& p) const
        ##
    #Struct ##
    #Subtopic Array
    #Substitute SkPoint arrays
    #Subtopic ##
#Topic ##

#Topic PostScript
#Substitute PostScript
#Subtopic Arct
#Substitute PostScript arct
##
##

#Topic Premultiply
#Alias Premultiplied
##

#Topic Raster_Engine
##

#Topic Raster_Handle_Allocator
#Class SkRasterHandleAllocator
    #Struct Rec
    ##
    #Method static std::unique_ptr<SkCanvas> MakeCanvas(std::unique_ptr<SkRasterHandleAllocator>, const SkImageInfo&, const Rec* rec = nullptr)
    ##
##
##

#Topic Raster_Surface
##

#Topic Rasterizer
#Class SkRasterizer
#Class ##
#Subtopic Layer
#Subtopic ##
#Topic ##

#Topic Rect
#Alias Rects
    #Struct SkRect
        #Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeEmpty()
        ##
        #Method void dump() const
        ##
        #Method void dumpHex() const
        ##
    #Struct ##
#Topic ##

#Topic Reference_Count
#Substitute SkRefCnt
#Class sk_sp
#Class ##
#Topic ##

#Topic Region
#Class SkRegion
##
#Topic ##

#Topic Right_Side_Bearing
##

#Topic Round_Rect
    #Class SkRRect
        #Method void dump() const
        ##
        #Method void dumpHex() const
        ##
    ##
#Topic ##

#Topic RSXform
#Struct SkRSXform
##
##

#Topic Shader
#Class SkShader
    #Enum TileMode
        #Const kClamp_TileMode 0
        ##
    ##
    #Method static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy,
                                            const SkMatrix* localMatrix = nullptr)
    ##
#Class ##
#Subtopic Gradient
#Subtopic ##
#Topic ##

#Topic Sprite
#Alias Sprites
#Topic ##

#Topic Stream
#Class SkFlattenable
#Class ##
#Topic ##

#Topic String
#Class SkString
#Class ##
#Topic ##

#Topic Supersampling
##

#Topic Surface
#Class SkSurface
    #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
        #Topic Legacy_Font_Host
        #Enum InitType
            #Const kLegacyFontHost_InitType 0
            ##
        ##
        #Topic ##
    ##
##
##

#Topic SVG
#Subtopic Canvas
##
#Subtopic Arc
##
##

#Topic Text
#Topic ##

#Topic Text_Blob
#Class SkTextBlob
#Class ##
#Topic ##

#Topic Typeface
#Class SkTypeface
#Class ##
#Topic ##

#Topic Unpremultiply
#Alias Unpremultiplied
##

#Topic Vector
#Struct SkVector
##
##

#Topic Vertices
#Subtopic Colors
##
#Subtopic Texs
##
#Topic ##

#Topic Read_Buffer
    #Struct SkReadBuffer
    #Struct ##
##

#Topic Write_Buffer
    #Struct SkWriteBuffer
    #Struct ##
#Topic ##
