Class: Fontisan::Optimizers::PatternAnalyzer
- Inherits:
-
Object
- Object
- Fontisan::Optimizers::PatternAnalyzer
- Defined in:
- lib/fontisan/optimizers/pattern_analyzer.rb
Overview
Analyzes CharString patterns across glyphs to identify repeated sequences suitable for subroutinization. Implements suffix tree-based pattern matching for efficient detection of repeated byte sequences.
Can optionally use stack-aware detection to ensure patterns are stack-neutral, making them safe for subroutinization without causing stack underflow/overflow.
Defined Under Namespace
Classes: Pattern
Instance Method Summary collapse
-
#analyze(charstrings) ⇒ Array<Pattern>
Analyze CharStrings to find repeated patterns.
-
#initialize(min_length: 10, stack_aware: false) ⇒ PatternAnalyzer
constructor
Initialize pattern analyzer.
Constructor Details
#initialize(min_length: 10, stack_aware: false) ⇒ PatternAnalyzer
Initialize pattern analyzer
56 57 58 59 60 61 |
# File 'lib/fontisan/optimizers/pattern_analyzer.rb', line 56 def initialize(min_length: 10, stack_aware: false) @min_length = min_length @stack_aware = stack_aware @patterns = {} @stack_trackers = {} # Cache StackTracker instances per glyph end |
Instance Method Details
#analyze(charstrings) ⇒ Array<Pattern>
Analyze CharStrings to find repeated patterns
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/fontisan/optimizers/pattern_analyzer.rb', line 67 def analyze(charstrings) raise ArgumentError, "No CharStrings provided" if charstrings.empty? # Build stack trackers if stack-aware mode enabled build_stack_trackers(charstrings) if @stack_aware # Extract all byte sequences and build pattern candidates extract_patterns(charstrings) # Calculate savings for each pattern calculate_savings # Filter patterns by minimum length and positive savings filter_patterns # Sort by savings (descending) and return @patterns.values.sort_by { |p| -p.savings } end |