Documentation
¶
Overview ¶
Package markdown provides markdown parsing and terminal rendering capabilities.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var DarkStyleConfig = ansi.StyleConfig{ Document: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ BlockPrefix: "\n", BlockSuffix: "\n", Color: strPtr("252"), }, Margin: uintPtr(defaultMargin), }, BlockQuote: ansi.StyleBlock{ Indent: uintPtr(1), IndentToken: strPtr("│ "), }, List: ansi.StyleList{ LevelIndent: defaultListIndent, }, Heading: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ BlockSuffix: "\n", Color: strPtr("39"), Bold: boolPtr(true), }, }, H1: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: " ", Suffix: " ", Color: strPtr("255"), BackgroundColor: strPtr("63"), Bold: boolPtr(true), }, }, H2: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "## ", }, }, H3: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "### ", }, }, H4: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "#### ", }, }, H5: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "##### ", }, }, H6: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "###### ", Color: strPtr("35"), Bold: boolPtr(false), }, }, Strikethrough: ansi.StylePrimitive{ CrossedOut: boolPtr(true), }, Emph: ansi.StylePrimitive{ Italic: boolPtr(true), }, Strong: ansi.StylePrimitive{ Bold: boolPtr(true), }, HorizontalRule: ansi.StylePrimitive{ Color: strPtr("240"), Format: "\n--------\n", }, Item: ansi.StylePrimitive{ BlockPrefix: "• ", }, Enumeration: ansi.StylePrimitive{ BlockPrefix: ". ", }, Task: ansi.StyleTask{ Ticked: "[✓] ", Unticked: "[ ] ", }, Link: ansi.StylePrimitive{ Color: strPtr("30"), Underline: boolPtr(true), }, LinkText: ansi.StylePrimitive{ Color: strPtr("35"), Bold: boolPtr(true), }, Image: ansi.StylePrimitive{ Color: strPtr("212"), Underline: boolPtr(true), }, ImageText: ansi.StylePrimitive{ Color: strPtr("243"), Format: "Image: {{.text}} →", }, Code: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: " ", Suffix: " ", Color: strPtr("203"), BackgroundColor: strPtr("236"), }, }, CodeBlock: ansi.StyleCodeBlock{ StyleBlock: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Color: strPtr("244"), }, Margin: uintPtr(defaultMargin), }, Chroma: &ansi.Chroma{ Text: ansi.StylePrimitive{Color: strPtr("#C4C4C4")}, Error: ansi.StylePrimitive{Color: strPtr("#F1F1F1"), BackgroundColor: strPtr("#F05B5B")}, Comment: ansi.StylePrimitive{Color: strPtr("#676767")}, CommentPreproc: ansi.StylePrimitive{Color: strPtr("#FF875F")}, Keyword: ansi.StylePrimitive{Color: strPtr("#00AAFF")}, KeywordReserved: ansi.StylePrimitive{Color: strPtr("#FF5FD2")}, KeywordNamespace: ansi.StylePrimitive{Color: strPtr("#FF5F87")}, KeywordType: ansi.StylePrimitive{Color: strPtr("#6E6ED8")}, Operator: ansi.StylePrimitive{Color: strPtr("#EF8080")}, Punctuation: ansi.StylePrimitive{Color: strPtr("#E8E8A8")}, Name: ansi.StylePrimitive{Color: strPtr("#C4C4C4")}, NameBuiltin: ansi.StylePrimitive{Color: strPtr("#FF8EC7")}, NameTag: ansi.StylePrimitive{Color: strPtr("#B083EA")}, NameAttribute: ansi.StylePrimitive{Color: strPtr("#7A7AE6")}, NameClass: ansi.StylePrimitive{Color: strPtr("#F1F1F1"), Underline: boolPtr(true), Bold: boolPtr(true)}, NameDecorator: ansi.StylePrimitive{Color: strPtr("#FFFF87")}, NameFunction: ansi.StylePrimitive{Color: strPtr("#00D787")}, LiteralNumber: ansi.StylePrimitive{Color: strPtr("#6EEFC0")}, LiteralString: ansi.StylePrimitive{Color: strPtr("#C69669")}, LiteralStringEscape: ansi.StylePrimitive{Color: strPtr("#AFFFD7")}, GenericDeleted: ansi.StylePrimitive{Color: strPtr("#FD5B5B")}, GenericEmph: ansi.StylePrimitive{Italic: boolPtr(true)}, GenericInserted: ansi.StylePrimitive{Color: strPtr("#00D787")}, GenericStrong: ansi.StylePrimitive{Bold: boolPtr(true)}, GenericSubheading: ansi.StylePrimitive{Color: strPtr("#777777")}, Background: ansi.StylePrimitive{BackgroundColor: strPtr("#373737")}, }, }, Table: ansi.StyleTable{}, DefinitionDescription: ansi.StylePrimitive{ BlockPrefix: "\n🠶 ", }, }
DarkStyleConfig is our default style for dark terminal backgrounds.
var LightStyleConfig = ansi.StyleConfig{ Document: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ BlockPrefix: "\n", BlockSuffix: "\n", Color: strPtr("234"), }, Margin: uintPtr(defaultMargin), }, BlockQuote: ansi.StyleBlock{ Indent: uintPtr(1), IndentToken: strPtr("│ "), }, List: ansi.StyleList{ LevelIndent: defaultListIndent, }, Heading: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ BlockSuffix: "\n", Color: strPtr("27"), Bold: boolPtr(true), }, }, H1: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: " ", Suffix: " ", Color: strPtr("255"), BackgroundColor: strPtr("63"), Bold: boolPtr(true), }, }, H2: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "## ", }, }, H3: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "### ", }, }, H4: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "#### ", }, }, H5: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "##### ", }, }, H6: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: "###### ", Bold: boolPtr(false), }, }, Strikethrough: ansi.StylePrimitive{ CrossedOut: boolPtr(true), }, Emph: ansi.StylePrimitive{ Italic: boolPtr(true), }, Strong: ansi.StylePrimitive{ Bold: boolPtr(true), }, HorizontalRule: ansi.StylePrimitive{ Color: strPtr("249"), Format: "\n--------\n", }, Item: ansi.StylePrimitive{ BlockPrefix: "• ", }, Enumeration: ansi.StylePrimitive{ BlockPrefix: ". ", }, Task: ansi.StyleTask{ Ticked: "[✓] ", Unticked: "[ ] ", }, Link: ansi.StylePrimitive{ Color: strPtr("36"), Underline: boolPtr(true), }, LinkText: ansi.StylePrimitive{ Color: strPtr("29"), Bold: boolPtr(true), }, Image: ansi.StylePrimitive{ Color: strPtr("205"), Underline: boolPtr(true), }, ImageText: ansi.StylePrimitive{ Color: strPtr("243"), Format: "Image: {{.text}} →", }, Code: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Prefix: " ", Suffix: " ", Color: strPtr("203"), BackgroundColor: strPtr("254"), }, }, CodeBlock: ansi.StyleCodeBlock{ StyleBlock: ansi.StyleBlock{ StylePrimitive: ansi.StylePrimitive{ Color: strPtr("242"), }, Margin: uintPtr(defaultMargin), }, Chroma: &ansi.Chroma{ Text: ansi.StylePrimitive{Color: strPtr("#2A2A2A")}, Error: ansi.StylePrimitive{Color: strPtr("#F1F1F1"), BackgroundColor: strPtr("#FF5555")}, Comment: ansi.StylePrimitive{Color: strPtr("#8D8D8D")}, CommentPreproc: ansi.StylePrimitive{Color: strPtr("#FF875F")}, Keyword: ansi.StylePrimitive{Color: strPtr("#279EFC")}, KeywordReserved: ansi.StylePrimitive{Color: strPtr("#FF5FD2")}, KeywordNamespace: ansi.StylePrimitive{Color: strPtr("#FB406F")}, KeywordType: ansi.StylePrimitive{Color: strPtr("#7049C2")}, Operator: ansi.StylePrimitive{Color: strPtr("#FF2626")}, Punctuation: ansi.StylePrimitive{Color: strPtr("#FA7878")}, NameBuiltin: ansi.StylePrimitive{Color: strPtr("#0A1BB1")}, NameTag: ansi.StylePrimitive{Color: strPtr("#581290")}, NameAttribute: ansi.StylePrimitive{Color: strPtr("#8362CB")}, NameClass: ansi.StylePrimitive{Color: strPtr("#212121"), Underline: boolPtr(true), Bold: boolPtr(true)}, NameConstant: ansi.StylePrimitive{Color: strPtr("#581290")}, NameDecorator: ansi.StylePrimitive{Color: strPtr("#A3A322")}, NameFunction: ansi.StylePrimitive{Color: strPtr("#019F57")}, LiteralNumber: ansi.StylePrimitive{Color: strPtr("#22CCAE")}, LiteralString: ansi.StylePrimitive{Color: strPtr("#7E5B38")}, LiteralStringEscape: ansi.StylePrimitive{Color: strPtr("#00AEAE")}, GenericDeleted: ansi.StylePrimitive{Color: strPtr("#FD5B5B")}, GenericEmph: ansi.StylePrimitive{Italic: boolPtr(true)}, GenericInserted: ansi.StylePrimitive{Color: strPtr("#00D787")}, GenericStrong: ansi.StylePrimitive{Bold: boolPtr(true)}, GenericSubheading: ansi.StylePrimitive{Color: strPtr("#777777")}, Background: ansi.StylePrimitive{BackgroundColor: strPtr("#F5F5F5")}, }, }, Table: ansi.StyleTable{}, DefinitionDescription: ansi.StylePrimitive{ BlockPrefix: "\n🠶 ", }, }
LightStyleConfig is our default style for light terminal backgrounds.
Functions ¶
This section is empty.
Types ¶
type Document ¶
Document holds a parsed markdown document, including the goldmark AST root and the original source bytes. Callers can walk Node to extract headings, links, code blocks, and other elements.
func Parse ¶
func Parse(src []byte, opts ...ParseOption) (*Document, error)
Parse parses src as markdown and returns a Document containing the goldmark AST root and the original source bytes. The source is required for extracting text from AST nodes via Node.Text(source).
func (*Document) References ¶
References returns all hyperlinks found in the document, in document order. currentURL is the URL of the page being viewed; links that resolve to the same page (with or without a fragment) are excluded so that on-page anchors do not clutter the reference palette.
type ParseOption ¶
type ParseOption func(*parseConfig)
ParseOption configures Parse behavior.
func WithRelativeURLs ¶
func WithRelativeURLs(origin string) ParseOption
WithRelativeURLs strips the given origin (e.g. "https://docs.stripe.com") from absolute URLs in the document source before parsing, converting them to root-relative paths. It may be passed multiple times to strip multiple origins.
type Reference ¶
type Reference struct {
Title string
URL *url.URL
External bool // true when the URL points outside docs.stripe.com
}
Reference is a hyperlink extracted from a markdown document.
type Renderer ¶
Renderer renders a Document to a terminal-friendly string.
func NewRenderer ¶
func NewRenderer(opts ...RendererOption) (Renderer, error)
NewRenderer constructs a Renderer backed by glamour with sensible defaults (auto-detected dark/light using our own style configs, 140-column word wrap). Options override individual defaults.
type RendererOption ¶
type RendererOption func(*rendererConfig)
RendererOption configures a Renderer created by NewRenderer.
func WithStyle ¶
func WithStyle(style string) RendererOption
WithStyle sets a built-in glamour style by name (e.g. "dark", "light", "dracula", "notty"). The default auto-detects dark/light from the terminal and applies our own style configs.
func WithStyleConfig ¶
func WithStyleConfig(cfg ansi.StyleConfig) RendererOption
WithStyleConfig sets a fully custom ansi.StyleConfig, overriding both the named style and the auto-detected default. Use DarkStyleConfig or LightStyleConfig as a starting point.
func WithWordWrap ¶
func WithWordWrap(width int) RendererOption
WithWordWrap sets the column width at which output is wrapped.