Skip to content

1.3.0.35-dev10-cpr-vcodex-steroids

Choose a tag to compare

@marcoand75 marcoand75 released this 22 Jul 14:04
· 432 commits to master since this release

Contents

  1. Clipping (Highlights) System — full text selection, highlight, persistence, export
  2. Bookmarks — Absolute Word Index + Page Highlight — layout-independent, v4 format, highlight rendering
  3. Bookmarks — Text-Match for v3 — old bookmarks survive layout changes via snippet matching
  4. Guide Dots — configurable bullet markers between words
  5. Clippings App — standalone app for browsing clips per book
  6. Configurable Long-Press — side and front buttons for bookmarks/clippings
  7. EPUB Render Modes — Default/Balanced/Light with cache isolation
  8. Section Cache v44 — format bump, magic header, per-word metadata
  9. Reader Menu Icons Fix — garbled 32→24px migration, 4 blank icons regenerated
  10. Italian Translation Overhaul — 924 keys aligned, new + corrected translations
  11. Fixes — crash, positioning, persistence, UI visibility bugs

✂️ Clipping (Highlights) System

A complete highlight system ported from the CrossInk fork. Select and save text passages while reading; clippings persist across sessions and survive all layout changes.

Core features

  • Create a clipping: Reader menu → "Create Clipping". Navigate with arrow keys, press Confirm to mark start, move cursor, press Confirm again to save.
  • Selection UI: Cursor word appears inverted (black bg, white text) — same style as dictionary word lookup. Selected range shows light-gray dither background with fully readable text. Descender letters (g, q, y, p, j) are fully covered by the highlight rectangle.
  • View & manage: "View Clippings" menu entry shows a list of all saved clippings with text snippets. Individual clippings can be deleted. Selecting a clipping jumps directly to its page.
  • Persistent: Saved to /.crosspoint/clippings/epub_<hash>.bin. Close and reopen the book — clippings are still highlighted.
  • Export: Every clipping is automatically appended to /My Clippings.txt in Kindle-style format (title, author, page, chapter, text).

Layout-independent (v2 absolute word index)

  • Clippings now store absoluteWordStart — the word's position from the start of the chapter, invariant to font family, font size, alignment, and Guide Dot spacing.
  • When a clipping's stored page count doesn't match the current layout, the highlight automatically resolves to the correct position via cumulative word offset arrays built at section load time.
  • Old v1 clippings remain backward-compatible: stored page/word indices are used when the layout is unchanged; a ≥3-token text-matching fallback handles layout changes.
  • Jump from list: selecting a clipping from the View Clippings list resolves the correct page even after layout changes, using the absolute word index.

Integration

  • Clipping icon in the reader menu (paperclip SVG, 24×24).
  • Clipping list icon (document-with-clip SVG, 24×24).
  • Fully anti-aliasing compatible.
  • Cache directory /.crosspoint/clippings/ created on first save.

🔖 Bookmarks — Absolute Word Index + Page Highlight

BookmarkStore v4

  • New field absoluteWordStart (uint32_t) — first word on the bookmarked page as a position from chapter start. Invariant to all layout changes.
  • v4 bookmarks: highlight the exact anchor word with a light-gray dither background on every page render — no icon clutter.
  • v3 (old) bookmarks: text-match the bookmark snippet (≥3 consecutive tokens) on the current page, skipping leading single-char tokens (quotes, punctuation), and highlight the matched word(s). V3 bookmarks without snippets fall back to the stored page number.
  • Jump: selecting a bookmark from the list resolves the correct page via absolute word index or snippet text-matching across the section.

Reader menu icons fix

  • All 32×32 icons in the reader menu replaced with proper 24×24 native arrays (the old 32×32 data was being read with the wrong stride, producing garbled output).
  • 4 blank icons regenerated from custom SVGs: QR code, Go to %, Screenshot, Delete cache.
  • 3 new SVG-sourced icons: Create Clipping, View Clippings, bookmark marker.

🟢 Guide Dots

A reading mode that inserts a visible bullet () between words, with configurable minimum spacing.

Features

  • Toggle: Quick Settings, Settings → Reading, and Web portal all expose the Guide Dots toggle.
  • Dots Spacing: Standard (16px minimum gap) and Large (32px). Changing the spacing invalidates the section cache and rebuilds with new line breaks.
  • Layout integration: computeNaturalGaps() precomputes expanded gap widths used consistently by the DP line-breaker, X-position loop, and justification calculation — zero text overflow.
  • Rendering: bullet (U+2022) drawn centered in every gap between non-attached words, using absolute X positions for pixel-perfect placement.
  • Cache-busting: guideDotMinGap stored in section.bin v44 header. Toggling Guide Dots or changing spacing triggers automatic cache invalidation and rebuild.

📱 Clippings App (standalone)

A new standalone app for browsing saved clippings across all books, identical in structure to the Bookmarks app.

  • Book list: scans Reading Stats, Recent Books, and Favorites for books with saved clippings.
  • Open: confirm opens the in-reader ClippingsActivity for the selected book. Individual clippings can be deleted or jumped to.
  • Delete all: long-hold Confirm triggers a delete-all-clippings confirmation dialog.
  • Registered as ShortcutId::Clippings in the app registry. Visible in Home and Apps Hub; configurable location, order, and visibility via Settings.
  • Icon: 32×32 paperclip icon (ClipIcon32) generated from SVG, mapped to UIIcon::File in the LyraMarcoand75 theme.
  • Home layout: kVisibleMenuSlots increased from 5 to 6 to accommodate the new app alongside existing shortcuts.

🕹️ Configurable Long-Press (Side + Front Buttons)

Long-press side buttons (renamed + expanded)

  • Label: "Long-press button behavior" → "Long-press side buttons".
  • Two new options: Bookmarks (UP=toggle bookmark, DOWN=View Bookmarks) and Clippings (UP=enter clipping mode, DOWN=View Clippings).
  • Original Chapter Skip and Orientation Change options unchanged.

Long-press front buttons (new setting)

  • New setting "Long-press front buttons" with options Off / Bookmarks / Clippings.
  • Left long-press toggles bookmark/enters clipping; Right long-press opens the bookmark/clipping list.
  • Detection: ReaderUtils::PageTurnResult now carries fromFrontButton flag so the reader distinguishes front-button holds from side-button holds.

Settings UI

  • Settings → Controls, Settings app, and Web portal expose both long-press selects with full option lists.
  • frontLongPressBehavior persisted via JsonSettingsIO.

📐 EPUB Render Modes (Default / Balanced / Light)

  • New setting epubRenderMode in CrossPointSettings with 3 modes: Default, Balanced, Light.
  • Quick Settings, Settings → Reading, and Web portal all expose the toggle.
  • Section cache suffix: each mode uses its own cache file (e.g. sections/1_balanced.bin), so caches never invalidate each other when switching modes.
  • Fallback chain: if building a section fails for the selected mode, the reader falls back: Default → Balanced → Light; Balanced → Light; Light → only Light.
  • Silent next-chapter indexing uses the current render mode cache suffix.

🌐 Section Cache v44 (B1)

  • Bumped SECTION_FILE_VERSION from 35 to 44.
  • Added SECTION_CACHE_MAGIC (0x535843FF) for format detection.
  • New cache-busting fields: bionicReadingEnabled, guideReadingEnabled, renderMode.
  • Added liLutOffset (uint32_t) for future KOReader list-item lookups.
  • All accessor functions use a single HEADER_FIELDS_SIZE constant (27 bytes) to eliminate duplicated/inconsistent offset calculations — fixes the infinite rebuild loop caused by seeking past pageCount with the wrong stride.
  • All existing v35 caches invalidate on first boot (magic mismatch → clearCache → rebuild).

🇮🇹 Italian Translation Overhaul

  • 924 keys now fully aligned with English.
  • 84 new translations added: Clippings, Guide Dots, EPUB Render Mode, Dots Spacing, ScreenSaver (80 keys), long-press options, Library app descriptions, Lyra Marcoand75 theme name.
  • 14 existing translations corrected: "> 30 metri" → "> 30 min", "Invisibile" → "Non visto", "Disattivato" → "OFF", "Manual" → "Manuale", "Crisp" → "Nitido", "Add" → "Aggiungi".
  • 15 long strings shortened to fit on-screen without truncation (e.g. "Non c'è nessuna nota a piè di pagina su questa pagina" → "Nessuna nota in questa pagina").