Add semantic markup

master
joce 3 years ago
parent 16b9c689f4
commit dbd989c894
  1. 4
      cmd/mop/main.go
  2. 12
      layout.go
  3. 8
      markup.go
  4. 4
      screen.go

@ -138,10 +138,10 @@ func main() {
profileName := flag.String("profile", path.Join(usr.HomeDir, defaultProfile), "path to profile")
flag.Parse()
screen := mop.NewScreen()
profile := mop.NewProfile(*profileName)
screen := mop.NewScreen(profile)
defer screen.Close()
profile := mop.NewProfile(*profileName)
mainLoop(screen, profile)
profile.Save()
}

@ -209,9 +209,9 @@ func (layout *Layout) pad(str string, width int) string {
//-----------------------------------------------------------------------------
func buildMarketTemplate() *template.Template {
markup := `<yellow>Dow</> {{.Dow.change}} ({{.Dow.percent}}) at {{.Dow.latest}} <yellow>S&P 500</> {{.Sp500.change}} ({{.Sp500.percent}}) at {{.Sp500.latest}} <yellow>NASDAQ</> {{.Nasdaq.change}} ({{.Nasdaq.percent}}) at {{.Nasdaq.latest}}
<yellow>Tokyo</> {{.Tokyo.change}} ({{.Tokyo.percent}}) at {{.Tokyo.latest}} <yellow>HK</> {{.HongKong.change}} ({{.HongKong.percent}}) at {{.HongKong.latest}} <yellow>London</> {{.London.change}} ({{.London.percent}}) at {{.London.latest}} <yellow>Frankfurt</> {{.Frankfurt.change}} ({{.Frankfurt.percent}}) at {{.Frankfurt.latest}} {{if .IsClosed}}<right>U.S. markets closed</right>{{end}}
<yellow>10-Year Yield</> {{.Yield.latest}} ({{.Yield.change}}) <yellow>Euro</> ${{.Euro.latest}} ({{.Euro.change}}) <yellow>Yen</> ¥{{.Yen.latest}} ({{.Yen.change}}) <yellow>Oil</> ${{.Oil.latest}} ({{.Oil.change}}) <yellow>Gold</> ${{.Gold.latest}} ({{.Gold.change}})`
markup := `<tag>Dow</> {{.Dow.change}} ({{.Dow.percent}}) at {{.Dow.latest}} <tag>S&P 500</> {{.Sp500.change}} ({{.Sp500.percent}}) at {{.Sp500.latest}} <tag>NASDAQ</> {{.Nasdaq.change}} ({{.Nasdaq.percent}}) at {{.Nasdaq.latest}}
<tag>Tokyo</> {{.Tokyo.change}} ({{.Tokyo.percent}}) at {{.Tokyo.latest}} <tag>HK</> {{.HongKong.change}} ({{.HongKong.percent}}) at {{.HongKong.latest}} <tag>London</> {{.London.change}} ({{.London.percent}}) at {{.London.latest}} <tag>Frankfurt</> {{.Frankfurt.change}} ({{.Frankfurt.percent}}) at {{.Frankfurt.latest}} {{if .IsClosed}}<right>U.S. markets closed</right>{{end}}
<tag>10-Year Yield</> {{.Yield.latest}} ({{.Yield.change}}) <tag>Euro</> ${{.Euro.latest}} ({{.Euro.change}}) <tag>Yen</> ¥{{.Yen.latest}} ({{.Yen.change}}) <tag>Oil</> ${{.Oil.latest}} ({{.Oil.change}}) <tag>Gold</> ${{.Gold.latest}} ({{.Gold.change}})`
return template.Must(template.New(`market`).Parse(markup))
}
@ -223,7 +223,7 @@ func buildQuotesTemplate() *template.Template {
{{.Header}}
{{range.Stocks}}{{if eq .Direction 1}}<green>{{else if eq .Direction -1}}<red>{{end}}{{.Ticker}}{{.LastTrade}}{{.Change}}{{.ChangePct}}{{.Open}}{{.Low}}{{.High}}{{.Low52}}{{.High52}}{{.Volume}}{{.AvgVolume}}{{.PeRatio}}{{.Dividend}}{{.Yield}}{{.MarketCap}}{{.PreOpen}}{{.AfterHours}}</>
{{range.Stocks}}{{if eq .Direction 1}}<gain>{{else if eq .Direction -1}}<loss>{{end}}{{.Ticker}}{{.LastTrade}}{{.Change}}{{.ChangePct}}{{.Open}}{{.Low}}{{.High}}{{.Low52}}{{.High52}}{{.Volume}}{{.AvgVolume}}{{.PeRatio}}{{.Dividend}}{{.Yield}}{{.MarketCap}}{{.PreOpen}}{{.AfterHours}}</>
{{end}}`
return template.Must(template.New(`quotes`).Parse(markup))
@ -239,9 +239,9 @@ func highlight(collections ...map[string]string) {
adv, err := strconv.ParseFloat(change, 64)
if err == nil {
if adv < 0.0 {
collection[`change`] = `<red>` + collection[`change`] + `</>`
collection[`change`] = `<loss>` + collection[`change`] + `</>`
} else if adv > 0.0 {
collection[`change`] = `<green>` + collection[`change`] + `</>`
collection[`change`] = `<gain>` + collection[`change`] + `</>`
}
}
}

@ -33,7 +33,7 @@ type Markup struct {
// Creates markup to define tag to Termbox translation rules and store default
// colors and column alignments.
func NewMarkup() *Markup {
func NewMarkup(profile *Profile) *Markup {
markup := &Markup{}
markup.Foreground = termbox.ColorDefault
markup.Background = termbox.ColorDefault
@ -53,6 +53,12 @@ func NewMarkup() *Markup {
markup.tags[`b`] = termbox.AttrBold // Attribute = 1 << (iota + 4)
markup.tags[`u`] = termbox.AttrUnderline
markup.tags[`r`] = termbox.AttrReverse
// Semantic markups
markup.tags[`gain`] = markup.tags[profile.TickerColors.Gain]
markup.tags[`loss`] = markup.tags[profile.TickerColors.Loss]
markup.tags[`tag`] = markup.tags[profile.TickerColors.Tag]
markup.regex = markup.supportedTags() // Once we have the hash we could build the regex.
return markup

@ -26,13 +26,13 @@ type Screen struct {
// Initializes Termbox, creates screen along with layout and markup, and
// calculates current screen dimensions. Once initialized the screen is
// ready for display.
func NewScreen() *Screen {
func NewScreen(profile *Profile) *Screen {
if err := termbox.Init(); err != nil {
panic(err)
}
screen := &Screen{}
screen.layout = NewLayout()
screen.markup = NewMarkup()
screen.markup = NewMarkup(profile)
return screen.Resize()
}

Loading…
Cancel
Save