func (t *tbfe) FormatLine(v *backend.View, line int) string { buf := bytes.NewBuffer(nil) vr := v.Buffer().Line(v.Buffer().TextPoint(line, 0)) log4go.Debug("FormatLine: %d, %s", line, vr) if vr.Size() == 0 { return "" } recipie := v.Transform(scheme, vr).Transcribe() highlight_line := false if b, ok := v.Settings().Get("highlight_line", highlight_line).(bool); ok { highlight_line = b } lastEnd := vr.Begin() for _, reg := range recipie { if lastEnd != reg.Region.Begin() { fmt.Fprintf(buf, "<span>%s</span>", v.Buffer().Substr(Region{lastEnd, reg.Region.Begin()})) } fmt.Fprintf(buf, "<span style=\"white-space:pre; color:#%s; background:#%s\">%s</span>", htmlcol(reg.Flavour.Foreground), htmlcol(reg.Flavour.Background), v.Buffer().Substr(reg.Region)) lastEnd = reg.Region.End() } if lastEnd != vr.End() { io.WriteString(buf, v.Buffer().Substr(Region{lastEnd, vr.End()})) } return buf.String() }
func (t *tbfe) renderView(wr io.Writer, v *backend.View, lay layout) { p := util.Prof.Enter("render") defer p.Exit() vr := lay.visible runes := v.Buffer().Substr(vr) recipie := v.Transform(scheme, vr).Transcribe() highlight_line := false if b, ok := v.Settings().Get("highlight_line", highlight_line).(bool); ok { highlight_line = b } lastEnd := 0 for _, reg := range recipie { if lastEnd != reg.Region.Begin() { io.WriteString(wr, runes[lastEnd:reg.Region.Begin()]) } fmt.Fprintf(wr, "<span style=\"color:#%s; background-color:#%s\">%s</span>", htmlcol(reg.Flavour.Foreground), htmlcol(reg.Flavour.Background), runes[reg.Region.Begin():reg.Region.End()]) lastEnd = reg.Region.End() } if lastEnd != vr.End() { io.WriteString(wr, v.Buffer().Substr(Region{lastEnd, vr.End()})) } }
func (t *tbfe) renderView(v *backend.View, lay layout) { p := util.Prof.Enter("render") defer p.Exit() sx, sy, w, h := lay.x, lay.y, lay.width, lay.height vr := lay.visible runes := v.Buffer().Substr(vr) x, y := sx, sy ex, ey := sx+w, sy+h caretStyle := t.settings.caretStyle if t.settings.caretBlink && blink { t.settings.caretStyle = 0 } recipie := v.Transform(scheme, vr).Transcribe() fg, bg := defaultFg, defaultBg sel := v.Sel() line, _ := v.Buffer().RowCol(vr.Begin()) eofline, _ := v.Buffer().RowCol(v.Buffer().Size()) lineNumberRenderSize := len(intToRunes(eofline)) for i, r := range runes { o := vr.Begin() + i curr := 0 fg, bg = defaultFg, defaultBg if t.settings.lineNumbers { renderLineNumber(&line, &x, y, lineNumberRenderSize, fg, bg) } for curr < len(recipie) && (o >= recipie[curr].Region.Begin()) { if o < recipie[curr].Region.End() { fg = palLut(textmate.Color(recipie[curr].Flavour.Foreground)) bg = palLut(textmate.Color(recipie[curr].Flavour.Background)) } curr++ } if sel.Contains(Region{o, o}) { fg = fg | t.settings.caretStyle } if r == '\t' { add := (x + 1 + (t.settings.tabSize - 1)) &^ (t.settings.tabSize - 1) for x < add { if x < ex { termbox.SetCell(x, y, ' ', fg, bg) } fg = fg &^ termbox.AttrUnderline // Just looks weird with a long underline x++ } continue } else if r == '\n' { x = sx y++ if y > ey { break } continue } if x < ex { termbox.SetCell(x, y, r, fg, bg) } x++ } if t.settings.lineNumbers { renderLineNumber(&line, &x, y, lineNumberRenderSize, fg, bg) } // restore original caretStyle before blink modification t.settings.caretStyle = caretStyle }
func (t *tbfe) renderView(v *backend.View, lay layout) { p := util.Prof.Enter("render") defer p.Exit() sx, sy, w, h := lay.x, lay.y, lay.width, lay.height vr := lay.visible runes := v.Buffer().Substr(vr) x, y := sx, sy ex, ey := sx+w, sy+h tab_size, ok := v.Settings().Get("tab_size", 4).(int) if !ok { tab_size = 4 } recipie := v.Transform(scheme, vr).Transcribe() highlight_line := false if b, ok := v.Settings().Get("highlight_line", highlight_line).(bool); ok { highlight_line = b } if first && len(recipie) > 4 { first = false for i, v := range recipie { log4go.Debug("%d: %+v", i, v) } log4go.Debug("vr: %+v", vr) } // TODO: much of this belongs in backend as it's not specific to any particular frontend curr := 0 fg, bg := defaultFg, defaultBg _ = render.DRAW_TEXT for i, r := range runes { o := vr.Begin() + i curr = 0 fg, bg = defaultFg, defaultBg for curr < len(recipie) && (o >= recipie[curr].Region.Begin()) { // if curr > 0 { // curr-- // } if o < recipie[curr].Region.End() { fg = palLut(textmate.Color(recipie[curr].Flavour.Foreground)) bg = palLut(textmate.Color(recipie[curr].Flavour.Background)) } curr++ } if r == '\t' { add := (x + 1 + (tab_size - 1)) &^ (tab_size - 1) for x < add { if x < ex { termbox.SetCell(x, y, ' ', fg, bg) } // fg = fg &^ termbox.AttrUnderline // Just looks weird with a long underline x++ } continue } else if r == '\n' { // for ; x < ex; x++ { // termbox.SetCell(x, y, ' ', fg, bg) // if !highlight_line { // break // } // } x = sx y++ if y > ey { break } continue } if x < ex { termbox.SetCell(x, y, r, fg, bg) } x++ } }
func (t *tbfe) renderView(v *backend.View, lay layout) { p := util.Prof.Enter("render") defer p.Exit() sx, sy, w, h := lay.x, lay.y, lay.width, lay.height vr := lay.visible runes := v.Buffer().Substr(vr) x, y := sx, sy ex, ey := sx+w, sy+h tab_size, ok := v.Settings().Get("tab_size", 4).(int) if !ok { tab_size = 4 } recipie := v.Transform(scheme, vr).Transcribe() curr := 0 fg, bg := defaultFg, defaultBg _ = render.DRAW_TEXT sel := v.Sel() caret_blink := true if b, ok := v.Settings().Get("caret_blink", true).(bool); ok { caret_blink = b } highlight_line := false if b, ok := v.Settings().Get("highlight_line", highlight_line).(bool); ok { highlight_line = b } caret_style := termbox.AttrUnderline if b, ok := v.Settings().Get("caret_style", "underline").(string); ok { if b == "block" { caret_style = termbox.AttrReverse } } if b, ok := v.Settings().Get("inverse_caret_state", false).(bool); !b && ok { if caret_style == termbox.AttrReverse { caret_style = termbox.AttrUnderline } else { caret_style = termbox.AttrReverse } } if caret_blink && blink { caret_style = 0 } for i, r := range runes { o := vr.Begin() + i curr = 0 fg, bg = defaultFg, defaultBg for curr < len(recipie) && (o >= recipie[curr].Region.Begin()) { // if curr > 0 { // curr-- // } if o < recipie[curr].Region.End() { fg = palLut(textmate.Color(recipie[curr].Flavour.Foreground)) bg = palLut(textmate.Color(recipie[curr].Flavour.Background)) } curr++ } if sel.Contains(Region{o, o}) { fg = fg | caret_style } if r == '\t' { add := (x + 1 + (tab_size - 1)) &^ (tab_size - 1) for x < add { if x < ex { termbox.SetCell(x, y, ' ', fg, bg) } fg = fg &^ termbox.AttrUnderline // Just looks weird with a long underline x++ } continue } else if r == '\n' { // for ; x < ex; x++ { // termbox.SetCell(x, y, ' ', fg, bg) // if !highlight_line { // break // } // } x = sx y++ if y > ey { break } continue } if x < ex { termbox.SetCell(x, y, r, fg, bg) } x++ } }