- the promotion commit captured the consumer imports and the test
update but missed the new source file itself and the deletion of
the force-included header it replaces
- without the .j, the display-server functions are absent from the
compiled frameworks; with the .h still present, the legacy build
force-includes the old macro definitions alongside the new
functions
- follow-up to the display-server promotion commit
- the 11 display-server primitives become plain functions in
Platform/DOM/CPDOMDisplayServer.j; bodies verbatim from the macro
definitions; the header was force-included into every AppKit
compilation by the legacy build and invisible to capp-build
- CPView.j, CPImageView.j, _CPDisplayServer.j import the new file;
this was the last header in either framework
- CPDOMDisplayServerTest: the raw #include replaced by the
framework-qualified import
- the six GET_LEVEL_INDICATOR_SEGMENT call sites become direct
layoutEphemeralSubviewNamed: messages; the macro was fully
parameterized with no ambient state
- the segment index is the literal 0 at every site, so the
concatenation folds to a constant string
- the warning comment about direct ephemeral-subview access is
retained
- the seven UIAssert call sites become direct
[self markTest:_cmd didPass:...] messages, matching the direct
calls already used elsewhere in the file
- the macro expanded to the same expression using the enclosing
method's _cmd, which the completion closures capture identically;
behavior unchanged
- the commented directive predated the isNumeric modernization that
replaced it with the CPIsNumeric() function
- cosmetic: with it gone, AppKit and Foundation sources contain no
preprocessor directive text of any kind, active or commented
- CoreGraphics/CGContextCanvas.j (635 lines) inlined into CGContext.j
at the former #include site inside the CPHTMLCanvasFeature branch
- the 11 one-line canvas delegation macros become plain functions;
their macro form was a 2008-era call-overhead optimization that
modern JITs make unnecessary
- the compatibility tables, hasPath path-semantics helper, backend
implementations and CGBitmapGraphicsContextCreate pass through
verbatim
- capp-build's compiled AppKit gains the canvas backend for the first
time: the deferred include previously omitted it entirely
- zero #define, #include or #pragma directives remain in AppKit or
Foundation sources
- CoreGraphics/CGContextVML.j removed; it implemented the CGContext
function family against Internet Explorer's VML, irrelevant in the
supported browser landscape for over a decade
- its self-replacing CGBitmapGraphicsContextCreate wrapper called
document.namespaces.add, an IE-only API — a latent crash on modern
browsers had the branch ever been selected
- CGContext.j: the CPVMLFeature branch of the load-time backend
selection removed; CPCompatibility.j: the CPVMLFeature constant and
its feature-table entry removed
- Tests/AppKit/CGContextTest.j: the vacuous VML-incompatibility
assertion removed
- the canvas backend and the no-canvas stubs are unchanged
- the spaced "# pragma mark -" form escaped the earlier MARK
conversion pass and the directive censuses; it is dead text
- this was the last pragma directive in either framework
- the seven chained macros (_CPRealFontSize, _CPFontNormalizedNames,
_CPCachedFont, _CPUserFont, _CPSystemFontCacheKey,
_CPCachedSystemFont, _CPSystemFont) become plain functions with
verbatim bodies
- all 25 call sites unchanged; all arguments at call sites are pure
expressions, so evaluation semantics are identical
- file-internal only: no other source file references these names
- _CGColorSpaceCreateWithModel becomes a function returning the
model record
- STANDARDIZE, whose body contains a return from the enclosing
function, is inlined verbatim at its two call sites (alpha
standardization and the RGB/CMYK component loop)
- CPScrollView _shouldShowCornerView, CPSplitView
_maybePostWillResizeNotification/_maybePostDidResizeNotification/
_didSuppressResizeNotifications/_setResizeNotificationsSuppressed:,
CPTableView _numberOfColumns/_updateColumnRangesIfNecessary/
_fullRowHeight/_rowBottomOfHeightInfo:/_hasVariableRowHeights,
CPMenuItem _decodeValueForKey:defaultValue:coder:/
_encodeValue:forKey:ifNotEqualTo:coder:, CALayer
_adjustContentsZIndexForLayer: and DOM: macros that referenced
ivars, self or the enclosing method's coder become private instance
methods; call sites rewritten from macro form to message form
- CABackingStore PIXEL, CPDragServer DRAGGING_WINDOW,
CPOutlineView SELECTION_SHOULD_CHANGE and SHOULD_SELECT_ITEM
become plain functions; call syntax is unchanged at all sites
- these macros reference only their parameters, so no ambient state
is involved
- the variable was omitted from the method's var declaration list
when xib deployment-target handling was added (2024); its
assignment created an implicit global, flagged by the compiler as
"creating global variable inside function or method"
- no functional change; the variable is used only within the method
- AppKit/Platform/Platform.h deleted; it defined only the
PLATFORM(FEATURE) macro, which no source file uses since the
AppKit preprocessor-removal work completed
- Foundation/Jakefile: the historical --include of that header into
every Foundation compilation is removed
- Jake/environment.js and the Objective-J subproject's copy: the
-DPLATFORM_COMMONJS/-DPLATFORM_BROWSER/-DPLATFORM_DOM flags are
removed; they defined symbols read only by the deleted macro
- no functional change; capp-build is unaffected (it consumes neither
the header nor the flags)
- CPPasteboard.j and Platform/DOM/CPPlatformPasteboard.j: the
PLATFORM(DOM) gates removed; _CPDOMDataTransferPasteboard and
CPPlatformPasteboard now exist under both targets
- the SUPPRESS_CAPPUCCINO_CUT/PASTE one-statement macros inlined at
their four call sites; the defines are deleted
- no #if PLATFORM gate remains anywhere in AppKit; the browser/
CommonJS distinction is now expressed entirely through runtime
CPDOMAvailable guards
- work-in-progress towards complete removal of CPP directives
- CPPlatform.j and CPPlatformString.j: the PLATFORM(DOM) gates and
CommonJS #else subclasses removed; one implementation serves both
targets
- CPPlatform: isBrowser and supportsDragAndDrop return NO when no DOM
is present, preserving the CommonJS results exactly; the NativeHost
distinction (window.cpIsDesktop) is unchanged
- CPPlatformString: createDOMElements, charPositionOfString,
sizeOfString and metricsOfFont return the former CommonJS-branch
values (no-op / zero / zero size / zero metrics) when no DOM is
present
- work-in-progress towards complete removal of CPP directives
- Update clean and clobber targets in Tests/Manual/Jakefile to enforce -mindepth 2 -maxdepth 2 traversal. This accurately purges subsidiary Build directories and Frameworks symlinks without triggering subjake dependency cycles.
- Inject explicit clean and clobber overrides into all 150+ subsidiary application Jakefiles. This forces local execution to wipe the top-level Build directory, bypassing applicationtask's default behavior of only targeting configuration-specific intermediate paths.
- Harmonizes artifact sweeping across both root-level orchestration and local leaf-level execution.
- Consolidate dual root `build` tasks into a unified target that initializes the build environment and spawns the orchestration pipeline cleanly.
- Replace individual test symlink creation in root `Jakefile` with an `assemble-frameworks` task that constructs a complete, portable `Build/Frameworks` directory.
- Update `Tests/Manual/Jakefile` `configure` task to target project root `Build/Frameworks` directly and streamline `clobber` operations.
Caveat: Tests/Manual subsidiary applications do not have functioning ‘clean’ and ‘clobber’ targets.
- Consolidate dual root `build` tasks into a unified target that initializes the build environment and spawns the orchestration pipeline cleanly.
- Replace individual test symlink creation in root `Jakefile` with an `assemble-frameworks` task that constructs a complete, portable `Build/Frameworks` directory.
- Update `Tests/Manual/Jakefile` `configure` task to target project root `Build/Frameworks` directly and streamline `clobber` operations
- Caveat: Jakefile in each subsidiary application does not include ‘clean’ and ‘clobber’ targets.
- CPWindow.j: the PLATFORM(BROWSER) import gate removed; the
CPPlatformWindow (DOM) category now loads under both targets
- category _init restructured: DOM setup (window capture, pasteboard,
registration) behind CPDOMAvailable; CommonJS branch initializes the
same state as the base class
- SCROLLWHEEL_LINE_PIXELS converted from #define to a file-scope
variable; its only uses are within this file
- load-time audit: file-scope statements are DOM-free; the single
typeof-guarded document reference takes its no-DOM branch under Node
- work-in-progress towards complete removal of CPP directives
- CPTextField, CPTokenField, CPTextView: the PLATFORM(DOM) gates
around _inputElement (superclass and override) and _cumulativeOffset
are removed; the methods now exist under both targets with runtime
CPDOMAvailable guards returning nil (object methods) or a zero
point (struct method) when no DOM is present
- contract change: under CommonJS these methods change from absent to
present-and-inert; all callers are browser event paths never
exercised by the theme blender or nib2cib
- zero preprocessor directives remain in these three files
- work-in-progress towards complete removal of CPP directives
Merges 71 commits from main. Headline content: the Tests/Manual
integration test suite revived and reorganized after long disuse
(renames, new applications, updated cibs), restoring a large
integration validation surface. Functional fixes include replacing
unload-based termination with pagehide (back/forward cache
compatibility) and hardening CPTextField's input-element handling.
Conflict resolutions (local versions retained):
- AppKit/CPTextField.j: main's input-element logic carried, with this
branch's preprocessor-removal sweep re-applied on top. Main's
conditionals are re-expressed as runtime CPDOMAvailable guards; the
_inputElement method-definition gate is retained.
- AppKit/Platform/CPPlatform.j: the DOM platform implementation stays
inlined under the PLATFORM(DOM) gate. The split layout breaks the
legacy build: the include fragment is compiled standalone by the
source walk and cannot resolve its superclass. Main's pagehide
termination fix is ported into the inlined section; the restored
AppKit/Platform/DOM/CPPlatform.j fragment is deleted.
Verified: legacy build green through Foundation, AppKit and Tools;
Tests/Manual suite passing.
The legacy dist, debug, and release Jake targets have been deprecated in favor of a unified build command, aligning the repository with standard conventions.
Node toolchain execution is sufficiently fast to generate both release and debug artifacts simultaneously within a single pass.
The symlinks within Tests/Manual/.Frameworks have been redirected to point to the unified Build artifacts rather than the obsolete dist directory.
Repository reset operations have also been corrected to ensure comprehensive artifact removal.
The root Jakefile now explicitly projects clean and clobber tasks into Tests/Manual; the clobber task now correctly removes Tests/Manual/.Frameworks along with the Frameworks directories in each subsidiary test.
* Fully remove the static, hand-maintained knownTimeZoneNames array and knownTimeZoneNamesSet dictionary from +initialize.
* Implement runtime dynamic population via Intl.supportedValuesOf("timeZone") with strict fallback handling for GMT and UTC.
* Introduce a robust _isValidTimeZoneName runtime check utilizing Intl.DateTimeFormat validation to reject unrecognized zone names dynamically rather than relying on a stale static list.
* Update initWithName: and _initWithName:abbreviation: to leverage the new engine-native validation bridge.
Transitioning to native JavaScript timezone APIs in CPTimeZone exposed latent defects in CPDateFormatter's token parsing and offset generation.
* Update CPDateFormatterTest to enforce strict UTC temporal baseline matching.
* Bypass unreliable host JavaScript local string parsing heuristics in `_dateFromTokens:dateComponents:` by implementing native `Date.UTC()` absolute timestamp construction.
* Fix GMT offset string generation for the `Z` token to correctly evaluate zero-offset timezones as positive, ensuring standard `+0000` formatting instead of `-0000`.
Remove the legacy, locally-bundled tzdata payload and re-implement CPTimeZone to wrap the host JavaScript engine's native timezone capabilities.
This uses fundamental properties of the host Javascript environment and is supported by browsers and Node.
* Transition offset calculations, abbreviation lookups, and DST evaluations to rely on native temporal data via underlying bridging functions (e.g., `_offsetMinutesForZone`, `_abbreviationForNameAndDate`).
* Implement synthetic fallback logic for fixed-offset abbreviations when native engines fail to produce IANA short names.
* Route localized timezone name resolution (`_localizedNameForZone`) through native formatters.
* Establish deterministic temporal baseline required by CPDateFormatter test suites.
Eliminates the maintenance burden of updating a bundled tzdata package and guarantees timezone resolution remains synchronized with the host environment.
Expand test coverage for timezone parsing, offset evaluation, and GMT validation.
Establishes a strict temporal baseline and formally exposes existing logic flaws in CPTimeZone prior to applying implementation fixes.
Deletes the Python migration script and shell restoration utilities used to transition the Tests/Manual directory to the @objj/jake toolchain.
The subsidiary Jakefile migration is complete.
The scripts are removed from the active tree to prevent repository clutter, while their implementation details and exact transformation logic remain permanently verifiable in the git history.
Applies the transformation script across all applications in the Tests/Manual directory to eliminate Narwhal-era dependencies and establish compatibility with the modern Node-based runner.
* Removes explicit `require("jake")` calls in favor of the injected JAKE global.
* Replaces legacy `cappuccino/jake` application instantiation with the `CAPPUCCINO.Jake.applicationtask.app` hook.
* Substitutes archaic `system`, `file`, and `os` API calls with native Node `child_process`, `fs`, and `path` modules.
* Corrects package paths for nativehost deployment targets.
Commit the Python migration script and the shell restoration loop used to batch-process the transition of legacy test Jakefiles to the modern Node toolchain.
These scripts provide an auditable record of the automated transformations applied to the test suite and will be removed in a subsequent commit - once the migration is complete.
Updates the transformation script to target the modern Node-based Cappuccino toolchain, removing Narwhal-era APIs from test configurations.
* Replaces legacy `require("jake")` with the implicitly injected `JAKE` global.
* Routes application task instantiation through the modern `CAPPUCCINO.Jake.applicationtask.app` hook.
* Substitutes archaic `OS`, `FILE`, and `system` module calls with native Node `fs`, `path`, and `child_process` equivalents.
* Corrects package pathing for `nativehost` references.
Removes recursive JAKE.subjake calls from the root Jakefile, eliminating silent error masking and path evaluation failures during test suite compilation. Replace subjake with POSIX find.
* Replaces Node-based directory traversal with POSIX find and -execdir to guarantee correct working directory context and propagate standard output.
* Restricts the `clean` task strictly to the removal of build artifacts.
* Introduces a `clobber` task to remove Frameworks symlinks alongside build artifacts, restoring the test directories to a pristine state.
Ensure:
* CamelCase, ending in Test
* No hyphens, spaces, underscores or other non-alpha characters
Updated application directory names.
Update Jakefiles.