feat: adds custom link formatting #473
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
CONTRIBUTING.md.Custom Link Formatting Architecture for Glamour
Overview
Adds custom link formatting capabilities to the Glamour markdown rendering library. An alternative to #204 and implements #361. The design enables users to provide custom formatting functions for links while maintaining complete backward compatibility.
Design
Existing Link Rendering
ansi/link.go-LinkElement.Render()text url(text followed by space and URL)ansi/elements.gocreatesLinkElementinstancesansi/renderer.goprocesses AST nodesExtension Points Identified
LinkElement.Render()method - main customization pointOptionsstruct - can hold formatter configurationTermRendererOptionpattern - for user configurationNewElement()- where formatter gets appliedArchitecture Design
Core Data Structures
LinkData
LinkFormatter Interface
Configuration System
Extended Options
TermRendererOptions
Adds New Built-in Formatters
Default Formatter
Text-Only Formatter
URL-Only Formatter
Hyperlink Formatter (OSC 8)
3. Modern Terminal Support
OSC 8 Hyperlink Implementation
Terminal Detection
Usage Examples
Basic Usage (No Changes Required)
Built-in Formatters
Custom Formatters
Backward Compatibility
LinkFormatteris nil)TermRendererOptionfunctions work unchanged