| DOCX | XLSX | PPTX |
|---|---|---|
| DOCX | XLSX | PPTX |
ტექნოლოგიურმა სამყარომ ახალი, უჩვეულო პროექტი გაიცნო. Office-open-xml-viewer არის ბრაუზერზე დაფუძნებული ხელსაწყო, რომელიც Microsoft Office-ის სტანდარტულ დოკუმენტებს — DOCX, XLSX და PPTX ფორმატებს — პირდაპირ HTML Canvas-ზე რენდერავს. რაც ყველაზე საინტერესოა, კოდური ბაზა სრულად ხელოვნური ინტელექტის, კერძოდ, Claude-ის დახმარებით შეიქმნა.
პროექტის ავტორი აღნიშნავს, რომ რეპოზიტორში არ მოიძებნება ადამიანის მიერ დაწერილი არცერთი ხაზი. ყველაფერი — Rust-ის პარსერებიდან დაწყებული, TypeScript-ის რენდერერებითა და ტესტებით დასრულებული — ხელოვნური ინტელექტის მიერ, იტერაციული მოთხოვნების შედეგად არის გენერირებული.
| File | Role |
|---|---|
| packages/docx/parser/src/lib.rs | Rust WASM parser — DOCX ZIP → Document JSON |
| packages/xlsx/parser/src/lib.rs | Rust WASM parser — XLSX ZIP → Workbook JSON |
| packages/pptx/parser/src/lib.rs | Rust WASM parser — PPTX ZIP → Presentation JSON |
| packages/docx/src/renderer.ts | Canvas 2D rendering engine with text layout (main thread) |
| packages/xlsx/src/renderer.ts | Canvas 2D rendering engine with virtual scroll (main thread) |
| packages/pptx/src/renderer.ts | Canvas 2D rendering engine (main thread) |
| packages/*/src/worker.ts | Web Worker: WASM init and parsing only (one per format) |
| packages/*/src/viewer.ts | Public Viewer API — canvas lifecycle, navigation |
| packages/core/src/index.ts | Cross-format primitives — chart renderer, shape helpers, autoResize, shared types |
ტექნიკური შესრულება და ფუნქციონალი
სისტემა იყენებს Rust-ში დაწერილ პარსერებს, რომლებიც WebAssembly-შია კომპილირებული. რენდერინგისთვის გამოყენებულია Canvas 2D API. მნიშვნელოვანია, რომ თითოეულ ფორმატს აქვს ე.წ. „headless“ ძრავა, რაც დეველოპერებს საშუალებას აძლევს, საკუთარი ინტერფეისი ააწყონ და არ იყვნენ შეზღუდულნი ჩაშენებული ვიზუალიზატორით.
| Category | Feature | Status |
|---|---|---|
| Document | Page rendering | ✅ |
| Page size and margins | ✅ | |
| Headers / footers (default / first / even) | ✅ | |
| Section breaks (continuous / nextPage / oddPage / evenPage) | ✅ | |
| Text | Paragraphs | ✅ |
| Bold, italic, underline, strikethrough | ✅ | |
| Font family, size, color | ✅ | |
| Hyperlinks | ✅ | |
| Superscript / subscript (w:vertAlign) | ✅ | |
| Ruby annotations / furigana (w:ruby) | ✅ | |
| Formatting | Paragraph alignment (left/center/right/justify) | ✅ |
| Line spacing (auto / atLeast / exact) | ✅ | |
| Line grid (w:docGrid, §17.6.5) | ✅ | |
| Margin collapsing between paragraphs | ✅ | |
| Indents and tab stops | ✅ | |
| Lists (bullet and numbered) | ✅ | |
| Paragraph styles (Heading 1–9, Normal, custom) | ✅ | |
| Table style w:pPr cascade (§17.7.6) | ✅ | |
| Table style borders / shading / banding (tblStylePr, cnfStyle, §17.4.7) | ✅ | |
| Table of contents (TOC field) — dot leaders, right-aligned page numbers | ✅ | |
| keepNext / keepLines / widowControl | ✅ | |
| Elements | Tables (with borders, fills, merges, banding, alignment) | ✅ |
| Math equations (OMML m:oMath / m:oMathPara, rendered via MathJax — opt-in @silurus/ooxml/math) | ✅ | |
| Images (inline and anchored, with text wrap) | ✅ | |
| Text boxes / drawing shapes | ✅ | |
| WMF / EMF metafile images (legacy vector) | ❌ Not planned | |
| Advanced | Footnote / endnote reference markers | ✅ |
| Track changes (w:ins / w:del — author-coloured underline / strikethrough) | ✅ | |
| Comments / footnote bodies (parsed, not yet rendered inline) | ⚠️ | |
| Mail merge fields | ❌ Not planned | |
| Interaction | Text selection (transparent overlay, native copy) | ✅ |
პროექტი ორიენტირებულია ეფექტურობაზე. მაგალითად, მათემატიკური ფორმულების რენდერირებისთვის გამოიყენება MathJax, თუმცა ეს ფუნქცია ოპციონურია. თუ თქვენს დოკუმენტში ფორმულები არ არის, ბრაუზერი არ ჩატვირთავს დამატებით 3 მეგაბაიტს, რაც აპლიკაციის სისწრაფეს ზრდის.
| Category | Feature | Status |
|---|---|---|
| Workbook | Multiple sheets, sheet names | ✅ |
| Sheet tab colors ( — theme / tint / indexed / rgb) | ✅ | |
| Cells | Text, number, boolean, error values | ✅ |
| Formula results (from cached ) | ✅ | |
| Dates (ECMA-376 date format codes) | ✅ | |
| Rich text (per-run formatting) | ✅ | |
| Formatting | Bold, italic, underline (single / double / singleAccounting / doubleAccounting), strikethrough | ✅ |
| Superscript / subscript (vertAlign) | ✅ | |
| Font family, size, color | ✅ | |
| Cell background color (solid + gradient) | ✅ | |
| Pattern fills (gray125 / gray0625 / lightGray / mediumGray / darkGray and the 12 light* / dark* directional hatches) | ✅ | |
| Borders (thin, medium, thick, hair, double, dashed, dotted, dashDotDot, …) | ✅ | |
| Diagonal borders (diagonalUp / diagonalDown, single + double) | ✅ | |
| Horizontal / vertical alignment | ✅ | |
| Text wrapping | ✅ | |
| Number formats (0.00, %, #,##0, custom date/time) | ✅ | |
| Structure | Merged cells | ✅ |
| Frozen panes | ✅ | |
| Row / column sizing (custom widths and heights) | ✅ | |
| Hidden rows / columns | ✅ | |
| Elements | Images () | ✅ |
| Drawing shapes / text boxes (xdr:sp, xdr:txBody) | ✅ | |
| Charts (bar, line, area, radar, scatter / bubble) | ✅ | |
| Chart markers (circle / square / diamond / triangle / x / plus / star / dot / dash, per-point overrides) | ✅ | |
| Chart data labels ( per-point with CELLRANGE / VALUE / SERIESNAME / CATEGORYNAME field references, position l/r/t/b/ctr/outEnd) | ✅ | |
| Chart error bars ( X/Y direction, cust / fixedVal / stdErr / stdDev / percentage, dashed/styled lines) | ✅ | |
| Chart manual layout ( and ) | ✅ | |
| Sparklines (x14:sparklineGroup — line / column / win-loss, with markers and high/low/first/last/negative highlights) | ✅ | |
| Advanced | Conditional formatting (cellIs, colorScale, dataBar, iconSet, top10, aboveAverage) | ✅ |
| Slicers (static, Office 2010 extension) | ✅ | |
| Pivot tables | ❌ Not planned | |
| Data validation / comments | ❌ Not planned | |
| Interaction | Cell selection (single / range / row / column / all) | ✅ |
| Excel-style row / column header highlight on selection | ✅ | |
| Shift+click to extend, Ctrl+C to copy as TSV | ✅ | |
| Text selection inside cells (transparent overlay) | ✅ | |
| onSelectionChange callback, getCellAt(x, y) API | ✅ | |
| Zoom slider (Excel-style, right of the tab bar, 10–400% with 100% centered; showZoomSlider option) | ✅ |
უსაფრთხოება და პრივატულობა
| Category | Feature | Status |
|---|---|---|
| Slides | Slide rendering | ✅ |
| Slide layout / master inheritance | ✅ | |
| Slide size (custom dimensions) | ✅ | |
| Slide background (solid, gradient, image) | ✅ | |
| Slide numbers | ✅ | |
| Notes pages | ❌ | |
| Animations / transitions | ❌ Not planned | |
| Element types | Shapes (sp) | ✅ |
| Pictures (pic) | ✅ | |
| Groups (grpSp) with nested transforms | ✅ | |
| Connectors (cxnSp) | ✅ | |
| Tables (tbl in graphicFrame) | ✅ | |
| Charts (bar, line, area, radar, waterfall) | ✅ | |
| Charts (pie, doughnut) | ✅ | |
| Charts (scatter — scatterStyle marker / line / smooth variants) | ✅ | |
| Charts (bubble — bubbleSize per-point area scaling) | ✅ | |
| SmartArt | ❌ | |
| OLE objects | ❌ | |
| Video / audio (poster + interactive playback) | ✅ | |
| Ink / handwriting (p:contentPart, raster fallback) | ✅ | |
| Shape geometry | 130+ preset shapes (prstGeom) | ✅ |
| Custom geometry (custGeom) on shapes and pictures (clipping) | ✅ | |
| Rotation and flip (flipH / flipV) | ✅ | |
| 3D preset shapes | ❌ | |
| Fills | Solid fill (solidFill) | ✅ |
| Linear / radial gradient (gradFill) | ✅ | |
| No fill (noFill) | ✅ | |
| Pattern fill (pattFill) — 30 preset bitmaps incl. pct5–pct90 / horz / vert / cross / diag / grid / brick / check / trellis | ✅ | |
| Image fill on shapes (blipFill in sp) | ✅ | |
| Strokes | Solid line color and width | ✅ |
| Dash / dot styles | ✅ | |
| Arrow heads (headEnd / tailEnd) | ✅ | |
| Compound / double lines (`<a:ln cmpd="dbl | thinThick | |
| Shape effects | Drop shadow (outerShdw) | ✅ |
| Glow (glow — radius + colour) | ✅ | |
| Inner shadow (innerShdw — parsed; rendering follow-up) | ⚠️ | |
| Soft edge (softEdge — parsed; rendering follow-up) | ⚠️ | |
| Reflection (reflection — parsed; rendering follow-up) | ⚠️ | |
| Bevel / 3D extrusion | ❌ | |
| Text — characters | Bold, italic, strikethrough (incl. dblStrike) | ✅ |
| Underline styles (sng / dbl / dotted / dash / dashLong / dotDash / dotDotDash / wavy / wavyDbl and *Heavy variants) | ✅ | |
| Per-run underline colour (uFill / uFillTx) | ✅ | |
| Font family, size, color | ✅ | |
| East Asian font (rPr > a:ea — separate typeface for CJK glyphs) | ✅ | |
| Caps transform (all / small) | ✅ | |
| Letter spacing (spc) | ✅ | |
| Superscript / subscript | ✅ | |
| Hyperlinks (hlinkClick — theme hlink colour + auto underline) | ✅ | |
| Text shadow (rPr > effectLst > outerShdw) | ✅ | |
| Text outline (rPr > a:ln) | ✅ | |
| Math equations (OMML m:oMath / m:oMathPara, incl. a14:m / mc:AlternateContent; STIX Two Math via MathJax — opt-in @silurus/ooxml/math) | ✅ | |
| Text — paragraphs | Horizontal alignment (left / center / right / justify) | ✅ |
| Vertical anchor (top / center / bottom) | ✅ | |
| Line spacing (spcPct, spcPts) | ✅ | |
| Space before / after paragraph | ✅ | |
| Bullet points (character and auto-numbered) | ✅ | |
| Tab stops | ✅ | |
| Indent / margin | ✅ | |
| Vertical text (bodyPr@vert — vert / vert270 / eaVert) | ✅ | |
| Right-to-left paragraph (pPr@rtl — Arabic / Hebrew default alignment + browser bidi) | ✅ | |
| Text — body | Text padding (insets) | ✅ |
| normAutoFit (shrink to fit) | ✅ | |
| spAutoFit (expand box; suppresses wrap when text fits in one line) | ✅ | |
| Word wrap / no wrap | ✅ | |
| Multi-column text body (numCol / spcCol — balanced flow) | ✅ | |
| Theme object-default inheritance ( bodyPr fallback) | ✅ | |
| Tables | Cells, rows, columns | ✅ |
| Cell merges (horizontal / vertical) | ✅ | |
| Cell borders | ✅ | |
| Cell fills (solid / gradient) | ✅ | |
| Cell diagonal lines (lnTlToBr / lnBlToTr) | ✅ | |
| Table theme styles (74 built-in PowerPoint presets) | ✅ | |
| Theme | Scheme colors (dk1/lt1/accent1–6) | ✅ |
| Font scheme (+mj-lt, +mn-lt) | ✅ | |
| lumMod / lumOff / alpha transforms | ✅ | |
| Interaction | Text selection (transparent overlay, native copy) | ✅ |
უსაფრთხოების კუთხით, შემქმნელებმა აქცენტი Canvas-მხოლოდ რენდერინგზე გააკეთეს. ეს ნიშნავს, რომ დოკუმენტები მხოლოდ იხატება ეკრანზე და არ ხდება მათში არსებული სკრიპტების ან სხვა აქტიური შიგთავსის შესრულება. გარდა ამისა, დაცულია zip-ბომბებისგან დაცვის მექანიზმი, რაც აპლიკაციას უფრო მდგრადს ხდის.
პროექტი ასევე მოიცავს დამატებით პაკეტებს, მათ შორის Markdown-ში კონვერტაციის შესაძლებლობას და VS Code-ის გაფართოებას. ეს უკანასკნელი საშუალებას აძლევს AI-აგენტებს, როგორიცაა Claude ან Copilot, პირდაპირ წაიკითხონ Office-ის დოკუმენტები სპეციალური ხელსაწყოების მეშვეობით.
მომავლის გეგმები
ამჟამად ტექსტის შერჩევა ხორციელდება გამჭვირვალე DOM ფენის გამოყენებით, რომელიც Canvas-ის თავზეა განთავსებული. გუნდი გეგმავს გადასვლას Canvas-ის ახალ drawElement API-ზე, როგორც კი ის ყველა ბრაუზერში გახდება სტანდარტული. ეს ნაბიჯი სრულად გააუქმებს დუბლირებას და გაამარტივებს მონაცემთა დამუშავების პროცესს.



დისკუსია
0 კომენტარი
ჯერ კომენტარი არ არის — იყავი პირველი.