Added MarkdownRenderer.
This commit is contained in:
82
textRender.go
Normal file
82
textRender.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package termui
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// TextRender adds common methods for rendering a text on screeen.
|
||||
type TextRender interface {
|
||||
NormalizedText(text string) string
|
||||
RenderSequence(text string, lastColor, background Attribute) RenderedSubsequence
|
||||
}
|
||||
|
||||
type subSecequence struct {
|
||||
start int
|
||||
end int
|
||||
color Attribute
|
||||
}
|
||||
|
||||
// MarkdownRegex is used by MarkdownTextRenderer to determine how to format the
|
||||
// text.
|
||||
const MarkdownRegex = `(?:\[([[a-z]+)\])\(([a-z\s,]+)\)`
|
||||
|
||||
// unexported because a pattern can't be a constant and we don't want anyone
|
||||
// messing with the regex.
|
||||
var markdownPattern = regexp.MustCompile(MarkdownRegex)
|
||||
|
||||
// MarkdownTextRenderer is used for rendering the text with colors using
|
||||
// markdown-like syntax.
|
||||
// See: https://github.com/gizak/termui/issues/4#issuecomment-87270635
|
||||
type MarkdownTextRenderer struct{}
|
||||
|
||||
// NormalizedText returns the text the user will see (without colors).
|
||||
// It strips out all formatting option and only preserves plain text.
|
||||
func (r MarkdownTextRenderer) NormalizedText(text string) string {
|
||||
lText := strings.ToLower(text)
|
||||
indexes := markdownPattern.FindAllStringSubmatchIndex(lText, -1)
|
||||
|
||||
// Interate through indexes in reverse order.
|
||||
for i := len(indexes) - 1; i >= 0; i-- {
|
||||
theIndex := indexes[i]
|
||||
start, end := theIndex[0], theIndex[1]
|
||||
contentStart, contentEnd := theIndex[2], theIndex[3]
|
||||
|
||||
text = text[:start] + text[contentStart:contentEnd] + text[end:]
|
||||
}
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
// RenderedSubsequence is a string sequence that is capable of returning the
|
||||
// Buffer used by termui for displaying the colorful string.
|
||||
type RenderedSubsequence struct {
|
||||
RawText string
|
||||
NormalizedText string
|
||||
LastColor Attribute
|
||||
BackgroundColor Attribute
|
||||
|
||||
sequences subSecequence
|
||||
}
|
||||
|
||||
// Buffer returns the colorful formatted buffer and the last color that was
|
||||
// used.
|
||||
func (s *RenderedSubsequence) Buffer(x, y int) ([]Point, Attribute) {
|
||||
// var buffer []Point
|
||||
// dx := 0
|
||||
// for _, r := range []rune(s.NormalizedText) {
|
||||
// p := Point{
|
||||
// Ch: r,
|
||||
// X: x + dx,
|
||||
// Y: y,
|
||||
// Fg: Attribute(rand.Intn(8)),
|
||||
// Bg: background,
|
||||
// }
|
||||
//
|
||||
// buffer = append(buffer, p)
|
||||
// dx += charWidth(r)
|
||||
// }
|
||||
//
|
||||
// return buffer
|
||||
return nil, s.LastColor
|
||||
}
|
||||
Reference in New Issue
Block a user