# external references that will be documented eventually ...
#External
 DirectWrite TrueType Windows Linux Android iOS __ANDROID_API__ AHardwareBuffer
 FreeType FreeType-based Harfbuzz
 LCD RGB sRGB BGR RGBA ARGB YUV YUVA HSV 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 VkDevice I/O MSAA
 PDF XPS
 RFC
 NaN NaNs
 bool U16CPU int int8_t int16_t int32_t int64_t uint8_t uint16_t uint32_t uint64_t size_t
 nullptr
 malloc() calloc() assert() std::move()
 C C++ SIZE_MAX C_FILE FILE
 CSS HTML

 affine destructor multitexturing representable subclasses descender descenders grayscale kerning
 unhinted
 
 Sa Da Sc Dc 0xAARRGGBB # temporary until figure out what to do

 SkUserConfig.h  # not external, but still thinking about how markup refers to this
 SkXXX.h        # ditto
 SkXXX_Reference # ditto
 Skia           # ditto
 SK_ABORT       # ditto
 SK_DEBUG       # ditto
 SK_RELEASE     # ditto
 SK_USE_FREETYPE_EMBOLDEN # 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

# 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 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> 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 void SkDebugf(const char format[], ...)
##
##

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

#Topic Deserial_Procs
#Struct SkDeserialProcs
#Member SkDeserialPictureProc   fPictureProc
##
#Member void*   fPictureCtx
##
#Member SkDeserialTypefaceProc   fTypefaceProc
##
#Member void*   fTypefaceCtx
##
##
##

#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
##
#Enum SkTextEncoding
#Const kUTF8_SkTextEncoding 0
##
#Const kUTF16_SkTextEncoding 1
##
#Const kUTF32_SkTextEncoding 2
##
#Const kGlyphID_SkTextEncoding 3
##
##
#Class SkFont
##
#EnumClass SkFontHinting
#Const kNone 0
#Line # glyph outlines unchanged ##
    Leaves glyph outlines unchanged from their native representation.
    With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
    bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
    outline being loaded should not be fitted to the pixel grid but simply scaled
    to 26.6 fractional pixels.
##
#Const kSlight 1
#Line # minimal modification to improve contrast ##
    Modifies glyph outlines minimally to improve contrast.
    With FreeType, this is equivalent in spirit to the
    FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
    lighter hinting algorithm for non-monochrome modes.
    Generated Glyphs may be fuzzy but better resemble their original shape.
##
#Const kNormal 2
#Line # glyph outlines modified to improve contrast ##
    Modifies glyph outlines to improve contrast. This is the default.
    With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
    choosing the default hinting algorithm, which is optimized for standard
    gray-level rendering.
##
#Const kFull 3
#Line # modifies glyph outlines for maximum contrast ##
    Modifies glyph outlines for maximum contrast. With FreeType, this selects
    FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if kLCDRenderText_Flag is set.
    FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
    horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
    variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
