## Updates A number of methods for **updating** text are provided (mirroring the protocol for {{gtClass:BlText}}: - {{gtMethod:LeTextSnippet>>#updateText:source:|label=#selector}} - {{gtMethod:LeTextualSnippet>>#updateString:|label=#selector}} - {{gtMethod:LeTextSnippet>>#appendText:source:|label=#selector}} - {{gtMethod:name=LeTextSnippet>>#insertText:at:|label=#selector}} {{gtExample:LeDatabaseSnippetUpdaterExamples>>#updateSnippetOneToTwo_Simplified_Text}} {{gtExample:LeDatabaseSnippetUpdaterExamples>>#updateSnippetOneToTwo_Simplified_String}} Text editors are responsible for using a copy of {{gtMethod:LeTextSnippet>>#text|label=#selector}} since sharing {{gtClass:BlTextAttribute|label=text attributes}} may produces undesired (and undefinied) behavior. {{gtClass:BlText}} is not thread safe, it therefore cannot be edited simultaneously in several editors. The text is stored as a {{gtClass:BlText}} (rather than a {{gtClass:String}}) since converting text to strings is expensive, and this would be done on every keystroke while editing in the UI.
## Navigation A number of methods for navigating between blocks are provided, including: - {{gtMethod:name=LeSnippet>>#previousSibling}} - {{gtMethod:name=LeSnippet>>#nextSibling}} - {{gtMethod:name=LeSnippet>>#previousBlockDo:ifNone:}} - {{gtMethod:name=LeSnippet>>#nextBlockDo:ifNone:}} next and previousBlockDo... are based on the user expectations of editing paragraphs in a text editor, i.e. the previous block is the deepest last child of the block's previous subling.