* master:
fix: Correct `debugging_monitor.py` script instructions (#676)
fix: Correct instruction text to match actual button text (#672)
fix: Increase network SSID display length (#670)
Both activities only need book metadata (title, author) and cover image.
Pass skipLoadingCss=true to Epub::load() to avoid unnecessary CSS
parsing and caching operations.
- Add cssFiles member to Epub class (moved from BookMetadataCache)
- Add getCssRulesCache() and loadCssRulesFromCache() methods
- Update parseCssFiles() to save parsed rules to cache
- Try loading from css_rules.cache before parsing CSS files
- Add skipLoadingCss parameter to Epub::load() for performance
- Remove cssFiles from BookMetadataCache (no longer needed)
- Revert BookMetadataCache version to 5 (pre-CSS-files format)
When loading an EPUB:
1. Try to load cached CSS rules first
2. If cache miss, parse CSS files and save to cache
3. If skipLoadingCss=true, skip CSS entirely (for cover display)
Add saveToCache() and loadFromCache() methods to CssParser for persisting
parsed CSS rules to disk. The cache format includes:
- Version byte for cache invalidation
- Rule count
- For each rule: length-prefixed selector string + CssStyle fields
This allows skipping CSS file parsing on subsequent book opens by loading
pre-parsed rules from cache.
Major consolidation of styling infrastructure:
- Remove TextBlock::Style enum (JUSTIFIED, LEFT_ALIGN, etc.)
Alignment is now stored in BlockStyle.alignment using CssTextAlign
- Remove wordUnderlines list from TextBlock and ParsedText
Underline state is now encoded in EpdFontFamily::Style via UNDERLINE bitflag
- Use BlockStyle::fromCssStyle() and getCombinedBlockStyle() in parser
Removes duplicated createBlockStyleFromCss() and mergeBlockStyles()
- Simplify text block rendering to check style bitflag for underlines
- Revert spurious spaces handling (isAttachingPunctuation logic)
The actualGapCount approach had issues; using standard word gaps
This reduces code duplication and simplifies the style inheritance model.
- Add alignment and textAlignDefined fields to BlockStyle
- Add getCombinedBlockStyle(child) for merging parent/child styles
- Add static fromCssStyle(cssStyle, emSize, paragraphAlignment) factory
These methods centralize the CSS→BlockStyle conversion logic (previously
duplicated in createBlockStyleFromCss) and provide a clean API for
handling nested block element style inheritance.
- TextAlign enum → CssTextAlign (reordered to match settings: Justify=0, Left=1, Center=2, Right=3)
- alignment → textAlign
- indent → textIndent
- decoration → textDecoration
- Update CssPropertyFlags field names to match
- Remove TextAlign::None; default to CssTextAlign::Left
This aligns internal naming with actual CSS property names for clarity.
Convert Style enum to true bitflags by adding UNDERLINE=4. Update getFont()
to use bitwise operations instead of equality checks, allowing styles like
BOLD|UNDERLINE to work correctly.
This is preparation for encoding underline state directly in the Style
rather than tracking it separately.
The function measures the advance width of arbitrary text (specifically
em-space prefix), not just indentation. getTextAdvanceX better reflects
its actual purpose.
## Summary
**What is the goal of this PR?**
- Minor correction to the `debugging_monitor.py` script instructions
**What changes are included?**
- `pyserial` should be installed, NOT `serial`, which is a [different
lib](https://pypi.org/project/serial/)
- Added macOS serial port
## Additional Context
- Just a minor docs update. I can confirm the debugging script is
working great on macOS
---
### AI Usage
While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.
Did you use AI tools to help write this code? _**< NO >**_
## Summary
* Instruction text says "Press OK to scan again" but button label is
actually "Connect" (not OK)
* Corrects instruction text
---
### AI Usage
Did you use AI tools to help write this code? **No**
## Rationale
I have 2 wifi access points with almost identical names, just one has
`_EXT` at the end of it. With the current display limit of 13 characters
before adding ellipsis, I can't tell which is which.
Before device screenshot with masked SSIDs:
<img
src="https://github.com/user-attachments/assets/3c5cbbaa-b2f6-412f-b5a8-6278963bd0f2"
width="300">
## Summary
Adjusted displayed length from 13 characters to 30 in the Wifi selection
screen - I've left some space for potential proportional font changes in
the future
After image with masked SSIDs:
<img
src="https://github.com/user-attachments/assets/c5f0712b-bbd3-4eec-9820-4693fae90c9f"
width="300">
---
### AI Usage
While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.
Did you use AI tools to help write this code? _**< NO >**_
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.