תוכנת עימוד שולחנית מקצועית לעברית, רב-טקסט (מקראות גדולות וש"ס), צורת הדף חיה וקדם-דפוס
גרסה 0.33.0 • ליבת Native Rust • מעטפת Electron מוקשחת • דטרמיניזם מלא
TypesetOK (TOK) היא תוכנת עימוד שולחנית (Desktop Publishing — DTP) שנבנתה מן היסוד עבור טיפוגרפיה עברית מתקדמת, טקסט דו-כיווני (Bidi / RTL), עימוד רב-תזרימי מסונכרן ("צורת הדף" חיה, מקראות גדולות, ש"ס תלמודי, ספרי שו"ת ומחקר), והפקת קובצי דפוס תקניים (ISO 15930-1:2001 PDF/X-1a:2001) באופן דטרמיניסטי מקצה לקצה.
הפרויקט מאורגן כ-Monorepo המפריד באופן מוחלט בין ליבת העימוד והמסמך ב-Rust לבין שכבות התצוגה והאינטראקציה ב-TypeScript:
[UI / Story Editor / SpreadCanvas (TypeScript)]
│
▼ (JSON Document Snapshot / Incremental Edit)
[tok-cli (Rust Binary Bridge)]
│
├──► [tok-core] Canonical Document Model (TDM), B-Tree Rope, ULID, Hebrew Normalizer
├──► [tok-typeset] Unicode Bidi (UAX #9) + rustybuzz OpenType + Knuth-Plass + Cassowary + Co-Pagination
│
▼
[PageLayoutBox Geometry Tree (in DTP Points / pt)]
│
├──────────────────────────────────────────────────────────┐
▼ ▼
[Screen & Interaction Pipeline] [Native Pre-Press Pipeline]
- tok-ui: SpreadCanvas (Deterministic DOM Projection) - tok-pdf: Direct PDF/X-1a:2001 Generator
- tok-viewer: PageDomVirtualizer ([K-1, K, K+1] Window) (DeviceCMYK, Spot Colors, TrimBox/BleedBox,
- tok-canvas: CanvasInteractionOverlay (120fps Caret) Embedded Font Subsets & /ToUnicode CMap)
עיקרון הנדסי מחייב: הדפדפן (Chromium) אינו מחליט היכן נשברות שורות או היכן מתפצלים עמודים, והמערכת אינה משתמשת בספריות Polyfill חיצוניות בדפדפן (כגון
@vivliostyle/coreאוPaged.js). כל הגיאומטריה מחושבת ב-Rust (tok-typeset), מיוצאת כמבניPageLayoutBoxביחידותptמדויקות, ומוקרנת להיטל DOM קשיח (SpreadCanvas) או ישירות לקובץPDF/X-1a.
| חבילה (Crate) | תפקיד ואחריות מרכזית |
|---|---|
tok-core |
מודל המסמך הקנוני (TDM): עץ מסמך אי-מוטבילי, ropey B-Tree Rope לטקסטים ארוכים, מזהי ULID, אינדוקס שברירי (FractionalIndex), מחסנית טרנזקציות ו-Undo/Redo דלתא, מנוע גימטריה עברית (כולל טבלת טאבו: ט״ו, ט״ז, ע״ר, ער״ב, ער״ה, רח״צ, שי״ד, נט״ש, תשי״ד ותווי U+05F3/U+05F4), ושער נרמול קלט טיפוגרפי עברי קנוני ( |
tok-typeset |
מנוע העימוד והטיפוגרפיה: פירוק כיווניות unicode-bidi (UAX #9), עיצוב גופנים OpenType ב-Rust טהור (rustybuzz כולל GPOS mark/mkmk), אלגוריתם שבירת שורות גלובלי Knuth-Plass, מדרג יישור עברי תלת-שלבי (רווחי מילים מבוקרים Hit-Testing). |
tok-pdf |
מנוע קדם-דפוס נייטיבי (pdf-writer): הפקה ישירה של קובצי PDF/X-1a:2001 (ISO 15930-1) ומצבי PDF/X-4, מרחב צבע DeviceCMYK וצבעי ספוט (Separation), תיבות דפוס תקניות (MediaBox, CropBox, BleedBox, TrimBox), סימני חיתוך ורישום (Crop & Registration Marks), שיבוץ גופנים וטבלאות /ToUnicode לחיפוש והעתקת טקסט עברי, ומנוע בדיקות קדם-דפוס (Preflight). |
tok-storage |
מנוע אחסון כפול: סביבת עבודה חסינת-קריסות ב-SQLite WAL (rusqlite) + שמירה אטומית לקובץ חבילה .tok (ארכיב ZIP בדחיסת Zstandard הכולל manifest.json, document.json, styles.json ונכסים מאומתים בחתימת SHA-256). |
tok-plugin-host |
מנוע הרחבות ותוספים דטרמיניסטי: הרצת תוספי ליבה מבוססי טרנזקציות אטומיות תחת מגבלות משאבים (Fuel / Memory / Capabilities), כולל תוספים מובנים לניקוי רווחים כפולים, החלת סגנון דיבור המתחיל (ד"ה) ברש"י ותוספות, ואכיפת מקף עברי (U+05BE). |
tok-ipc |
ספריית פרוטוקול תקשורת בינארי (TOKB Binary Framing) להודעות פקודה ותגובה בין תהליכים. |
tok-cli |
בינארי ה-CLI הראשי של המערכת, המשמש הן להרצה באצווה (Headless Batch Processing & CI) והן כגשר העימוד והאחסון של מעטפת ה-Electron. |
| חבילה (Package) | תפקיד ואחריות מרכזית |
|---|---|
tok-electron |
תהליך ה-Main של Electron וגשר preload מוקשח (contextIsolation: true, nodeIntegration: false, sandbox: true), אימות סכמת IPC קפדני, חסימת ניווט חיצוני, וניהול קריאות תהליכי משנה אל tok-cli. |
tok-ui |
סביבת העבודה השולחנית המלאה: רכיב SpreadCanvas להקרנת PageLayoutBox להיטל DOM דטרמיניסטי, גשר העימוד (typesetBridge.ts), עורך תבניות רב-טקסט (צורת הדף / מקראות גדולות), מנוע תוספים מוקשח (PluginEngine), בדיקות קדם-דפוס חיות (Preflight), חיפוש והחלפה (כולל סינון ניקוד וטעמים), מפתח עניינים (TOC), ומנוע היסטוריית פקודות. |
tok-viewer |
מנהל הווירטואליזציה של עמודי התצוגה (PageDomVirtualizer): שומר ב-DOM חלון פעיל של 3 עמודים בלבד ([K-1, K, K+1]) ומייצג את שאר עמודי הספר כאלמנטי Spacer קלי-משקל. |
tok-canvas |
שכבת הכיסוי הגרפית השקופה (CanvasInteractionOverlay): ציור סמן דו-כיווני (Dual Caret / RTL Caret), תנועת סמן אופטימית מיידית (<16ms), בחירה ויזואלית לא-רציפה בטקסט מעורב, ובדיקת פגיעה מרחבית (Hit-Testing). |
tok-story-editor |
עורך סיפור רציף (Unpaginated Story Editor) לעריכת תוכן מהירה ללא תקורת עימוד רב-עמודי, עם סנכרון דו-כיווני מלא מול תצוגת העמודים. |
- מערכת הפעלה: Windows 10/11 (64-bit).
- קומפיילר Rust: גרסה יציבה עדכנית (
rustc/cargo) עם יעדx86_64-pc-windows-gnu.- הקובץ
.cargo/config.tomlבמאגר מוגדר מראש לשימוש בלינקר המהירrust-lldולתיקיית הידור מקומית (C:/Users/USER/AppData/Local/tok_target) למניעת בעיות נתיבים בעברית ב-Windows.
- הקובץ
- Node.js: גרסה
20.0.0ומעלה +npm.
# 1. התקנת תלויות ה-Node/TypeScript
npm install
# 2. בניית כל חבילות ה-Rust במאגר (כולל בינארי ה-CLI החיוני למעטפת השולחנית)
cargo build --workspace
cargo build --bin tok-cli
# 3. בדיקת תקינות הטיפוסים והידור חבילות ה-UI וה-Electron
npm run lint
npm run build
# 4. הפעלת תוכנת השולחן TypesetOK ב-Electron
npm startהערה חשובה לגבי איתור
tok-cli.exe: מעטפת ה-Electron (packages/tok-electron/src/main.ts) מחפשת את הקובץtok-cli.exeלפי הסדר הבא:
- משתנה הסביבה
TOK_CLI_PATH(אם הוגדר).- תיקיית היעד המוגדרת ב-
.cargo/config.toml(%LOCALAPPDATA%\tok_target\debug\tok-cli.exeאוrelease\tok-cli.exe).- תיקיית
target/debug/tok-cli.exeאוtarget/release/tok-cli.exeבשורש המאגר. לכן חובה להריץcargo build --bin tok-cliלפני הפעלתnpm start.
הבינארי tok-cli מאפשר הרצת כל פעולות הליבה ישירות משורת הפקודה או מצינורות CI/CD:
| תת-פקודה (Subcommand) | תחביר ופרמטרים | תיאור הפעולה |
|---|---|---|
typeset-document |
tok-cli typeset-document <input.json> [output.layout.json] |
עימוד מלא של מסמך JSON (כולל Knuth-Plass, Cassowary ו-Co-Pagination) והחזרת עץ PageLayoutBox מפורט ביחידות pt (כולל גליפים, שורות, מסגרות, הערות שוליים ודוח Preflight). |
incremental-typeset |
tok-cli incremental-typeset <input.json> <dirty_paragraph_index> [output.json] |
עימוד אינקרמנטלי מבוסס התכנסות (Convergence Paginator) החל מהפסקה שהשתנתה ועד לנקודת ההתכנסות. |
diagnose-recompute |
tok-cli diagnose-recompute <base.json> <edited.json> <dirty_idx> |
השוואה ואבחון של מספר העמודים שחושבו מחדש לעומת עמודים שנשלפו מהמטמון בעריכה אינקרמנטלית. |
render-pdf |
tok-cli render-pdf <input.json|.tok> <output.pdf> |
הפקת קובץ דפוס תקני PDF/X-1a:2001 ישירות מהמסמך (כולל CMYK, תיבות דפוס ושיבוץ גופנים). |
render-html |
tok-cli render-html <input.json|.tok> <output.html> |
הפקת קובץ HTML עצמאי בעל עמודים קבועים מראש (Pre-paginated HTML/CSS) לתצוגה ובדיקה. |
save-package |
tok-cli save-package <input.json> <output.tok> |
אריזה ושמירה אטומית של מסמך JSON לפורמט החבילה .tok (ZIP + Zstandard + SHA-256 manifest). |
open-package |
tok-cli open-package <input.tok> [output.json] |
פתיחת קובץ .tok, אימות שלמות החבילה והנכסים, ושחזור ה-JSON הקנוני של המסמך. |
inspect-package |
tok-cli inspect-package <input.tok> |
בדיקת תקינות ארכיב .tok והדפסת סיכום מטא-דאטה (כותרת, מספר מדורים, פסקאות וגרסת סכמה). |
run-plugins |
tok-cli run-plugins <input.json> <plugin_id[,plugin_id...]> [output.json] |
הרצת תוספי ליבה דטרמיניסטיים ב-Sandbox (builtin.strip-double-spaces, builtin.apply-dibbur-hamatchil, builtin.enforce-hebrew-maqaf) על המסמך. |
verify-determinism |
tok-cli verify-determinism <input.json> [iterations] |
הרצת עימוד והפקת PDF/HTML מספר רב של פעמים ואימות זהות מוחלטת ברמת הבייט (SHA-256 Bit-for-Bit Determinism). |
benchmark-typeset |
tok-cli benchmark-typeset <paragraphs_count> |
בדיקת עומס וביצועים על מסמך סינתטי גדול והדפסת מדדי זמן עימוד ומהירות לעמוד. |
# עימוד קובץ דוגמה של מקראות גדולות והפקת PDF/X-1a
cargo run --bin tok-cli -- typeset-document examples/mikraot_gedolot_sample.json out_layout.json
cargo run --bin tok-cli -- render-pdf examples/mikraot_gedolot_sample.json out_print.pdf
cargo run --bin tok-cli -- verify-determinism examples/mikraot_gedolot_sample.json 5הפרויקט כולל מערך בדיקות רב-שכבתי המאמת את ליבת ה-Rust, את חבילות ה-TypeScript ואת האינטגרציה מקצה לקצה:
# 1. הרצת כל בדיקות היחידה והאינטגרציה של ליבת ה-Rust (7 Crates)
cargo test --workspace
# 2. בדיקת קומפילציה וטיפוסים קפדנית בכל 5 חבילות ה-TypeScript
npm run lint
# 3. הרצת חבילת הבדיקות של ה-Frontend, הגימטריה, הווירטואליזציה, ה-Canvas והאבטחה (95 בדיקות)
npm test
# 4. הרצת סוויטת הבדיקות מקצה לקצה (4-Tier E2E Verification Suite)
node test/run_e2e_suite.mjsבהתאם למשמעת ההנדסית של הפרויקט (אפס טענות שווא ואפס מצגי דמה), להלן המגבלות הידועות בגרסה הנוכחית:
- שיבוץ תמונות רסטר (Raster Image Placement): מנוע הפריסה (
tok-typeset) ומחולל ה-PDF (tok-pdf) תומכים כיום במסגרות טקסט, עיטורים וקטוריים, קווי הפרדה וניהול נכסים בחבילת.tok, אך טרם מממשים פריסת תמונות ביטמאפ (TIFF/JPEG/PNG) משובצות בתוך זרימת הטקסט. - תקשורת תהליכים (
tok-ipcלעומתtok-cli): החבילהcrates/tok-ipcמממשת את פרוטוקול המסגרות הבינארי (TOKB) המיועד למצב שרת רקע מתמיד (Persistent Daemon Mode). בגרסה הנוכחית, תהליך ה-Main של Electron מתקשר עם ליבת ה-Rust באמצעות הפעלה דטרמיניסטית ומבוקרת של תהליך המשנהtok-cli. - ייצוא PDF/X-4 וניהול פרופילי ICC חיצוניים: מחולל ה-PDF מפיק קובצי
PDF/X-1a:2001ו-PDF/X-4עם פקודות צבעDeviceCMYKוצבעיSeparation(Spot Colors) אמיתיים ומילוןOutputIntentמובנה (ISO Coated v2 / Fogra39), ללא קישור דינמי לספריית C חיצונית דוגמתLittleCMS. - גרסת Electron במאגר (
electron@29.4.6): המעטפת השולחנית מוקשחת במלואה (contextIsolation: true,nodeIntegration: false,sandbox: true, CSP קפדני וחסימת ניווט), אך שדרוג לגרסת Electron ראשית חדשה יותר (v32+) דורש הורדת בינארי Electron בסביבה מקוונת.
- דטרמיניזם מוחלט: כל שינוי ב-
tok-core,tok-typesetאוtok-pdfחייב לעבור בהצלחה אתtok-cli verify-determinism. אסור להשתמש ב-HashMapבעל סדר אקראי בפלטים משפיעי-פריסה (יש להשתמש ב-BTreeMapאו במיון מפורש). - אפס
unsafeב-Rust: חל איסור על הוספת בלוקים שלunsafeבחבילות הליבה. - אפס כפתורי דמה ב-UI: אין להוסיף כפתורים או תפריטים שמציגים רק הודעת
Toastללא פעולה אמיתית המשנה את מודל המסמך, את התצוגה או את הקובץ המיוצא. - בדיקות אמת (No Mock Re-implementations): על כל בדיקה ב-
test/frontend.test.mjsלייבא ולהריץ את הקוד האמיתי מתוךpackages/**אוtok-cli, ולא לממש פונקציות חיקוי מקומיות בתוך קובץ הבדיקה.
- קוד המקור של TypesetOK (TOK) מופץ תחת רישיון TypesetOK Non-Commercial Copyleft License v1.1 (
TOK-NCCL v1.1). - זהו רישיון Source-Available לשימוש לא-מסחרי בלבד (אינו רישיון Open Source מאושר OSI). שימוש אישי, אקדמי, מחקרי, חינוכי וקהילתי ללא מטרות רווח מותר בכפוף לתנאי הרישיון (ייחוס ו-Copyleft על נגזרות). כל שימוש מסחרי מחייב הסכם רישוי מסחרי נפרד בכתב.
- לנוסח הרישיון המלא ראו:
LICENSE.md. - לפירוט מלא של כלל ספריות הצד-השלישי (Rust ו-Node.js), הגופנים המצורפים (
SIL Open Font License 1.1), וניתוח התאימות המשפטית ראו:THIRD_PARTY_NOTICES.md.
