| DOCX | XLSX | PPTX |
|---|---|---|
| DOCX | XLSX | PPTX |
ტექნოლოგიურ სამყაროში საინტერესო სიახლეა: გამოქვეყნდა Silurus/ooxml, ბრაუზერზე დაფუძნებული მაყურებელი Office Open XML დოკუმენტებისთვის. ის საშუალებას იძლევა, Word, Excel და PowerPoint ფაილები პირდაპირ HTML Canvas-ზე ვიზუალურად ზუსტად აისახოს.
| 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-ის პარსერები, TypeScript-ის რენდერები და ტესტები — შეიქმნა Anthropic-ის ხელოვნური ინტელექტის, Claude-ის მიერ. დეველოპერი აღნიშნავს, რომ რეპოზიტორში ადამიანის მიერ დაწერილი არცერთი ხაზი არ არის.
| 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) | ✅ |
| 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) | ✅ |
ინსტრუმენტი იყენებს WebAssembly-ს, რაც უზრუნველყოფს სწრაფ მუშაობას. სისტემა თითოეულ ფორმატს აძლევს ე.წ. „headless“ ძრავას, რაც დეველოპერებს საშუალებას აძლევს, საკუთარი ინტერფეისი ააწყონ, ნაცვლად ჩაშენებული გადაწყვეტის გამოყენებისა. მაგალითად, შესაძლებელია სკროლინგის, თამბნელების ან სხვადასხვა პანელის მარტივად ინტეგრირება.
| 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) | ✅ |
პროექტის არქიტექტურა მოქნილია: რენდერინგი მიმდინარეობს მთავარ ნაკადში, რათა ტიპოგრაფიული სიზუსტე დაცული იყოს. ეს განსაკუთრებით მნიშვნელოვანია შრიფტების სწორად გამოსაჩენად, რაც ონლაინ დოკუმენტების შემთხვევაში ხშირად პრობლემატურია.
რაც შეეხება მათემატიკურ ფორმულებს, სისტემა იყენებს MathJax-ს. ის სრულად იზოლირებულია, არ საჭიროებს ქსელურ კავშირს და არ აგზავნის მოთხოვნებს მესამე მხარის სერვერებზე, რაც უზრუნველყოფს კონფიდენციალურობას.
უსაფრთხოების კუთხით, პროექტი იყენებს „Canvas-only“ მიდგომას. ეს ნიშნავს, რომ დოკუმენტი მხოლოდ იხატება ეკრანზე და არ ხდება მასში არსებული სკრიპტების ან აქტიური შიგთავსის შესრულება. ასევე, დანერგილია დაცვა ე.წ. „zip-bomb“-ის წინააღმდეგ, რაც ავტომატურად ზღუდავს ფაილების ზომას.
პროექტს თან ახლავს დამატებითი პაკეტებიც, მათ შორის VS Code-ის გაფართოება, რომელიც AI-აგენტებს საშუალებას აძლევს, პირდაპირ წაიკითხონ დოკუმენტების სტრუქტურა და მონაცემები. ეს ფუნქციონალი განსაკუთრებით სასარგებლოა ავტომატიზებული სამუშაო პროცესებისთვის.



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