C++Builder Enterprise 12 Athens

Released: Nov 8, 2023

Updates in 12 Athens

Features

Installer Enhancements

  • New Feature Manager - Improved the UI and the behavior of installing platforms and other items by simplifying installation choices. Use the Feature Manager Dialog, formerly Platform Manager, to select your installations.
    • All installation features and options are on a single screen, with the languages (Delphi or C++) and target platforms (Windows, iOS, etc.) options as the central part of the screen.
    • The additional items are shown in a list on the right sidebar.
    • The bottom bar of the installer shows some helpful information, including the difference in disk space as n GB is more or less used.
    • A new Errors button becomes available at any place that shows errors. Use the button to preview the log and open the location of the installation log file in Explorer.
  • Updates to Libraries
    • Updated the integrated version of DUnitX to the most recent library version.
    • Updated the version of Indy that ships with Embarcadero RAD Studio to the latest version in the official Indy GitHub repository.
  • GetIt Quality Improvements - Added the ability to simultaneously load multiple GetIt packages from a single folder on your hard drive.
    • The GetItCmd command line tool is now logging into GetItInstall.log.
    • Improved the error message and workarounds for compiling projects with GetIt package dependencies.
    • Install the GetIt packages from the Welcome Page when the installation is done "offline" (with the ISO image).

New IDE Enhancements

  • Moving Deprecated Features - Some old and unsupported tools have been moved out of the core product installation, making them available as add-ons:
    • VCL Translation Support.
  • Searching - The Find in Files dialog now has a new Subdirectory exclude mask option, which excludes specific folders from being searched when using the Search in directories and Include subdirectories functionalities. There are default exclusions for both Delphi and C++, and the dialog has been widened to fit the new content.
  • GDI Resource Usage - GDI bitmap counts are now lower through the IDE. Images can now be Dormant if not used for over a minute. All IDE image lists, including those for toolbars and menus, component images for the Palette, etc., will make their images dormant when not used.
  • CodeInsight
    • Added a new version of the code completion's Auto invoke feature. This means that code completion shows when:
      • Pressing Ctrl+Space or typing "." (Only on dot), as in 11.3.
      • Typing anything and waiting for a moment.
      • Typing inside an identifier (it used to invoke only at the beginning).
    • Code completion now adds array braces [ ] for array types, including placing the caret inside. The code completion window can show the keys that affect completion, such as Enter, Space, Esc, etc.
    • Added menu items in the Search main menu to 'Go to Definition' and 'Go to Implementation' features.
    • Code Keywords - Language keywords are now included in the completion list. Keywords are auto-selected ahead of identifiers. This means that even when code completion automatically invokes whatever you type, it completes correctly as long as it is valid.
  • Visual Assist for C++
    • Integrated Visual Assist, a C++ productivity tool previously only available for Microsoft Visual Studio. Visual Assist is a large product, and this release includes the most core and useful features for productivity in the areas of code completion, plus a subset of search/finding, navigation, and refactoring. Features Visual Assist brings to C++Builder and C++ within RAD Studio include:
      • Code Insight:
        • Code completion, parameter completion, and tooltip insight.
      • Refactorings:
        • Rename: to rename symbols (methods, classes, etc.) across your project group.
        • Add Include: right-click on a symbol, like 'vector' or 'TButton', and VA can add the correct header file in an include statement at the top of the unit.
        • Create Declaration and Create Implementation: which assists in creating methods: type a method in a type declaration and have VA automatically create an empty implementation, or type an implementation and have VA add the declaration to the type.
      • Navigations:
        • Find Symbol: Find any symbol in both your project or project group and the headers - any symbol VA knows about from parsing.
        • Find References: Find where a symbol (method, class, etc.) is used throughout your project group, plus a mini version that finds references within the current unit.
        • Go To Definition and Go To Implementation: Which helps you toggle between the declaration and implementation of a method, is similar to Delphi's feature (implementing this for C++ has been one of the most requested code editor features).
        • Go To Related: A useful feature that lets you navigate to anything useful related to a symbol (method, type, include, etc.), including a type's constructor, the ancestor and descendant types, the ancestor and descendant overrides of virtual methods, and more.
      • Visual Assist's features are a very powerful set of productivity tools, and we're very pleased to have this initial integration.
  • New WinAPI App Wizard for C++ - This release introduces a new WinAPI application wizard for C++ Builder.
  • General IDE Enhancements
    • New Designers - Moved some of the designers of the KSVC library into the core product. These include the following:
      • StringList Editor - Toolbar allowing loading and saving to text files and standard clipboard operations, plus a status bar with position information.
      • Multiline String Editor - This feature is enabled for the Hint property of all controls and the Caption property of some of them.
      • Quick Button Configuration - Adds a Quick configuration for TButton.
      • Quick RadioGroup Configuration - Introducing a new special editor for the Radio Group control.
      • Quick Panel Configuration - New configuration dialog for the TPanel control.
    • Syntax Highlighting throughout the IDE - Added syntax highlighting using the IDE color palette to:
      • Highlight debugger tooltips.
      • Error Insight messages in the Structure pane.
      • The Structure view highlights methods and types.
      • The Navigation toolbar highlights methods and types.
      • The Call Stack for methods and addresses or modules.
    • Navigation Toolbar - The Navigation toolbar at the top of the editor has several enhancements:
      • The dropdowns now have visual clues about their function when no text is typed in yet.
      • When searching for a type or method, initially, all results will now be shown.
      • The search results are syntax highlighted, and the current search match is indicated.
      • The navigation toolbar now also follows the editor theme colors, not the IDE theme.
    • General IDE Improvements
      • The Options > IDE > Saving and Recovering page has a new checkbox to save the editor state.
      • Editor tabs now have a Copy File Path > menu item, with subitems for the full path, the filename only, and the folder only.
      • The editor now lets you set the line height as a multiple of the font size (e.g., 1.1).
      • The Editor options are now a top-level entry in the IDE Options dialog instead of nested under User Interface.
      • Gutter icons, such as breakpoints, are now scaled with the editor scale based on font size. The ToolsAPI INTACodeEditorState290 has new CharWidth and CharHeight properties and a Refresh method.
      • The Call Stack and the debug Event Log now allow users to copy to the clipboard, and select all, from the context menu.
      • There are new styles used in the VCL designer when 'Mimic Windows' is turned on, and the IDE is running on Microsoft Windows 11, for both light and dark mode.
  • IDE Quality Enhancements
    • Editor inline search.
    • High DPI form design, including the form resizing and placement of non-visual components, as well as pulling the form designer between multiple windows.

