summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorTobias Schmitz <tobiasschmitz2001@gmail.com>2025-07-07 10:52:20 +0200
committerTobias Schmitz <tobiasschmitz2001@gmail.com>2025-07-07 10:52:20 +0200
commit58c6729df40c303e429986e312472c1999c3dfbd (patch)
tree6b8d2ae3bbe5fc90125becff90d69e964dec5472 /crates
parent157e0fa1427d604efb0754da9237f0abcf35c479 (diff)
feat: generate human readable table cell IDs
in almost all real-world cases these IDs require less memory than the binary IDs used before, and they are also require less storage in PDF files, since binary data is encoded in hex escape sequences, taking up 4 bytes per byte of data.
Diffstat (limited to 'crates')
-rw-r--r--crates/typst-pdf/Cargo.toml1
-rw-r--r--crates/typst-pdf/src/tags/table.rs10
2 files changed, 6 insertions, 5 deletions
diff --git a/crates/typst-pdf/Cargo.toml b/crates/typst-pdf/Cargo.toml
index 5745d053..b96a2802 100644
--- a/crates/typst-pdf/Cargo.toml
+++ b/crates/typst-pdf/Cargo.toml
@@ -27,6 +27,7 @@ infer = { workspace = true }
krilla = { workspace = true }
krilla-svg = { workspace = true }
serde = { workspace = true }
+smallvec = { workspace = true }
[lints]
workspace = true
diff --git a/crates/typst-pdf/src/tags/table.rs b/crates/typst-pdf/src/tags/table.rs
index eb13a139..c27f95a1 100644
--- a/crates/typst-pdf/src/tags/table.rs
+++ b/crates/typst-pdf/src/tags/table.rs
@@ -1,8 +1,10 @@
+use std::io::Write as _;
use std::num::{NonZeroU32, NonZeroUsize};
use krilla::tagging::{
TableCellSpan, TableDataCell, TableHeaderCell, TagBuilder, TagId, TagIdRefs, TagKind,
};
+use smallvec::SmallVec;
use typst_library::foundations::{Packed, Smart, StyleChain};
use typst_library::model::{TableCell, TableCellKind, TableElem, TableHeaderScope};
@@ -313,11 +315,9 @@ fn should_group_rows(a: TableCellKind, b: TableCellKind) -> bool {
}
fn table_cell_id(table_id: TableId, x: u32, y: u32) -> TagId {
- let mut bytes = [0; 12];
- bytes[0..4].copy_from_slice(&table_id.0.to_ne_bytes());
- bytes[4..8].copy_from_slice(&x.to_ne_bytes());
- bytes[8..12].copy_from_slice(&y.to_ne_bytes());
- TagId::from_slice(&bytes)
+ let mut buf = SmallVec::new();
+ _ = write!(&mut buf, "{}x{x}y{y}", table_id.0);
+ TagId::from_smallvec(buf)
}
fn table_header_scope(scope: TableHeaderScope) -> krilla::tagging::TableHeaderScope {