# external references that will be documented eventually ...
#External
 DirectWrite TrueType Windows Linux Android iOS __ANDROID_API__
 FreeType FreeType-based Harfbuzz   
 Descenders Kerning Unhinted 
 LCD RGB sRGB
 Unicode Unicode5 UTF-8 UTF-16 UTF-32 ASCII Unichar
 API
 CPU
 GPU GPU-backed OpenGL Vulkan I/O MSAA UV_Mapping Multi_Sample_Anti_Aliasing
 PDF XPS
 RFC
 NaN NaNs
 Bezier_Curve Coons_Patch Cartesian_Coordinate Euclidean_Distance Euclidean_Space
 C C++ Destructor Subclasses
 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
 SK_SUPPORT_GPU # 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 Backend_Semaphore
#Class GrBackendSemaphore
#Alias GrBackendSemaphores
##
##

#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 uint32_t SkColor
    #Typedef ##

    #Typedef uint32_t SkPMColor
    #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
#Method void toString(SkString* str) const 
##
#Class ##
#Topic ##

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

#Topic Create_Color_Space_Xform_Canvas
#Method std::unique_ptr<SkCanvas> SK_API SkCreateColorSpaceXformCanvas(SkCanvas* target,
                                                                       sk_sp<SkColorSpace> targetCS)
##
##

#Topic Core_Graphics
#Substitute Core Graphics
##

#Topic Core_Text
#Substitute Core Text
##

#Topic Curve
#Alias Curves
##

#Topic Data
#Class SkData
##
##

#Topic Debugging
#Method SK_API void SkDebugf(const char format[], ...)
##
##

#Topic Deferred_Display_List
#Class SkDeferredDisplayList
##
#Subtopic Recorder
#Class SkDeferredDisplayListRecorder
##
##
##

#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
#Subtopic Resource_Cache_Limits
#Alias Resource_Cache_Limits
##
#Class GrContext
#Method void flush()
##
##
##

#Topic GPU_Surface
#Substitute GPU surface
##

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

#Topic Image_Alpha_Type
#Alias Alpha_Type
#Alias Alpha_Types
    #Enum SkAlphaType
        #Const kUnknown_SkAlphaType 0
        ##
        #Const kOpaque_SkAlphaType 1
        ##
        #Const kPremul_SkAlphaType 2
        ##
        #Const kUnpremul_SkAlphaType 3
        ##
    ##
#Topic ##
#Topic Image_Color_Type
#Subtopic Native_Color_Type
#Alias Native_Color_Type
#Substitute native SkColorType
##
#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 ##
#Topic ##
#Topic Image_Info
    #Struct SkImageInfo
        #Method SkImageInfo()
        ##
        #Method static SkImageInfo MakeN32Premul(int width, int height, sk_sp<SkColorSpace> cs = nullptr)
        ##
        #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
        ##
    ## 
#Topic ##

#Topic Image_Filter
#Subtopic Scaling
#Subtopic ##
#Class SkImageFilter
#Method void toString(SkString* str) const 
##
#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
##
#Method void toString(SkString* str) 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 Meta_Data
#Class SkMetaData
##
##

#Topic Mip_Map
#Alias Mip_Maps
##

#Topic Nine_Patch
##

#Topic Number_Types
    #Typedef uint16_t SkGlyphID
    #Typedef ##
    #Topic Scalar
    #Alias Scalar
    #Typedef float 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 int32_t SkUnichar
    #Typedef ##
    #Typedef unsigned 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
    #Method void toString(SkString* str) const
    ##
    #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
#Class SkPicture
#Method virtual void playback(SkCanvas*, AbortCallback* = nullptr) const = 0
##
##
#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()
    ##
##
##

#Topic Pixel_Serializer
#Class SkPixelSerializer
##
##

#Enum SkPixelGeometry
##

# Topic Point_Array
# Substitute SkPoint arrays
# 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 Render_Target
#Class GrRenderTarget
##
##

#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_Characterization
#Class SkSurfaceCharacterization
##
##

#Topic Surface_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 Texture
#Class GrBackendTexture
##
##

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

#Topic Types
    #Typedef intptr_t GrBackendObject
    #Typedef ##

    #Enum GrSurfaceOrigin
    #Const kBottomLeft_GrSurfaceOrigin 0 
    ##
    #Const kTopLeft_GrSurfaceOrigin 1
    ##
    #Enum ##

    #Subtopic Budgeted
    #EnumClass SkBudgeted
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##
    ##

    #EnumClass GrSemaphoresSubmitted
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##
#Topic ##

#Topic Unpremultiply
#Alias Unpremultiplied
##

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

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

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