Debugger Improvements

  • Previous versions had extended timeouts before showing a potential issue. This release has reduced these timeouts significantly to an initial timeout of 6 seconds.
  • When the debug kernel is not responding, a dialog screen appears, allowing users to Wait or Terminate the process. This improvement applies to Win64, Apple macOS, Linux, Apple iOS, and Android.
  • Debugging on the iOS Simulator for iOS 17 is functional, but debugging on-device with iOS 17 is not supported. This is due to an iOS change affecting multiple non-Apple vendors.
  • Apple Xcode 15 is supported for running apps.
  • Updated the macOS LLDB.
  • Updated the Linux LLDB to match.
  • PAServer messages, including hints, will now be shown in the IDE Messages pane.
  • The OS thread handle is now shown in the Threads view.
  • Displaying FPU registers on Intel Mac has been improved.
  • The debugger tooltip in the editor now scales following the font size and has syntax highlighting.
  • FPU and XMM registers now display correctly for Windows 64-bit with LLDB, macOS, and Linux.
  • The ST and XMM registers are now read correctly for both Win64 C++ platforms.
  • Modifying FPU and ST.XMM now registers on Linux and macOS.

Skia Integration

  • This release adds Skia support for all the platforms that FireMonkey supports. Skia library offers full support for all platforms supported by RAD Studio Athens, both in C++Builder and Delphi, including even the recent additions iOS Simulator ARM and macOS ARM 64-bit. RAD Studio is interfacing with Skia by leveraging the Skia4Delphi open-source project but includes additional capabilities not found in the open-source projects, like the Vulkan driver.
  • Skia-based UI Controls - The Skia library integration offers some new specific native controls and components. These controls are available only if Skia is enabled and deployed to the target platform.
    • TSkAnimatedImage: The control that loads and renders animated images, including vector animations.
    • TSkLabel: Implements new features that were either not supported by TLabel or were difficult to implement, such as:
      • Font families (font fallback list like in CSS).
      • Font weight and slant.
      • Support for multiple styles in text.
      • Support for BiDi (Right-to-Left).
      • Support justify horizontal alignment.
      • Supports background color on parts of the text.
      • Auto size option.
      • Advanced decorations (underline wavy, overline, dashed line, and more).
    • TSkPaintBox: Control for painting with Skia APIs directly on the screen with the OnDraw event.
    • TSaAnimatedPaintBox: Allows setting the duration of an animation and drawing the progress of this animation using Skia APIs through the OnAnimationDraw event.
    • TSkSVG: Control to display SVG.
  • FireMonkey Skia Rendering - With Skia support, replacing the default Canvas from FMX with Skia-based Canvas is now possible. Once Skia is enabled, all FMX controls will be painted using Skia-based implementation automatically. Improving the performance and the quality of the drawings for the FMX (mainly on mobile) and the whole library.
  • Vulkan Backend - The Skia with RAD Studio offers Vulkan backend support for Android and, optionally, for Windows. Skia Canvas with RAD Studio automatically utilizes Vulkan on Android if supported, resulting in enhanced graphical performance and energy efficiency compared to OpenGLES.
  • Skia Shading Language (SKSL) - When using the Skia app rendering with GPU acceleration instead of rasterization, Firemonkey leverages the SKSL to render effects and filters. This approach provides improved performance compared to the current method and enhances Skia Canvas's efficiency.
  • Animated Codec: WebP Encoder - The Skia version integrated with RAD Studio supports the encoding of animated WebP. With Firemonkey's new animated codec foundation, it is possible to register new encoders capable of encoding and/or decoding.
  • Printer Support and Printing to PDF - When Skia is enabled, Firemonkey's native Printer for Windows will use Skia as its backend for the physical printer and ensure support for all other platforms through PDF document printing, with the optional XPS printing also available when the target is Windows. On iOS and Android, the printer will generate a printable file, which will be automatically shared upon completion.
  • Skia C++ Builder Support - This release adds Skia4Delphi support for C++ Builder, including the project's main demo written in C++ to assist users in its implementation.