##
##
#Struct SkFontMetrics
#Line # values computed by Font_Manager using Typeface ##

    SkFontMetrics is filled out by SkPaint::getFontMetrics. SkFontMetrics contents
    reflect the values
    computed by Font_Manager using Typeface. Values are set to zero if they are
    not available.

    All vertical values are relative to the baseline, on a y-axis pointing down.
    Zero is on the baseline, negative values are above the baseline, and positive
    values are below the baseline.

    fUnderlineThickness and fUnderlinePosition have a bit set in fFlags if their values
    are valid, since their value may be zero.

    fStrikeoutThickness and fStrikeoutPosition have a bit set in fFlags if their values
    are valid, since their value may be zero.

    #Enum FontMetricsFlags
    #Line # valid Font_Metrics ##

    FontMetricsFlags are set in fFlags when underline and strikeout metrics are valid;
    the underline or strikeout metric may be valid and zero.
    Fonts with embedded bitmaps may not have valid underline or strikeout metrics.

        #Const kUnderlineThicknessIsValid_Flag 0x0001
        #Line # set if fUnderlineThickness is valid ##
        ##
        #Const kUnderlinePositionIsValid_Flag  0x0002
        #Line # set if fUnderlinePosition is valid ##
        ##
        #Const kStrikeoutThicknessIsValid_Flag 0x0004
        #Line # set if fStrikeoutThickness is valid ##
        ##
        #Const kStrikeoutPositionIsValid_Flag  0x0008
        #Line # set if fStrikeoutPosition is valid ##
        ##

    #Enum ##

    #Member uint32_t    fFlags
    #Line # is set to FontMetricsFlags when metrics are valid ##
    ##

    #Member SkScalar    fTop
    #Line # extent above baseline ##
        Greatest extent above the baseline for any glyph.
        Typically less than zero.
    ##

    #Member SkScalar    fAscent
    #Line # distance to reserve above baseline ##
        Recommended distance above the baseline to reserve for a line of text.
        Typically less than zero.
    ##

    #Member SkScalar    fDescent
    #Line # distance to reserve below baseline ##
        Recommended distance below the baseline to reserve for a line of text.
        Typically greater than zero.
    ##

    #Member SkScalar    fBottom
    #Line # extent below baseline ##
        Greatest extent below the baseline for any glyph.
        Typically greater than zero.
    ##

    #Member SkScalar    fLeading
    #Line # distance to add between lines ##
        Recommended distance to add between lines of text.
        Typically greater than or equal to zero.
    ##

    #Member SkScalar    fAvgCharWidth
    #Line # average character width ##
        Average character width, if it is available.
        Zero if no average width is stored in the font.
    ##

    #Member SkScalar    fMaxCharWidth
    #Line # maximum character width ##
    ##

    #Member SkScalar    fXMin
    #Line # minimum x ##
        Minimum bounding box x-axis value for all Glyphs.
        Typically less than zero.
    ##

    #Member SkScalar    fXMax
    #Line # maximum x ##
        Maximum bounding box x-axis value for all Glyphs.
        Typically greater than zero.
    ##

    #Member SkScalar    fXHeight
    #Line # height of lower-case 'x' ##
        May be zero if no lower-case height is stored in the font.
    ##

    #Member SkScalar    fCapHeight
    #Line # height of an upper-case letter ##
        May be zero if no upper-case height is stored in the font.
    ##

    #Member SkScalar    fUnderlineThickness
    #Line # underline thickness ##
        If the metric is valid, the kUnderlineThicknessIsValid_Flag is set in fFlags.
        If kUnderlineThicknessIsValid_Flag is clear, fUnderlineThickness is zero.
    ##

    #Member SkScalar    fUnderlinePosition
    #Line # underline position relative to baseline ##
       Position of the top of the underline stroke relative to the baseline.
       Typically positive when valid.

       If the metric is valid, the kUnderlinePositionIsValid_Flag is set in fFlags.
       If kUnderlinePositionIsValid_Flag is clear, fUnderlinePosition is zero.
    ##

    #Member SkScalar    fStrikeoutThickness
    #Line # strikeout thickness ##

        If the metric is valid, the kStrikeoutThicknessIsValid_Flag is set in fFlags.
        If kStrikeoutThicknessIsValid_Flag is clear, fStrikeoutThickness is zero.
    ##

    #Member SkScalar    fStrikeoutPosition
    #Line # strikeout position relative to baseline ##
        Position of the bottom of the strikeout stroke relative to the baseline.
        Typically negative when valid.

        If the metric is valid, the kStrikeoutPositionIsValid_Flag is set in fFlags.
        If kStrikeoutPositionIsValid_Flag is clear, fStrikeoutPosition is zero.
    ##

    #Method bool hasUnderlineThickness(SkScalar* thickness) const
    #Line # returns underline thickness if set ##

#NoExample
        ##
    ##

    #Method bool hasUnderlinePosition(SkScalar* position) const
    #Line # returns underline position if set ##

#NoExample
        ##
    ##

    #Method bool hasStrikeoutThickness(SkScalar* thickness) const
    #Line # returns strikeout thickness if set ##

#NoExample
        ##
    ##

    #Method bool hasStrikeoutPosition(SkScalar* position) const
    #Line # returns strikeout position if set ##

#NoExample
        ##
    ##

#Struct ##
#Topic ##

#Topic Font_Manager
#Topic ##

#Topic Glyph
#Subtopic ID
##
#Alias Glyphs ##
##

#Topic GPU_Context
#Substitute GPU context
#Class GrContext
#Method void abandonContext()
##
#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
#Method int32_t width() const
##
#Method int32_t height() const
##
##
##

#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 Luminosity(dstColor)
    # this permits using Luminosity() in documentation
    ##
    #Method Saturation(dstColor)
    # this permits using Saturation() in documentation
    ##
    #Method SetLuminosity(srcSaturation, dstLuminosity)
    # this permits using SetLuminosity() in documentation
    ##
    #Method SetSaturation(srcSaturation, dstSaturation)
    # this permits using SetSaturation() in documentation
    ##
    #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)
    ##
    #Method float abs(float x)
    # this permits using abs(x) in documentation
    ##
    #Method float max(float x)
    # this permits using max(x) in documentation
    ##
    #Method float min(float x)
    # this permits using max(x) in documentation
    ##
    #Method float sizeof(float x)
    # this permits using sizeof(x) in documentation
    ##
    #Method float sqrt(float x)
    # this permits using sqrt(x) in documentation
    ##
    #Method static inline bool sk_64_isS32(int64_t value)
    ##
# 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 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 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
#Class SkRefCnt
#Class ##
##

#Topic Smart_Pointer
#Class sk_sp
#Class ##
#Topic ##

#Topic Render_Target
#Class GrRenderTarget
##
##

#Topic Right_Side_Bearing
##

#Topic RSXform
#Struct SkRSXform
#Member SkScalar fSCos
##
#Member SkScalar fSSin
##
#Member SkScalar fTx
##
#Member SkScalar fTy
##
##
##

#Topic Serial_Procs
#Struct SkSerialProcs
#Member SkSerialPictureProc   fPictureProc
##
#Member void*   fPictureCtx
##
#Member SkSerialTypefaceProc   fTypefaceProc
##
#Member void*   fTypefaceCtx
##
##
##

#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
#Method int32_t width() const
##
#Method int32_t height() const
##
##
##

#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
##
#Subtopic Sweep_Flag
#Substitute SVG sweep-flag
##
##

#Topic Text
#Topic ##

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

#Topic YUV_Planes
#Class SkYUVAIndex
##
##

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