SYNOPSYS import "clive/txt" const Eins = Tedit(iota) ... func New(txt []rune) *Text func NewEditing(txt []rune) *Text type Edit struct { ... } type Edition interface { ... } type Interface interface { ... } type Mark struct { ... } type Tedit int type Text struct { ... } func New(txt []rune) *Text func NewEditing(txt []rune) *Text DESCRIPTION In-memory text with insertion, removal, selection, and marks CONSTANTS const ( Eins = Tedit(iota) // insert Edel // delete // Edit flag (part of the last edit, new edit) Esame = true Enew = false // size arg for get All = -1 ) TYPES type Edit struct { Op Tedit // Eins | Edel Off int // offset for the edit Data []rune // data inserted or deleted Contd bool // part of the previous edit regarding undo/redo } Edition operation func (e Edit) String() string Debug: return a printable edit string type Edition interface { Interface Undo() *Edit Redo() *Edit ContdEdit() } Undoable text type Interface interface { Len() int Ins(data []rune, off int) error Del(off, n int) []rune Get(off int, n int) <-chan []rune Getc(off int) rune Vers() int } The basic text interface as supplied by this package. type Mark struct { Name string Off int // contains filtered or unexported fields } A position kept in text despite insertions/removals func (m *Mark) String() string type Tedit int edit type func (te Tedit) String() string type Text struct { sync.Mutex // contains filtered or unexported fields } Text kept in a series of rune slices with insert, delete, marks, undo, and redo. func New(txt []rune) *Text Create a new text with no support for undo and redo func NewEditing(txt []rune) *Text Create a new text with support for undo and redo func (t *Text) ContdEdit() Flag that the next Ins or Del is to be considered part of the last edition regarding undo and redo. The edit added to the undo list will have Contd == true func (t *Text) Del(off, n int) []rune Delete n runes at off func (t *Text) DelAll() Delete all text (undoable) func (t *Text) DelMark(name string) Remove a mark from the text func (t *Text) DiscontdEdit() Flag that the next Ins or Del not to be considered part of the last edition regarding undo and redo. That is, undo the effect of a previous call to ContdEdit(). func (t *Text) DropEdits() Discard all the edits (drop undo/redo entries). func (t *Text) Get(off int, n int) <-chan []rune Get n runes starting at off. They will be sent as slices to the chan returned. Updating the runes returned will change the text without it knowing, beware. The text is locked while we are getting the runes func (t *Text) Getc(off int) rune Get a single rune at off (0 if off-limits) func (t *Text) Ins(data []rune, off int) error Insert text at off func (t *Text) Len() int Return the text length func (t *Text) LineAt(off int) int Return the line number at the given offset func (t *Text) LineOff(ln int) int Return the offset for the start of the given line number func (t *Text) LinesAt(p0, p1 int) (int, int) Return the line numbers for the given range func (t *Text) LinesOffs(ln0, ln1 int) (int, int) Return the offsets or the given line range func (t *Text) Mark(name string) *Mark Return a mark by name. The returned mark is a copy and changing it is ok. func (t *Text) MarkDel(mark string, n int) []rune Delete n runes right before the given mark and keep the mark where it is. func (t *Text) MarkIns(mark string, data []rune) error Insert runes at the given mark, moving the mark after them. func (t *Text) Marks() []string Return the names of existing marks func (t *Text) Redo() *Edit Return the next edit in the redo list, nil if none. Contd is set to true in the returned edit if the edit continues. (and apply the edit to the text). func (t *Text) SetMark(name string, off int) *Mark Place a mark in the text, keeping its position despite further inserts and removes. The returned mark is the actual mark as used by the text. Changing it changes the mark and may lead to races if other processes are modifying the text. func (t *Text) Sprint() string Debug: print the tag followed by the state of text func (t *Text) SprintMarks() string Debug: print the tag followed by the state of text including marks func (t *Text) String() string Return the text as a string func (t *Text) Undo() *Edit Return the next edit in the undo list, nil if none. Contd is set to true in the returned edit if the edit continues. (and apply the edit to the text) func (t *Text) Vers() int FUNCTIONS
Clive, 2nd ed. User's manual. Section 2