# 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
 PDF XPS
 RFC
 NaN NaNs
 Bezier Coons Cartesian Euclidean
 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_ABORT       # ditto
 SK_API         # 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 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 Debugging
#Method SK_API void SkDebugf(const char format[], ...)
##
##

#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
            ##
            #Method int height() const
            ##
            #Method int width() const
            ##
            #Method SkColorType colorType() const
            ##
            #Method SkAlphaType alphaType() const
            ##
            #Method SkColorSpace* colorSpace() const
            ##
            #Method bool isOpaque() const
            ##
            #Method size_t minRowBytes() const
            ##
            #Method size_t computeByteSize(size_t rowBytes) const
            ##
            #Method void validate() 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 ISize
#Struct SkISize
##
##

#Topic Left_Side_Bearing 
##

#Topic Line
#Alias Lines
#Topic ##

#Topic Malloc_Pixel_Ref
#Class SkMallocPixelRef
    #Method static sk_sp<SkPixelRef> MakeZeroed(const SkImageInfo&, size_t rowBytes)
    ##
    #Method static sk_sp<SkPixelRef> MakeAllocate(const SkImageInfo&, size_t rowBytes)
    ##
##
##

#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
#Method virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
                            SkIPoint* margin) const
##
#Class ##
#Topic ##

#Topic Math
    #Method static inline bool sk_64_isS32(int64_t value)
    ##
    #Method SkIntToScalar(x)
    ##
    #Method SkScalarRoundToInt(x)
    ##
    #Method SkScalarFloorToInt(x)
    ##
    #Method SkScalarCeilToInt(x)
    ##
    #Method SkScalarFloorToScalar(x)
    ##
    #Method SkScalarCeilToScalar(x)
    ##
    #Method SkScalarIsFinite(x)
    ##
    #Method SkScalarIsNaN(x)
    ##
    #Method template <typename D, typename S> inline bool SkTFitsIn(S s)
    ##
##

#Topic Mip_Map
##

#Topic Nine_Patch
##

#Topic Number_Types
    #Typedef SkGlyphID
    #Typedef ##
    #Topic Scalar
    #Alias Scalar
    #Typedef SkScalar
    #Typedef ##
    ##
    #Const SK_MinS32FitsInFloat
    to be written
    ##
    #Const SK_MaxS32FitsInFloat
    to be written
    ##
    #Const SK_ScalarMin
    to be written
    ##
    #Const SK_ScalarMax
    to be written
    ##
    #Const SK_ScalarInfinity
    to be written
    ##
    #Const SK_ScalarNegativeInfinity
    to be written
    ##
    #Const SK_ScalarNaN
    to be written
    ##
    #Const SK_MinS32
    to be written
    ##
    #Const SK_MaxS32
    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 Pixel_Ref
#Class SkPixelRef
    #Method int width() const
    ##
    #Method int height() const
    ##
    #Method bool isImmutable() const
    ##
    #Method void setImmutable()
    ##
##
##

#Enum SkPixelGeometry
##

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

#Topic Point3
#Struct SkPoint3
##
#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 Reference_Count
#Substitute SkRefCnt
#Class SkRefCnt
#Class ##
#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 Size
#Struct SkSize
##
##

#Topic Sprite
#Alias Sprites
#Topic ##

#Topic Stream
#Class SkStream
#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
#Alias Vectors
#Struct SkVector
##
##

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

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

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