C++ Builder

  • Removed iOS and Android - Removed the iOS 64-bit and Android 32-bit platforms because the platforms cannot be supported if they do not support the deployment of apps to their Stores. Please use 11.3 to build for iOS or Android with C++.
  • Clang Upgrade - Added a preview version of an upgraded Clang Win64 compiler.
    • Uses Clang 15.
    • Uses LLVM's lld as the linker.
    • Uses the Itanium ABI (not Microsoft ABI).
    • Uses LLVM's libc++ STL.
    • Uses UCRT for the C runtime.
    • Uses a mix of LLVM and Mingw for the C++ runtime.
    • Command line tools only. Compiling or linking from the IDE is not allowed, so run bcc64x manually.
    • Users can debug from the IDE.

Data Improvements

  • Data and Internet
    • RAD Server - The RAD Server engine is built with the FastMM5 memory manager, which improves performance, specifically in heavy multi-threading scenarios. On average, the benefit is a 5% performance increase. The following sections show more improvements in the RAD Server area.
      • Paging Improvements - Added the option for LIST requests sent to TEMSDataSetResource to specify a dynamic page size in a parameter.
      • Sqids for URLs - By default, when navigating a data structure (e.g., a database table), RAD Server exposes URLs that might include specific information about the records. Therefore, Sqids have been introduced, which are an improved version of Hashids, to encode sensitive data.
      • RAD Server Session Authentication Improvement - The TBackendAuth component allows users to specify a Username and Password. Once logged into RAD Server, users have a session token, which is hard to manage.
      • RAD Server Quality
        • Added RAD Server Console to the Tools menu of the RAD Studio IDE.
        • TBackendAuth.LoggedInValue.ExpiresAt now returns a local time when the authentication token will expire.
        • A client-side OnNeedClientCertificate event is now offered, the same as the OnValidateCertificate event.
    • General Internet Improvements
      • FormatXMLData now includes a parameter to indicate the number of spaces to use for indentation. The default value is 2 spaces.
      • The TWinHTTPClient.DoExecuteRequest method supports data transfer of more than 4 GBr.
      • Added support for HTTP DELETE method with content:
        • THttpClient.Delete/BeginDelete overload methods with AStream argument.
        • TNetHTTPClient.Delete overload method with AStream argument.
      • REST Client Library improvements include:
        • RESTClient now recognizes a response as JSON when the Content-Type is application/vnd.retailer.v8+json.
        • Added a new OnBeforeExecute event in TCustomRESTRequest.
        • For better redirect and cookie management, the following events have been added:
          • THTTPClient.OnRedirect.
          • THTTPClient.OnUpdateCookie.
          • TNetHTTPClient.OnRedirect.
          • TNetHTTPClient.OnUpdateCookie.
        • To improve the support for large files in the TMultipartFormData class (in the System.Net.Mime unit), this release adds:
          • A TMultipartFormData.AddStream overload method.
          • A new AHeaders: TStrings = nil argument in TMultipartFormData methods.
          • A new TProxyAggregateStream class in System.Classes.
        • The HTTP client library uses the underlying operating system APIs to execute HTTP(S) requests by default. The library uses libcurl, a cross-platform and not a Linux-specific HTTP library on Linux. For this reason, RAD Studio adds Curl support on other platforms. This allows for bypassing some of the platform restrictions. For THTTPClient to use libcurl on Windows, users must add System.Net.HttpClient.Linux to the uses clause.
        • Added the ability to access data while it is received in an HTTP (or REST) request, considering there are servers that return the data in logical chunks within a single HTTP request (e.g., AI-focused REST APIs). This release adds the following to account for similar scenarios.
          • In System.Net.HttpClient:
            • IHTTPRequest.ReceiveDataExCallback.
            • IHTTPRequest.OnReceiveDataEx.
            • THTTPRequest.ReceiveDataExCallback.
            • THTTPRequest.OnReceiveDataEx.
            • THTTPClient.ReceiveDataExCallback.
            • THTTPClient.OnReceiveDataEx.
          • In System.Net.HttpClientComponents:
            • TNetHTTPRequest.OnReceiveDataEx.
            • TNetHTTPClient.OnReceiveDataEx.
          • In REST.Client:
            • TCustomRESTClient.OnReceiveDataEx.

FireDAC

  • QBE - Introduced FireDAC support for QBE (query by example) thanks to a new component called TFDQBE, which represents a query-by-example component.
  • FireDAC SQLite Version Update
    • Added support for SQLite 3.42 while maintaining the option of using SQLite 3.31.1 with FireDAC encryption (FDE). Since version 3.42, SQLite dropped the mechanism FireDAC uses for encryption support, so it can no longer be used. Which is why there are three different ways of using SQLite with FireDAC:
      • Use the latest version without FireDAC encryption.
      • Use the paid SQLite EE (with the native SQLite encryption support), which FireDAC has supported since RAD Studio 11.0.
      • Continue using SQLite 3.31.1 or previous versions with FireDAC encryption (FDE).
  • FireDAC and Security
    • Added security-related features for FireDAC. These features and good overall security practices can contribute to developing more secure database applications. The following properties are available under TFDSecurityOptions:
      • AllowedCommandKinds - Limits the execution of SQL commands, preventing a hacker from modifying a query and making unwanted changes to the database.
      • AllowMultiCommands - Enables or disables the execution of multiple SQL commands. It is enabled by default and works only with databases offering the matching feature: SQLite, PostgreSQL, and MySQL.
      • AllowSQLChange - When enabled, this setting avoids changes to the text of a FireDAC SQL query at runtime. A method like DoSQLChanging would invoke CheckCanChangeSQL, now checking for the specific setting (among other conditions).
      • ExactUpdatedRecsNum - It is an Integer with a default value of -1. When it is set to > 0, in conjunction with:
      • FireDAC will wrap SQL UPDATE commands with extra checks.
  • FireDAC Enhancements
    • Added a new property in the FireDAC connection object: TFDCustomConnectionCommandsExecuted. This is a UInt64 value that users can use to determine if a connection is new or if it is being recycled and has already been used to interact with the database. Ideally, when it is 0, no commands have been executed on this connection.
    • The unit FireDAC.Phys.SQLiteWrapper.Stat.pas now uses SQLite 3.42.
    • The new unit FireDAC.Phys.SQLiteWrapper.FDEStat.pas uses SQLite version 3.31.1, with FireDAC encryption (FDE) still available.
    • Added support for Decimal128 in MongoDB.
    • Added support for HTTP protocol for Datasnap.
    • Added support for {INTO } escape sequence for Microsoft SQL Server.
    • Updated TSQLiteEngineLinkage:
      • Added slFDEStatic - FireDAC.Phys.SQLiteWrapper.FDEStat.pas.
      • slStatic - FireDAC.Phys.SQLiteWrapper.Stat.pas.
    • The default linkage mode is now static with SQLite version 3.31.1 with FDE.
    • For Android, Linux, and iOS platforms, only one static linkage unit may be included in a project simultaneously.
    • By moving to a newer version of SQLite, FireDAC can now use DDL commands added to recent database versions, like an ALTER TABLE, including DROP for columns.

