Repository navigation
FormsLang 1.1.0
The layout release. A Forms screen now becomes native APEX components that keep its structure, with a per-element mapping report in every export.
What is new
- Native layout. Content canvases, frames and tab pages become regions, sub-regions and tab pages on the Universal Theme 12-column grid; rows are detected from the Forms geometry, column spans follow each item's share of its parent, the label keeps its own share of the row, and items drawn beside or below a frame keep their vertical order. No custom JavaScript, no CSS, no absolute positioning.
- Interactive Grids. A multi-record block on a table becomes an
interactiveGridregion: one column per item in the order Forms draws the record, headings from the prompts, native column types, primary key, widths, required and max length, hidden database items as hidden columns. Editing stays off until the block's DML is confirmed; no table binding is invented. - Native item types with their Forms properties.
datePickerandnumberFieldwith the Forms format mask (right-aligned numbers),textareawith width and height from the item box,checkboxwith the item's checked/unchecked values,radioGroupwith the buttons per row and no empty choice,selectListon a shared static LOV, read-only for disabled items, text case, help text from hint and tooltip. - Template options as native properties:
t-Form--stretchInputson form regions,t-IRR-region--hideHeaderon a grid inside a captioned frame. Stacked canvases and secondary windows become inline dialogs; toolbars flow inline; boilerplate text and rectangles become static regions. - Layout mapping report in
apexlang-manifest.json: for every visible Forms control, its source identity and geometry, the component it became and where it sits on the grid, the rule applied, the properties preserved, the approximations, the unsupported mappings, and afaithful/approximation/unsupportedstatus with explicit denominators. Never a score. - Preview draws the planned APEX layout from the same resolved model the export writes, with Interactive Grids, date and number shapes and a fidelity badge per control.
- Render check without a public page:
examples/verify/apex_render_check.pylogs in as a temporary end user it creates and removes, fetches the imported page through ORDS and inspects the HTML.
Verified on APEX 26.1.0
The synthetic showcase module was exported, validated (Validation successful), imported into a dedicated development application, checked in the APEX dictionary and rendered through ORDS: 13 regions (9 standard, 3 Interactive Grids with their headings in Forms order, 1 tabs region with 5 pages), 3 date pickers, 15 number fields, textareas at 5x84 and 6x120 characters, no error banner, no LABEL_COLUMN_SPAN_TOO_BIG, no absolute positioning, no layout script. Showcase totals: 72 visible controls, 48 faithful / 24 approximation / 0 unsupported; 21 groups, 15 / 6 / 0.
The mapping matrix, the geometry rules, the before/after of the showcase page and the reproduction commands are in docs/layout-mapping-matrix.md. The render-time runbook is in docs/apex-import-verification.md.
Known limitations
Exact Forms pixels become rows and twelfths of a row; toolbars flow inline; captions right of or below a field float inside it; stacked canvases become inline dialogs without the dynamic action that opens them; Interactive Grids are read-only until the block's DML is confirmed; record-group LOVs are named, never generated; Image, Bean Area, OLE, ActiveX, VBX, Sound, Tree, Chart and custom items have no native component and are reported as unsupported with a placeholder.
Install
Windows: FormsLang_1.1.0_x64-setup.exe (NSIS) or FormsLang_1.1.0_x64_en-US.msi. Python: pip install -e . from the tag. Full changelog: CHANGELOG.md.