various small changes

This commit is contained in:
probandula
2016-10-28 13:54:57 +02:00
parent 69ecfa2f6f
commit 71c8a58917
4 changed files with 38 additions and 36 deletions

23
char.go
View File

@@ -3,11 +3,10 @@ package figlet4go
import ( import (
"errors" "errors"
"github.com/fatih/color" "github.com/fatih/color"
"strings"
) )
// Represents a single ascii character // Represents a single ascii character
type AsciiChar struct { type asciiChar struct {
// Slice with the lines of the Char // Slice with the lines of the Char
Lines []string Lines []string
// Color of the char // Color of the char
@@ -15,30 +14,20 @@ type AsciiChar struct {
} }
// Creates a new ascii character // Creates a new ascii character
func NewAsciiChar(font *font, char rune) (*AsciiChar, error) { func NewAsciiChar(font *font, char rune) (*asciiChar, error) {
// If not ascii, throw an error // If not ascii, throw an error
if char < 0 || char > 127 { if char < 0 || char > 127 {
return nil, errors.New("Not Ascii") return nil, errors.New("Not Ascii")
} }
height := font.height // Get the font's representation of the char
beginRow := (int(char) - 32) * height lines := font.getCharSlice(char)
lines := make([]string, height) return &asciiChar{Lines: lines}, nil
// Get the char lines of the char
for i := 0; i < height; i++ {
row := font.fontSlice[beginRow+i]
row = strings.Replace(row, "@", "", -1)
row = strings.Replace(row, font.hardblank, " ", -1)
lines[i] = row
}
return &AsciiChar{Lines: lines}, nil
} }
// Return a line of the char as string with color if set // Return a line of the char as string with color if set
func (char *AsciiChar) GetLine(index int) string { func (char *asciiChar) GetLine(index int) string {
if char.Color != 0 { if char.Color != 0 {
colorFunc := color.New(char.Color).SprintFunc() colorFunc := color.New(char.Color).SprintFunc()
return colorFunc(char.Lines[index]) return colorFunc(char.Lines[index])

33
font.go
View File

@@ -1,9 +1,9 @@
// Explanation of the .flf file header // Explanation of the .flf file header
// THE HEADER LINE // THE HEADER LINE
// //
// The header line gives information about the FIGfont. Here is an example // The header line gives information about the FIGfont. Here is an example
// showing the names of all parameters: // showing the names of all parameters:
// //
// flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in // flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in
// | | | | | | | | | | the entire file must be "flf2a". // | | | | | | | | | | the entire file must be "flf2a".
// / / | | | | | | | \ // / / | | | | | | | \
@@ -12,24 +12,41 @@
// Height / | | \ Print_Direction // Height / | | \ Print_Direction
// Baseline / \ Comment_Lines // Baseline / \ Comment_Lines
// Max_Length Old_Layout* // Max_Length Old_Layout*
// //
// * The two layout parameters are closely related and fairly complex. // * The two layout parameters are closely related and fairly complex.
// (See "INTERPRETATION OF LAYOUT PARAMETERS".) // (See "INTERPRETATION OF LAYOUT PARAMETERS".)
// //
package figlet4go package figlet4go
import (
"strings"
)
// Represents a single font // Represents a single font
type font struct { type font struct {
// Hardblank symbol // Hardblank symbol
hardblank string hardblank string
// Height of one char // Height of one char
height int height int
// //
fontSlice []string fontSlice []string
} }
func (f *font) getCharSlice() []string { // Get a slice of strings containing the chars lines
// TODO here will be the logic of NewAsciiChar func (f *font) getCharSlice(char rune) []string {
return []string{}
} height := f.height
beginRow := (int(char) - 32) * height
lines := make([]string, height)
// Get the char lines of the char
for i := 0; i < height; i++ {
row := f.fontSlice[beginRow+i]
row = strings.Replace(row, "@", "", -1)
row = strings.Replace(row, f.hardblank, " ", -1)
lines[i] = row
}
return lines
}

View File

@@ -29,7 +29,7 @@ type fontManager struct {
fontList map[string]string fontList map[string]string
} }
// Create a new fontmanagerM // Create a new fontmanager
func newFontManager() *fontManager { func newFontManager() *fontManager {
fm := &fontManager{} fm := &fontManager{}
fm.fontLib = make(map[string]*font) fm.fontLib = make(map[string]*font)
@@ -52,11 +52,10 @@ func (fm *fontManager) getFont(fontName string) *font {
fontName = defaultFont fontName = defaultFont
} }
} }
return fm.fontLib[fontName] return fm.fontLib[fontName]
} }
// Loads all .flf files recursively in the fontPath path // Loads all .flf files recursively in the fontPath path
// Saves the found font files in a map with the name as the key // Saves the found font files in a map with the name as the key
// and the path as the value. Doesn't load them at this point // and the path as the value. Doesn't load them at this point
@@ -69,11 +68,11 @@ func (fm *fontManager) loadFontList(fontPath string) error {
return err return err
} }
// If the current item is a directory or has not the correct suffix // If the current item is a directory or has not the correct suffix
if info.IsDir() || !strings.HasSuffix(info.Name(), "." + extension) { if info.IsDir() || !strings.HasSuffix(info.Name(), "."+extension) {
return nil return nil
} }
// Extract the font name // Extract the font name
fontName := strings.TrimSuffix(info.Name(), "." + extension) fontName := strings.TrimSuffix(info.Name(), "."+extension)
// Save the font to the list // Save the font to the list
fm.fontList[fontName] = path fm.fontList[fontName] = path
@@ -132,8 +131,6 @@ func (fm *fontManager) loadBuildInFont() error {
return nil return nil
} }
// Parse a font from a content string // Parse a font from a content string
// Used to load fonts from disk and the builtin fonts // Used to load fonts from disk and the builtin fonts
func parseFontContent(cont string) (*font, error) { func parseFontContent(cont string) (*font, error) {
@@ -156,10 +153,9 @@ func parseFontContent(cont string) (*font, error) {
// Initialize the font // Initialize the font
font := &font{ font := &font{
hardblank: header[0][len(header[0])-1:], hardblank: header[0][len(header[0])-1:],
height: height, height: height,
fontSlice: lines[commentEndLine+1:], fontSlice: lines[commentEndLine+1:],
} }
return font, nil return font, nil
} }

View File

@@ -54,9 +54,9 @@ func (ar *AsciiRender) RenderOpts(str string, opt *RenderOptions) (string, error
// Load the font // Load the font
font := ar.fontMgr.getFont(opt.FontName) font := ar.fontMgr.getFont(opt.FontName)
// Slice holding the chars // Slice holding the chars
chars := []*AsciiChar{} chars := []*asciiChar{}
// Index of the current color // Index of the current color
curColorIndex := 0 curColorIndex := 0