VCL and FireMonkey Changes

  • VCL - RAD Studio version 12.0 offers many significant enhancements in the VCL library.
    • MDI Reworked for HighDPI and Styles
      • Custom border for MDI child window - MDI child forms can now have a new modern flat border under Windows 10 and 11 systems.
      • Custom border for forms with Parent Assigned Property - Introduced a new TWinControlHandler class for the TWinControl class and a TChildMessageHandler class to use in the TCustomForm class. This supports having a custom border for MDI child forms and forms with an assigned Parent property.
      • The IFormVisualManager Interface and the VisualManager Property of the TCustomForm class - To add a new control to manage forms, this release introduces a new IFormVisualManager interface. It includes basic methods, which are integrated with the TCustomForm class to get messages and actions from forms to manage them.
    • TFormTabsBar Control
      • This release added a new FormTabsBar control as a universal and ready-to-use solution for hosting multiple child forms in a modern tab-like user interface, as a possible modernization path for existing MDI applications, but also as a way to create brand new applications in VCL.
      • MDI Wizard Update - This release updated the MDI Wizard projects for Delphi and C++Builder. The code generated by the wizard uses:
        • The TActionMainMenuBar component instead of the TMainMenu component.
        • The TImageCollection plus TVirtualImageList combination instead of the TImageList component.
        • A TFormTabsBar control.
    • Fonts and Screens - The VCL library has newly reworked support for font scaling independent from DPI scaling. The changes are primarily in the TFont class of the VCL library.
      • In this release, the TFont class adds the following new methods and properties:
    • Platform Integration
      • This release cleaned up Windows API and WinRT API mappings by refreshing the WinRT APIs and the WebView 2 controls to the most recent versions.
    • Edge Browser
      • Refreshed the WebView 2 control API to a recent version, WebView2 SDK 1.0.1774.30. This brings support for many new features of the underlying WebView 2 control, including:
        • UserAgent is available in ICoreWebView2Settings.
        • ICoreWebView2Profile2 contains methods ClearBrowsingData, ClearBrowsingDataAll, and ClearBrowsingDataInTimeRange.
      • TEdgeBrowser also has a new method that provides post data or additional request headers during navigation. The headers in ARequest override headers added by the WebView2 runtime except for Cookie headers. The web resource request method must be GET or POST.
    • Tile View Support to TListView
      • The VCL library adds support for this option available in the underlying platform control. This is made available with:
        • Added vsTile value to the TViewStyle enumeration.
        • Added the OnCancelEdit event to the TListView control.
        • Added a new TileOptions property to the control to adjust tile items. This property includes:
          • SizeType: Defines the item size type (auto or fixed size variations).
          • Width and Height of the tile, if a fixed size type is set.
          • LabelMargins: The margins for the label (all text lines) inside an item.
          • SubLineCount the count of lines that can be below the item Caption.
        • Added a new TileColumns property to adjust additional lines inside the item to show sub-item text from columns. The TileColumns property of the control automatically adjusts tile info for all existing items in the list.
    • TControl Enumerator - This release adds a TControl enumerator to the VCL library and the TComponent enumerator. For TComponent, the logic is to scan the components owned by a given component. For the TControl enumerator, the logic is to scan the child controls.
    • New ShowInTaskbar Form property - The TForm class has a new ShowInTaskbar property, controlling if a form should have a matching entry in the Windows taskbar, even if it's not the main form.
    • Desktop Windows Manager Enhancements
      • This release adds support for some of the advanced desktop management features in Windows 11. These features don't work on older versions of the operating system.
      • In the Winapi.DwmApi.pas unit, this release, adds several new DWMWA_xxx constants used to activate some of the new platform features.
      • VCL forms now support the Immersive Dark Mode of Windows 11. Call the new EnableImmersiveDarkMode method of the TForm class to enable it.
    • New Double Buffering Mode - Introduced a new TDoubleBufferedMode enumerated type for all controls, a new DoubleBufferedMode property of that type, and a new CanUseDoubleBuffering method.
  • FireMonkey - For the FireMonkey library, RAD Studio added the new Skia library integration feature. However, RAD Studio version 12.0 introduces other new features and improvements.
    • Split Screen Support - Starting with this release, RAD Studio added support for creating FireMonkey apps for mobile platforms that use only a portion of the available screen, a feature specifically useful on tablet devices with a large screen surface.
    • TEdit and TMemo Improvements - Starting with this release, RAD Studio significantly improved the TEdit/TMemo controls, starting with desktop platforms (Windows and macOS).
    • Important FireMonkey Updates
      • General FireMonkey changes
        • Added new TEdit property AutoSelect and CharCase.
        • TEdit now supports Undo functionality. The recently added TUndoManager is shared between TEdit and TMemo.
        • TMemo implements IME Text inputting like in native TEdit.
        • TEdit now takes into account the foreground brush resource.
        • Improved Shift-clicking selection.
      • For the iOS platform
        • Refactored Virtual Keyboard for iOS: FMX implementation of iOS Virtual keyboard used to align virtual keyboard Toolbar with custom buttons manually moved the logic for toolbar alignment/animation to the iOS side, removed some unnecessary complex code, and facilitated support by shifting most of the logic to iOS platform.
      • For the Android platform
        • Improved the interactive text selection.
        • Adjusted selection Point position and place the left below text selection.
        • Included selection Point for position cursor in TMemo and TEdit.
        • Improved the PointInObjectLocal handles the area when using a style with an offset of objects.
        • Updated platform and premium styles to support improved text selection.
        • Updated generation FireMonkeystyle for TEdit/TMemo/etc. Added CaretPoint for text-input controls for Android.
        • Added support for finger slide gestures to move the cursor on TMemo on Android.
    • All Platforms Single Icon and Android Adaptive Icon - The new Single App Icon Wizard is a comprehensive tool integrated within the RAD Studio IDE, designed to streamline the process of generating icons and splash screens for user applications across multiple platforms. One of its key features is the support for the Android Vector Drawable format, which allows for creating scalable and responsive icons and splash screens specifically for Android devices.
    • Additional FMX Improvements
      • Added new TFontManager for Windows and macOS, allowing for dynamically loading a font in an application.
      • Expanded FMX multitouch support by adding these new fields to the TTouch data type:
        • Id: The unique identifier of the touch. Valid until the moment when the finger was raised off the screen.
        • Location: The touch point.
        • Action: The action that was performed with this touch: putting finger on the screen, lift, move, etc.
      • Added new TWinFormPositionerService which helps FMX manage the screen(s) layout and positions, determine the desktop center, and handle some of the issues with coordinates.
      • Added support for passing ssDouble in Mouse events in case of double click or double tap on mobile platforms. The sequence of mouse operations (in case of double click) for all platforms is now:
        • OnMouseDown.
        • OnClick.
        • OnMouseUp.
        • OnMouseDown (State = ssDouble).
        • OnDoubleClick.
        • [OnMouseMove] (State = ssDouble).
        • OnMouseUp (State = ssDouble).
      • The TLocationSensor ErrorRadius has been implemented for mobile platforms.
      • FireMonkey includes a new Windows 11 style.
      • Added new property FirstWeekMode for FireMonkey Calendar control, choose between ISO8601 and FirstDayOfYear modes.
      • Enabled FireMonkey to remove the TCanvas global lock if using a backend implementation (like Skia) with multithreading support. This can be achieved using the new TCanvasStyle flag DisableGlobalLock.
      • Added a new HeaderSettings property for the TColumn class so that users can specify the style of the column header. This also includes a new HeaderStyleLookup property.

ToolsAPI

  • The code editor has several ways to read and write content. In this release, the existing interfaces have been extended or added new ones to add some high-performance APIs.
  • Specific sample projects are available as part of the product demos:
    • Editor Raw Read Demo.
    • Editor Write Demo.
  • Improvements have been made to the default painting for each text cell (character area) in the editor and other key information for the line state.