package d2fonts
Import Path
github.com/pancsta/d2/d2renderers/d2fonts (on go.dev)
Dependency Relation
imports 23 packages, and imported by 10 packages
Involved Source Files
bundled_faces.go
bundled_fallback.go
TODO write a script to do this as part of CI
Currently using an online converter: https://dopiaza.org/tools/datauri/index.php
d2fonts_embed.go
Package d2fonts provides D2's embedded font families and bounded native
fallback resolution for renderer text.
fallback.go
noto_color_emoji_native.go
Package-Level Type Names (total 10)
BundledFallbackLimits bound all requests and returned bytes over the
lifetime of one composite resolver. MaxBundledBytes reserves an explicit
sub-budget for owned copies of D2's trusted font; MaxResolvedBytes bounds
those copies plus downstream results. The downstream resolver remains
responsible for its own discovery and coverage-work limits.
MaxBundledBytes defaults to MaxResolvedBytes when zero.
MaxRequestedRunes int
MaxResolvedBytes int64
func NewBundledFallbackResolver(next FallbackResolver, limits BundledFallbackLimits) (*BundledFallbackResolver, error)
BundledFallbackResolver resolves supported symbols and emoji from D2's
pinned Noto Color Emoji face before consulting the host. This makes those
glyphs deterministic across machines while leaving other scripts to a
bounded downstream resolver. On js/wasm the bundled face is absent and all
requests pass through to downstream.
HasTrusted reports whether PrepareTrusted has retained its trusted resource.
PrepareTrusted copies and hashes the resolver's trusted source exactly once
for this cache. A canceled attempt publishes neither data nor accounting.
(*BundledFallbackResolver) ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
*BundledFallbackResolver : FallbackResolver
func NewBundledFallbackResolver(next FallbackResolver, limits BundledFallbackLimits) (*BundledFallbackResolver, error)
FallbackFont is one fully resolved host font face. Data is owned by the
result and may be retained in a network-free renderer scene. FaceIndex
selects a face when Data contains an OpenType collection.
Data []byte
FaceIndex uint16
MIMEType string
Name string
func (*BundledFallbackResolver).ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
func FallbackResolver.ResolveFallbacks(context.Context, FallbackRequest) ([]FallbackFont, error)
func (*SystemFallbackResolver).ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
FallbackRequest carries both missing code points and the source text style.
Resolvers may ignore style when a face is intrinsically universal, but must
preserve it when delegating so bold, italic, semibold, and monospace text do
not silently fall back to an unrelated regular proportional face.
Family string
Runes []rune
Style string
Weight int
func (*BundledFallbackResolver).ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
func FallbackResolver.ResolveFallbacks(context.Context, FallbackRequest) ([]FallbackFont, error)
func (*SystemFallbackResolver).ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
FallbackResolver resolves an ordered set of font faces covering runes not
present in a D2 label's configured primary font. An empty or partial result
means the remaining runes have no available face; it is not an error.
Implementations must return owned immutable bytes and must honor context
cancellation between bounded I/O operations. Malformed resources and work
or byte limit violations remain errors.
( FallbackResolver) ResolveFallbacks(context.Context, FallbackRequest) ([]FallbackFont, error)
*BundledFallbackResolver
*SystemFallbackResolver
func NewBundledFallbackResolver(next FallbackResolver, limits BundledFallbackLimits) (*BundledFallbackResolver, error)
Family FontFamily
Size int
Style FontStyle
( Font) GetEncodedSubset(corpus string) string
func FontFamily.Font(size int, style FontStyle) Font
func AddFontStyle(font Font, style FontStyle, ttf []byte) error
func github.com/pancsta/d2/lib/textmeasure.(*Ruler).Measure(font Font, s string) (width, height int)
func github.com/pancsta/d2/lib/textmeasure.(*Ruler).MeasureMono(font Font, s string) (width, height int)
func github.com/pancsta/d2/lib/textmeasure.(*Ruler).MeasurePrecise(font Font, s string) (width, height float64)
( FontFamily) Font(size int, style FontStyle) Font
func AddFontFamily(name string, regularTTF, italicTTF, boldTTF, semiboldTTF []byte) (*FontFamily, error)
func github.com/pancsta/d2/d2renderers/d2svg.EmbedFonts(buf *bytes.Buffer, diagramHash, source string, fontFamily *FontFamily, monoFontFamily *FontFamily, corpus string)
func github.com/pancsta/d2/d2renderers/d2svg.EmbedFonts(buf *bytes.Buffer, diagramHash, source string, fontFamily *FontFamily, monoFontFamily *FontFamily, corpus string)
func github.com/pancsta/d2/d2exporter.Export(ctx context.Context, g *d2graph.Graph, fontFamily *FontFamily, monoFontFamily *FontFamily) (*d2target.Diagram, error)
func github.com/pancsta/d2/d2exporter.Export(ctx context.Context, g *d2graph.Graph, fontFamily *FontFamily, monoFontFamily *FontFamily) (*d2target.Diagram, error)
func github.com/pancsta/d2/d2graph.GetTextDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler, t *d2target.MText, fontFamily *FontFamily) *d2target.TextDimensions
func github.com/pancsta/d2/d2graph.GetTextDimensionsWithMono(mtexts []*d2target.MText, ruler *textmeasure.Ruler, t *d2target.MText, fontFamily *FontFamily, monoFontFamily *FontFamily) *d2target.TextDimensions
func github.com/pancsta/d2/d2graph.GetTextDimensionsWithMono(mtexts []*d2target.MText, ruler *textmeasure.Ruler, t *d2target.MText, fontFamily *FontFamily, monoFontFamily *FontFamily) *d2target.TextDimensions
func github.com/pancsta/d2/d2graph.(*Graph).SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily) error
func github.com/pancsta/d2/d2graph.(*Graph).SetDimensions(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily) error
func github.com/pancsta/d2/d2graph.(*Object).GetDefaultSize(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, labelDims d2target.TextDimensions, withLabelPadding bool) (*d2target.TextDimensions, error)
func github.com/pancsta/d2/d2graph.(*Object).GetDefaultSize(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, labelDims d2target.TextDimensions, withLabelPadding bool) (*d2target.TextDimensions, error)
func github.com/pancsta/d2/d2graph.(*Object).GetLabelSize(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily) (*d2target.TextDimensions, error)
func github.com/pancsta/d2/d2graph.(*Object).GetLabelSize(mtexts []*d2target.MText, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily) (*d2target.TextDimensions, error)
func github.com/pancsta/d2/lib/textmeasure.LayoutMarkdown(mdText string, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, fontSize int) (*textmeasure.MarkdownLayout, error)
func github.com/pancsta/d2/lib/textmeasure.LayoutMarkdown(mdText string, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, fontSize int) (*textmeasure.MarkdownLayout, error)
func github.com/pancsta/d2/lib/textmeasure.MeasureMarkdown(mdText string, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, fontSize int) (width, height int, err error)
func github.com/pancsta/d2/lib/textmeasure.MeasureMarkdown(mdText string, ruler *textmeasure.Ruler, fontFamily *FontFamily, monoFontFamily *FontFamily, fontSize int) (width, height int, err error)
func github.com/pancsta/d2/lib/textmeasure.(*Ruler).HasFontFamilyLoaded(fontFamily *FontFamily) bool
const HandDrawn
const SourceCodePro
const SourceSansPro
func AddFontStyle(font Font, style FontStyle, ttf []byte) error
func FontFamily.Font(size int, style FontStyle) Font
const FONT_STYLE_BOLD
const FONT_STYLE_ITALIC
const FONT_STYLE_REGULAR
const FONT_STYLE_SEMIBOLD
SystemFallbackLimits bounds deterministic host-font discovery for the
lifetime of one resolver. FileBytes bounds one candidate; every other
work/byte limit is cumulative across indexing attempts and ResolveFallbacks
calls. A CLI export owns one resolver, so these are operation-wide ceilings
rather than per-board or per-style allowances.
MaxCoverageChecks int64
MaxDirectoryEntries int
MaxFaces int
MaxFileBytes int64
MaxFiles int
MaxRequestedRunes int
MaxResolvedBytes int64
MaxScannedBytes int64
func NewSystemFallbackResolver(limits SystemFallbackLimits) (*SystemFallbackResolver, error)
SystemFallbackResolver discovers fonts only under the operating system's
conventional system font roots. It does not follow symlinks or consult a
platform API, keeping discovery CGO-free and auditable. User-installed D2
primary fonts continue to flow through AddFontFamily and do not need this
resolver.
(*SystemFallbackResolver) ResolveFallbacks(ctx context.Context, request FallbackRequest) ([]FallbackFont, error)
*SystemFallbackResolver : FallbackResolver
func NewSystemFallbackResolver(limits SystemFallbackLimits) (*SystemFallbackResolver, error)
Package-Level Functions (total 4)
func AddFontFamily(name string, regularTTF, italicTTF, boldTTF, semiboldTTF []byte) (*FontFamily, error) func AddFontStyle(font Font, style FontStyle, ttf []byte) error func NewBundledFallbackResolver(next FallbackResolver, limits BundledFallbackLimits) (*BundledFallbackResolver, error) func NewSystemFallbackResolver(limits SystemFallbackLimits) (*SystemFallbackResolver, error)
Package-Level Variables (total 7)
var D2_FONT_TO_FAMILY map[string]FontFamily var FontEncodings syncmap.SyncMap[Font, string] var FontFamilies []FontFamily var FontFamiliesMu sync.Mutex var FontStyles []FontStyle
Package-Level Constants (total 14)
const FONT_SIZE_L = 20 const FONT_SIZE_M = 16 const FONT_SIZE_S = 14 const FONT_SIZE_XL = 24 const FONT_SIZE_XS = 13 const FONT_SIZE_XXL = 28 const FONT_SIZE_XXXL = 32 const FONT_STYLE_BOLD FontStyle = "bold" const FONT_STYLE_ITALIC FontStyle = "italic" const FONT_STYLE_REGULAR FontStyle = "regular" const FONT_STYLE_SEMIBOLD FontStyle = "semibold" const HandDrawn FontFamily = "HandDrawn" const SourceCodePro FontFamily = "SourceCodePro" const SourceSansPro FontFamily = "SourceSansPro"
![]() |
The pages are generated with Golds v0.8.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |