github.com/aretext/aretext@v1.3.0/state/syntax.go (about) 1 package state 2 3 import ( 4 "github.com/aretext/aretext/syntax" 5 "github.com/aretext/aretext/syntax/parser" 6 ) 7 8 // SetSyntax sets the syntax language for the current document. 9 func SetSyntax(state *EditorState, language syntax.Language) { 10 setSyntaxAndRetokenize(state.documentBuffer, language) 11 } 12 13 // setSyntaxAndRetokenize changes the syntax language of the buffer and updates the tokens. 14 func setSyntaxAndRetokenize(buffer *BufferState, language syntax.Language) { 15 buffer.syntaxLanguage = language 16 buffer.syntaxParser = syntax.ParserForLanguage(language) 17 18 if buffer.syntaxParser == nil { 19 buffer.syntaxLanguage = syntax.LanguagePlaintext 20 return 21 } 22 23 buffer.syntaxParser.ParseAll(buffer.textTree) 24 } 25 26 // retokenizeAfterEdit updates syntax tokens after an edit to the text (insert or delete). 27 func retokenizeAfterEdit(buffer *BufferState, edit parser.Edit) { 28 if buffer.syntaxParser == nil { 29 return 30 } 31 32 buffer.syntaxParser.ReparseAfterEdit(buffer.textTree, edit) 33 }