# external references that will be documented eventually ...
#External
 DirectWrite TrueType Windows Linux Android iOS __ANDROID_API__ AHardwareBuffer
 FreeType FreeType-based Harfbuzz
 LCD RGB sRGB ARGB BGR YUV SDTV HDTV
 Unicode Unicode5 UTF-8 UTF-16 UTF-32 ASCII Unichar
 API
 BMP GIF HEIF ICO JPEG PNG WBMP WebP
 CPU
 GPU GPU-backed OpenGL Vulkan I/O MSAA
 PDF XPS
 RFC
 NaN NaNs
 U16CPU

 C C++ SIZE_MAX C_FILE
 CSS HTML

 Sa Da Sc Dc max min # temporary until figure out what to do

 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_BUILD_FOR_MAC # ditto
 SK_BUILD_FOR_IOS # ditto
 SK_SUPPORT_GPU # ditto
 SK_HAS_JPEG_LIBRARY # ditto
 SK_HAS_PNG_LIBRARY # ditto
 SK_HAS_WEBP_LIBRARY # ditto
 SK_IGNORE_GPU_DITHER # ditto
 SK_PMCOLOR_BYTE_ORDER # ditto
 SK_WARN_UNUSED_RESULT # 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 ##

# this jargon requires a substitute to lower-case the word. The word is uppercase because
# it is not a dictionary word. An alternative would be to put this in an exception list
# in the spell checker
#Topic Destructor
#Substitute destructor
##

# see comment for Destructor above
#Topic Subclasses
#Substitute subclasses
##

# see comment for Destructor above
#Topic Descenders
#Substitute descenders
##

# see comment for Destructor above
#Topic Grayscale
#Substitute grayscale
##

# see comment for Destructor above
#Topic Kerning
#Substitute kerning
##

# see comment for Destructor above
#Topic Unhinted
#Substitute unhinted
##

# this jargon requires a substitute to space the phrase.
#Topic Little_Endian
#Substitute little endian
##

#Topic Big_Endian
#Substitute big endian
##

#Topic YUV_Component_Y
#Substitute YUV component y
##

#Topic YUV_Component_U
#Substitute YUV component u
##

#Topic YUV_Component_V
#Substitute YUV component v
##

#Topic UV_Mapping
#Substitute UV mapping
##

#Topic Multi_Sample_Anti_Aliasing
#Substitute multi-sample anti-aliasing
##

#Topic GPU_Share_Group
#Substitute GPU share group
##

#Topic Bezier_Curve
#Substitute Bezier cruve
##

#Topic Coons_Patch
#Substitute Coons patch
##

#Topic Cartesian_Coordinate
#Substitute Cartesian coordinate
##

#Topic Euclidean_Distance
#Substitute Euclidean distance
##

#Topic Euclidean_Space
#Substitute Euclidean space
##

#Topic HTML_Gray
#Substitute HTML gray
##

#Topic HTML_Silver
#Substitute HTML silver
##

#Topic HTML_Lime
#Substitute HTML lime
##

#Topic HTML_Green
#Substitute HTML green
##

#Topic HTML_Aqua
#Substitute HTML aqua
##

#Topic HTML_Fuchsia
#Substitute HTML fuchsia
##

#Topic SVG_lightgray
#Substitute SVG light gray
##

#Topic SVG_darkgray
#Substitute SVG dark gray
##

# start of topics to be documented in the future

#Topic Alias
#Alias Aliased ##
#Alias Aliasing ##
##

#Topic Arc
#Alias Arcs ##
#Topic ##

#Topic Backend_Semaphore
#Alias Backend_Semaphores ##
#Class GrBackendSemaphore
##
##

#Topic BBH_Factory
#Class SkBBHFactory
##
##


#Topic Circle
#Alias Circles ##
#Topic ##

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

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

#Topic Color_Space
#Class SkColorSpace
    #Method static sk_sp<SkColorSpace> MakeSRGBLinear()
    ##
    #Method bool gammaCloseToSRGB() const
    ##
    #Method static bool Equals(const SkColorSpace* src, const SkColorSpace* dst)
    ##
##
##

#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 Debug_Canvas
#Class SkDebugCanvas
##
##

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

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

#Topic Deserial_Procs
#Struct SkDeserialProcs
##
##

#Topic Device
#Class SkBaseDevice
##
##

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

#Topic Draw_Layer
##

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

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

# to be in topic Encoded_Image_Format
#EnumClass SkEncodedImageFormat
    #Const kUnknown 0
    ##
    #Const kBMP 1
    ##
    #Const kGIF 2
    ##
    #Const kICO 3
    ##
    #Const kJPEG 4
    ##
    #Const kPNG 5
    ##
    #Const kWBMP 6
    ##
    #Const kWEBP 7
    ##
    #Const kPKM 8
    ##
    #Const kKTX 9
    ##
    #Const kASTC 10
    ##
    #Const kDNG 11
    ##
    #Const kHEIF 12
    ##
