Commit Graph

126 Commits

Author SHA1 Message Date
Arthur Tazhitdinov
10fa0cc060 use language hyphenator for overfit words 2026-01-14 22:56:12 +05:00
Arthur Tazhitdinov
04a084f6c8 refactor: Simplify break information handling in buildExplicitBreakInfos and enhance clarity in liangBreakIndexes 2026-01-14 19:17:29 +05:00
Arthur Tazhitdinov
5dab3d4fcf refactor: Reorder parameters in createSectionFile for clarity 2026-01-14 18:17:06 +05:00
Arthur Tazhitdinov
268d215cbb refactor: Replace cached hyphenator function with static member variable 2026-01-14 18:11:19 +05:00
Arthur Tazhitdinov
85a737fd82 default min suffix/prefix length 3 for english 2026-01-14 17:59:36 +05:00
Arthur Tazhitdinov
3f9d84dafb clang format fix 2026-01-14 01:12:00 +05:00
Arthur Tazhitdinov
0e29640699 fix: Update BOOK_CACHE_VERSION to 5 2026-01-14 01:07:18 +05:00
Arthur Tazhitdinov
43ebe9c66e fix: Enhance Latin letter case conversion and improve isLatinLetter function 2026-01-13 23:51:17 +05:00
Arthur Tazhitdinov
4097319286 fix 2026-01-13 18:48:42 +05:00
Arthur Tazhitdinov
f457ed021d Merge remote-tracking branch 'origin/master' into hyphenation-v3 2026-01-13 18:41:56 +05:00
Dave Allie
8f3df7e10e
fix: Handle EPUB 3 TOC to spine mapping when nav file in subdirectory (#332)
## Summary

- Nav file in EPUB 3 file is a HTML file with relative hrefs
- If this file exists anywhere but in the same location as the
content.opf file, navigating in the book will fail
- Bump the book cache version to rebuild potentially broken books

## Additional Context

- Fixes https://github.com/daveallie/crosspoint-reader/issues/264

---

### 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?

- [ ] Yes
- [ ] Partially
- [x] No
2026-01-13 00:57:34 +11:00
Jonas Diemer
a9242fe61f
Generate different .bmp for cropped covers so settings have effect. (#330)
Addresses
https://github.com/daveallie/crosspoint-reader/pull/225#issuecomment-3735150337
2026-01-12 20:55:47 +11:00
Arthur Tazhitdinov
51bc4810ec remove unused hasOnlyAlphabetic function from HyphenationCommon 2026-01-10 02:33:22 +05:00
Arthur Tazhitdinov
4aa0424fe6 refactor 2026-01-09 23:34:28 +05:00
Arthur Tazhitdinov
ed3a427b64 refactor 2026-01-09 23:20:04 +05:00
Arthur Tazhitdinov
163fae57ec hypher tries 2026-01-09 22:38:27 +05:00
Arthur Tazhitdinov
18fb14271c clang format fix 2026-01-09 20:55:59 +05:00
Arthur Tazhitdinov
0b3e029484 switch to trie packed liang hyphenation dictionaries 2026-01-09 20:54:31 +05:00
Arthur Tazhitdinov
c83fd37286 clang format fix 2026-01-08 15:40:17 +05:00
Arthur Tazhitdinov
3ef2448f72 optimization 2026-01-08 03:27:27 +05:00
Arthur Tazhitdinov
58314e9efd optimization 2026-01-08 03:01:36 +05:00
Arthur Tazhitdinov
34d2b81f40 Remove script method from hyphenator classes to streamline language-specific hyphenation logic 2026-01-08 02:42:24 +05:00
Arthur Tazhitdinov
8822e83394 clang format fix 2026-01-08 02:33:40 +05:00
Arthur Tazhitdinov
61d0e1cadf Add language support to Epub metadata and hyphenation logic 2026-01-08 02:32:52 +05:00
Arthur Tazhitdinov
4f94cf2c36 support for soft hyphens 2026-01-07 22:44:26 +05:00
Arthur Tazhitdinov
8cbf24d12f clang format fix 2026-01-07 20:43:22 +05:00
Arthur Tazhitdinov
f589c60690 Merge branch 'master' into hyphenation-v2 2026-01-07 20:42:53 +05:00
Arthur Tazhitdinov
8580277131 improve explicit hyphen breaking logic 2026-01-07 20:36:06 +05:00
Arthur Tazhitdinov
7e541b9f3b add comments 2026-01-07 20:25:34 +05:00
Dave Allie
2b12a65011
Remove HTML entity parsing (#274)
## Summary

* Remove HTML entity parsing
  * This has been completely useless since the introduction of expat
* expat tries to parse all entities in the document, but only knows of
HTML ones
* Parsing will never end with HTML entities in the text, so the
additional step to parse them that we had went completely unused
* We should figure out the best way to parse that content in the future,
but for now remove that module as it generates a lot of heap allocations
with its map and strings
2026-01-07 23:08:43 +11:00
Arthur Tazhitdinov
2315513ca1 Refactor hyphenation logic to return detailed break information, enhancing line breaking capabilities 2026-01-07 03:54:43 +05:00
Arthur Tazhitdinov
f998180353 clang format fix 2026-01-07 03:17:33 +05:00
Arthur Tazhitdinov
07f1786ff2 Enhance hyphenation logic to allow fallback breaks for better line breaking in ParsedText 2026-01-07 03:15:38 +05:00
Arthur Tazhitdinov
f0ea0b4d5b Fix header size calculation to include hyphenationEnabled in Section.cpp 2026-01-07 03:04:05 +05:00
Arthur Tazhitdinov
81ad6fa6c4 refactor 2026-01-07 02:34:58 +05:00
Arthur Tazhitdinov
54669a8fd4 clang format fix 2026-01-07 02:14:57 +05:00
Arthur Tazhitdinov
e46a271c12 Implement hyphenation support and refactor line break calculations 2026-01-07 02:14:01 +05:00
Arthur Tazhitdinov
22c15cbbca fixed parameter order 2026-01-07 02:12:52 +05:00
Arthur Tazhitdinov
be233917ec Refactor hyphenation logic and update settings for hyphenation toggle 2026-01-03 15:50:51 +05:00
Arthur Tazhitdinov
3059cdbc11 Merge branch 'master' into hyphenation-v2 2026-01-03 15:46:56 +05:00
Arthur Tazhitdinov
cb1ecdb505 Add explicit hyphen handling and improve hyphenation logic in ParsedText and Hyphenator 2026-01-03 15:20:53 +05:00
Pavel Liashkov
0332e1103a
Add EPUB 3 nav.xhtml TOC support (#197)
## Summary

* **What is the goal of this PR?** Add EPUB 3 support by implementing
native navigation document (nav.xhtml) parsing with NCX fallback,
addressing issue Fixes: #143.

  * **What changes are included?**
- New `TocNavParser` for parsing EPUB 3 HTML5 navigation documents
(`<nav epub:type="toc">`)
- Detection of nav documents via `properties="nav"` attribute in OPF
manifest
- Fallback logic: try EPUB 3 nav first, fall back to NCX (EPUB 2) if
unavailable
- Graceful degradation: books without any TOC now load with a warning
instead of failing

  ## Additional Context

* The implementation follows the existing streaming XML parser pattern
using Expat to minimize RAM usage on the ESP32-C3
* EPUB 3 books that include both nav.xhtml and toc.ncx will prefer the
nav document (per EPUB 3 spec recommendation)
* No breaking changes - existing EPUB 2 books continue to work as before
* Tested on examples from
https://idpf.github.io/epub3-samples/30/samples.html
2026-01-03 19:10:35 +11:00
Maeve Andrews
5e9626eb2a
Add paragraph alignment setting (justify/left/center/right) (#191)
## Summary

* **What is the goal of this PR?** 

Add a new user setting for paragraph alignment, instead of hard-coding
full justification.

* **What changes are included?**

One new line in the settings screen, with 4 options
(justify/left/center/right). Default is justified since that's what it
was already. I personally only wanted to disable justification and use
"left", but I included the other options for completeness since they
were already supported.

## Additional Context

Tested on my X4 and looks as expected for each alignment.

Co-authored-by: Maeve Andrews <maeve@git.mail.maeveandrews.com>
2026-01-02 18:21:48 +11:00
Jonas Diemer
39080c0e51
Skip soft hyphens. (#195)
For now, let's skip the soft hyphens (later, we can treat them in the
layouter). See
https://github.com/daveallie/crosspoint-reader/discussions/17#discussioncomment-15378475
2026-01-02 17:54:46 +11:00
Dave Allie
6e9ba1006a
Use sane smaller data types for data in section.bin (#188)
Some checks are pending
CI / build (push) Waiting to run
## Summary

* Update EpdFontFamily::Style to be u8 instead of u32 (saving 3 bytes
per word)
* Update layout width/height to be u16 from int
* Update page element count to be u16 from u32
* Update text block element count to be u16 from u32
* Bumped section bin version to version 8
2025-12-31 13:11:36 +11:00
Dave Allie
52a0b5bbe9
Small cleanups from https://github.com/juicecultus/crosspoint-reader-x4 2025-12-30 23:19:08 +11:00
Dave Allie
3abcd0d05d
Redesign home screen (#166)
## Summary

* Redesigned home screen with big option to continue reading and
slightly nicer options to navigate to core sections
* Attempt to use the cached EPUB details (title, author) if they exist,
otherwise fall back to file name
* Adjusted button hints on home screen, removed Back option and changed
left/right to up/down

## Additional Context

* Core of this work comes from @ChandhokTannay in
1d36a86ef1
2025-12-30 23:18:10 +11:00
Jonas Diemer
03f0ce04cc
Feature: go to text/start reference in epub guide section at first start (#156)
This parses the guide section in the content.opf for text/start
references and jumps to this on first open of the book.

Currently, this behavior will be repeated in case the reader manually
jumps to Chapter 0 and then re-opens the book. IMO, this is an
acceptable edge case (for which I couldn't see a good fix other than to
drag a "first open" boolean around).

---------

Co-authored-by: Sam Davis <sam@sjd.co>
Co-authored-by: Dave Allie <dave@daveallie.com>
2025-12-30 23:02:46 +11:00
Dave Allie
be1b5bad21
Parse the author name from content.opf file (#165)
## Summary

* Parse the author name from content.opf file
  * Listed in the dc:creator tag within the metadata section
2025-12-30 22:15:44 +11:00
Dave Allie
9f31f80c80
Show previous title for unnamed spines (#158)
## Summary

* Show previous title for unnamed spines
* The spec is a little unclear, but there are plenty of cases where
chapters are split up in parts and should show the previous chapter's
title
* List TOC items instead of spine items in chapter select
* Bump `BOOK_CACHE_VERSION` to `2` to force regeneration of spine item's
TOC indexes
2025-12-30 18:52:42 +11:00