Aperture UI
Road To Stable

Phase 2: Style System - Implementation Summary

Phase 2: Style System - Implementation Summary

Overview

Phase 2 implements the complete CSS style system including cascade resolution, inheritance, computed value generation, and style sheet management.

Components Implemented

1. StyleSheet Class (StyleSheet.h & StyleSheet.cpp)

Location: Code/ApertureUISource/APHTML/css/

Key Features:

  • CSS rule storage and organization
  • Selector matching and specificity calculation
  • Cascade resolution (inheritance, specificity, order)
  • Computed value generation
  • Style sheet compilation and optimization
  • Performance caching for rule matching and style computation

Core Methods:

  • ComputeElementStyle() - Main entry point for style computation
  • ResolveCascade() - Applies CSS cascade rules
  • ApplyInheritance() - Handles property inheritance
  • MatchesSelector() - Selector matching logic
  • Compile() & Optimize() - Performance optimization

2. CSSRule Class

Features:

  • Represents CSS rules with selectors and declarations
  • Property management and storage
  • Specificity calculation
  • Support for different rule types (style, media, import, etc.)

3. CSSSelector Class

Features:

  • Complete CSS selector parsing and matching
  • Support for all selector types:
    • Element selectors (div, span)
    • Class selectors (.classname)
    • ID selectors (#idname)
    • Pseudo-class selectors (:hover, :active)
    • Pseudo-element selectors (::before, ::after)
    • Attribute selectors ([attr=value])
    • Universal selector (*)
  • Specificity calculation following CSS standards
  • String representation for debugging

4. CSSParser Class (CSSParser.h & CSSParser.cpp)

Features:

  • Complete CSS text parsing and tokenization
  • Selector parsing and validation
  • Property parsing and validation
  • Rule construction and organization
  • Error handling and recovery
  • Support for comments, strings, numbers, identifiers
  • Strict and lenient parsing modes

Parsing Capabilities:

  • CSS style rules
  • Selector lists with combinators
  • Property declarations
  • Comments and whitespace
  • Error recovery and reporting

5. ElementStyle Integration

Updates:

  • Integrated with StyleSheet system for computed value generation
  • Enhanced property management with cascade support
  • Improved inheritance handling
  • Better integration with document style sheets

Technical Implementation Details

Cascade Resolution Algorithm

  1. Collect Matching Rules: Find all CSS rules that match the element
  2. Sort by Specificity: Order rules by CSS specificity (a,b,c,d format)
  3. Apply Rules: Apply properties in order, with later rules overriding earlier ones
  4. Handle Inheritance: Apply inherited properties from parent elements
  5. Apply Local Overrides: Apply element-specific property overrides

Specificity Calculation

  • ID selectors: 1,0,0,0 (highest priority)
  • Class/Pseudo-class/Attribute selectors: 0,1,0,0
  • Element/Pseudo-element selectors: 0,0,1,0
  • Universal selector: 0,0,0,1 (lowest priority)

Performance Optimizations

  • Rule Caching: Cache matching rules per element
  • Style Caching: Cache computed styles per element
  • Compilation: Pre-calculate specificity and optimize rule storage
  • Tokenization: Efficient CSS text parsing with minimal allocations

Integration Points

With Phase 1 Components

  • StyleSheetSpecification: Uses property definitions and validation
  • PropertyParser: Leverages property parsing for CSS declarations
  • Property System: Integrates with Property and PropertyId classes

With Element System

  • BaseElement: Style computation during element updates
  • ElementStyle: Enhanced with cascade and inheritance support
  • ComputedValues: Generated from CSS cascade resolution

Testing Considerations

  • CSS parsing accuracy and error handling
  • Selector matching correctness
  • Specificity calculation accuracy
  • Cascade resolution order
  • Inheritance behavior
  • Performance under load

Next Phase Dependencies

Phase 2 provides the foundation for:

  • Phase 3 (Layout & Geometry): Computed values drive layout calculations
  • Phase 4 (Rendering System): Style properties control rendering behavior
  • Phase 5 (Element Components): Style affects component behavior

Status: ✅ COMPLETE

Phase 2 is fully implemented and ready for integration with subsequent phases.

Copyright © 2026