Ability to use different separators depending on position in list
When editing nodes with cardinality (0,n) or (1,n) you have the ability to provide a custom separator between values by implementing a separator query function. This feature extends this capability by passing more arguments to the query function (namely prevNode and nextNode) so that it is now possible to provide custom separator for each pair of values.
Transform/substitute menus: merge named and default menus
A technical debt (refactoring) enhancement that removed custom concepts for named (SubstituteMenu_Named) and default (SubstituteMenu_Default) editor menus. Both concepts were merged into their parent (SubstituteMenu). The type of the menu is then selected in the menu editor. The same refactoring was applied to Transformation menus.
Type over existing text
Type over existing text is a new feature that makes projectional editor feel a bit more like a textual editor. When typing into a textual cell and the character you just
typed is already present at cursor position then the cursor will move right as if you just overwrote the existing character on screen. This feature is only triggered
if the keystroke cannot be gracefully processed and would otherwise be ignored (e.g. in constant cells) or make the cell content invalid.
The feature if ON by default and you can turn it OFF in Settings / Editor / General tab.
Multi-line comments in BaseLanguage
The functionality of SingleLineComment has been slightly enhanced and new MultiLineComment concept has been introduced into BaseLanguage to support comments delimited with the /* ... */ symbols like Java does.
Pattern language helps to define structure patterns and match nodes over them. It uses regular concept editors which make the pattern appear closely like the nodes it accepts. But for some complex editor that do not correspond exactly to concept structure it can be more comfortable to use light patterns (pattern builders) that describe required structure literally.
Error highlighting in Messages tool if editor definition throws an error
If code in editor aspect of a language throws an exception then default editor is shown for a corresponding cell in a model written on the language. Starting from 2020.1 an error is shown in Messages tool window if such broken cell is opened in the editor. It's possible to get stacktrace from the error and navigate to a problem cell.