##
# end of topic Encoded_Image_Format

#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
#Subtopic ID
##
#Alias Glyphs ##
##

#Topic GPU_Context
#Substitute GPU context
#Class GrContext
#Method void flush()
##
##
##

#Topic GPU_Surface
#Substitute GPU surface
##

#Topic GPU_Texture
#Substitute GPU texture
##

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

#Topic Image_Filter
#Class SkImageFilter
#Class ##
#Topic ##

#Class SkImageGenerator
##

#Topic Image_Scaling
##

#Topic ISize
#Struct SkISize
##
##

#Topic Left_Side_Bearing
##

#Topic Line
#Alias Lines ##
#Topic ##

# to be in 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)
    ##
##
# end of Topic Malloc_Pixel_Ref

#Struct SkMask
##

#Topic Mask_Alpha
#Topic ##

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

# to be in 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)
    ##
# end of Topic Math

#Topic Meta_Data
#Class SkMetaData
##
##

#Topic Mip_Map
#Substitute mip map
##

#Topic Nine_Patch
##

# to be in Topic Number_Types
    #Typedef uint16_t SkGlyphID
    #Typedef ##
    #Topic Scalar
    #Alias Scalar ##
    #Alias Scalars ##
    #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_ScalarNearlyZero
    to be written
    ##
    #Const SK_MinS32
    to be written
    ##
    #Const SK_MaxS32
    to be written
    ##
    #Typedef int32_t SkUnichar
    #Typedef ##
    #Typedef unsigned U8CPU
    #Typedef ##
# end of Topic Number_Types

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

# to be in Topic Path_Measure
    #Class SkPathMeasure
            #Method void dump() const
            ##
    ##
# end of Topic Path_Measure

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

#Topic Picture_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 Point3
#Struct SkPoint3
##
#Topic ##

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

#Topic Premultiply
#Alias Premultiplied ##
#Alias Premultiplies ##
##

#Topic Raster_Engine
##

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

#Topic Raster_Bitmap
##

#Topic Raster_Surface
##

# to be in Topic Rasterizer
#Class SkRasterizer
#Class ##
# end of Topic Rasterizer

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

#Topic Render_Target
#Class GrRenderTarget
##
##

#Topic Right_Side_Bearing
##

#Topic RSXform
#Struct SkRSXform
##
##

#Topic Serial_Procs
#Struct SkSerialProcs
##
##

#Topic Shader
#Class SkShader
    #Enum TileMode
        #Const kClamp_TileMode 0
        ##
        #Const kRepeat_TileMode 1
        ##
        #Const kMirror_TileMode 2
        ##
    ##
    #Method static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy,
                                            const SkMatrix* localMatrix = nullptr)
    ##
    #Method static sk_sp<SkShader> MakeCompose(sk_sp<SkShader> dst, sk_sp<SkShader> src,
                                       SkBlendMode mode, float lerp = 1)
    ##
#Class ##
#Topic ##

#Topic Size
#Struct SkSize
##
##

#Topic Sprite
#Alias Sprites ##
#Topic ##

#Topic Stream_Asset
#Class SkStreamAsset
##
#Topic ##

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

#Topic Supersampling
##

#Topic Surface_Characterization
#Class SkSurfaceCharacterization
##
##

#Topic Surface_Properties
    #Class SkSurfaceProps
        #Subtopic Legacy_Font_Host
        #Enum InitType
            #Const kLegacyFontHost_InitType 0
            ##
        ##
        #Topic ##
    ##
##

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

#Topic Text
#Topic ##

#Topic Texture
#Class GrBackendTexture
    #Method bool isValid() const
    ##
##
##

#Topic RenderTarget
#Class GrBackendRenderTarget
    #Method bool isValid() const
    ##
##
##

#Topic Transfer_Mode
##

#Topic Typeface
#Subtopic ID
#Typedef uint32_t SkFontID
##
##
#Class SkTypeface
    #Method SkFontID uniqueID() const
    ##
#Class ##
#Topic ##

# to be defined in types
    #Typedef intptr_t GrBackendObject
    #Typedef ##

    #EnumClass GrMipMapped
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##

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

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

    #EnumClass GrSemaphoresSubmitted
    #Const kNo 0
    ##
    #Const kYes 1
    ##
    #EnumClass ##
# end of defined in types

#Topic Unpremultiply
#Alias Unpremultiplied ##
##

#Topic Vertices
#Class SkVertices
#Class Bone
##
##
#Subtopic Colors
##
#Subtopic Texs
##
#Topic ##

#Topic Xfermode_Image_Filter
#Class SkXfermodeImageFilter
##
##
