Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
83dd640
First pass at adding formatting
ddimaria Jul 23, 2025
279be04
Finish style parsing
ddimaria Jul 24, 2025
e333e81
Update style docs
ddimaria Jul 24, 2025
823141d
Capture columns widths and row heights
ddimaria Jul 29, 2025
6b55eb2
Fix border color detection
ddimaria Jul 29, 2025
0446ec7
Test borders
ddimaria Jul 29, 2025
be1d7bc
Improve color parsing
ddimaria Jul 31, 2025
38ac0af
Improve theme parsing
ddimaria Jul 31, 2025
ccd3c3a
Revert
ddimaria Jul 31, 2025
5622375
Implement indexed colors
ddimaria Jul 31, 2025
0fdc017
Implement theme color parsing
ddimaria Jul 31, 2025
968b210
Revert "Implement theme color parsing"
ddimaria Jul 31, 2025
ac3c438
Second attempt at theme colors
ddimaria Jul 31, 2025
56d0947
Merge remote-tracking branch 'upstream/master'
ddimaria Oct 21, 2025
fcc3dd6
Fix clippy lints and broken tests
ddimaria Oct 21, 2025
f7a7716
Remove _example from style and layout examples
ddimaria Oct 21, 2025
b9aa582
Default to style ID 0 when not present
ddimaria Oct 21, 2025
15fb7b2
Remove set_style and remove_style functions
ddimaria Oct 21, 2025
36b1b5e
Remove disperate test_color_fix and test_indexed_colors files and add…
ddimaria Oct 21, 2025
54fe1ad
Merge upstream/master into fork
ddimaria Jan 27, 2026
e3c5c4a
Fix shared formula handling and chart worksheet detection
ddimaria Jan 27, 2026
8f37811
Baselie benchmark using 1M cells of styles
ddimaria Jan 27, 2026
6a46683
Implement RLE for styles
ddimaria Jan 27, 2026
96abd18
Address PR comments
ddimaria Jan 28, 2026
084d73b
Cleanup
ddimaria Jan 28, 2026
8ab15b1
Implement RichText
ddimaria Jan 30, 2026
3f8ff1e
Merge PR #538 (styles support) from ddimaria into v0.33.0
wolfiesch Feb 14, 2026
6731735
feat: rename to calamine-styles for crates.io publication
wolfiesch Feb 16, 2026
4445a1d
fix: honor the declared MSRV and canonical repository
wolfiesch Aug 31, 2026
1835350
ci: run every toolchain and validate the package
wolfiesch Aug 31, 2026
904a6e5
fix: preserve the upstream calamine crate path
wolfiesch Aug 31, 2026
42de49c
docs: define the fork compatibility contract
wolfiesch Aug 31, 2026
f440c06
fix: render rich-text cells in the CSV example
wolfiesch Aug 31, 2026
838449e
fix: keep generator files out of implicit bench discovery
wolfiesch Aug 31, 2026
0f9772f
fix: keep style ID fallback eager and lint-clean
wolfiesch Aug 31, 2026
1d3d73c
fix: enumerate MULRK columns explicitly
wolfiesch Aug 31, 2026
b10ed15
fix: remove the unreachable offset wrapper
wolfiesch Aug 31, 2026
3a680f0
test: replace no-op style assertions with meaningful checks
wolfiesch Aug 31, 2026
e7bbe57
fix: remove unused generator fills
wolfiesch Aug 31, 2026
e6df1b8
style: apply rustfmt to the test imports
wolfiesch Aug 31, 2026
c49aaa3
fix(ci): satisfy stable clippy in layout example
wolfiesch Aug 31, 2026
22e0df4
fix(ci): use the exact PI constant in style example
wolfiesch Aug 31, 2026
b4315d7
fix(ci): remove invalid style test assertions
wolfiesch Aug 31, 2026
1a1a03b
fix(ci): remove unused private picture accessor
wolfiesch Aug 31, 2026
bdfee4a
fix(styles): build sparse style runs without dense bounds
wolfiesch Aug 31, 2026
6ce7242
fix(xlsx): preserve style and layout semantics
wolfiesch Aug 31, 2026
1d2d23a
fix(xlsx): propagate shared formula offset failures
wolfiesch Aug 31, 2026
0162c8d
fix(xlsx): parse empty style and layout elements
wolfiesch Aug 31, 2026
21d6c89
style: apply rustfmt output
wolfiesch Aug 31, 2026
fec525c
style: apply rustfmt output
wolfiesch Aug 31, 2026
6f5e3a7
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
fbcc0e6
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
afcc7b4
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
c94b477
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
969d3fd
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
2637300
fix: preserve OOXML style and rich text semantics
wolfiesch Aug 31, 2026
4c85925
fix: close exact-head style review findings
wolfiesch Aug 31, 2026
1361d58
fix: close remaining exact-head style review findings
wolfiesch Aug 31, 2026
934f220
fix: honor OOXML style sentinel and boolean defaults
wolfiesch Aug 31, 2026
0a2f351
docs: identify Excel protection defaults precisely
wolfiesch Aug 31, 2026
a9caee9
fix: close remaining style fidelity review gaps
wolfiesch Aug 31, 2026
c8b8575
fix: preserve explicit styles and worksheet metadata
wolfiesch Aug 31, 2026
97a8ef6
fix: retain string equality and inherited widths
wolfiesch Aug 31, 2026
31a7151
fix: inherit heights for metadata-only rows
wolfiesch Aug 31, 2026
ac0ce40
fix: complete inherited OOXML style handling
wolfiesch Aug 31, 2026
cc6e158
fix: align default XF conversion and indexed style lookup
wolfiesch Aug 31, 2026
7535dcd
fix: preserve center-across-selection alignment
wolfiesch Aug 31, 2026
f4d4358
fix: preserve number format escapes
wolfiesch Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ jobs:
rust:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
toolchain:
- "1.83" # MSRV.
Expand Down Expand Up @@ -45,3 +46,6 @@ jobs:
if: ${{ matrix.toolchain == 'stable' }}
run: |
cargo clippy --lib --examples --tests -- -Dwarnings
- name: Package check
if: ${{ matrix.toolchain == 'stable' }}
run: cargo package --allow-dirty
38 changes: 30 additions & 8 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
[package]
name = "calamine"
version = "0.33.0"
authors = ["Johann Tuffe <tafia973@gmail.com>"]
repository = "https://github.com/tafia/calamine"
documentation = "https://docs.rs/calamine"
description = "An Excel/OpenDocument Spreadsheet reader and deserializer in pure Rust"
name = "calamine-styles"
version = "0.1.0"
authors = [
"Johann Tuffe <tafia973@gmail.com>",
"Wolfgang Schoenberger",
]
repository = "https://github.com/SynthGL/calamine"
documentation = "https://docs.rs/calamine-styles"
description = "Fork of calamine with Font, Fill, Border, Alignment, and NumberFormat style parsing for xlsx"
license = "MIT"
readme = "README.md"
keywords = ["excel", "ods", "xls", "xlsx", "xlsb"]
keywords = ["excel", "xlsx", "styles", "calamine", "formatting"]
categories = ["encoding", "parsing", "text-processing"]
exclude = ["tests/**/*"]
edition = "2021"
rust-version = "1.83" # For quick-xml + encoding_rs.
autobenches = false

[lib]
# Preserve calamine's public crate path even though the published package has
# a distinct name. This keeps upstream tests, examples, and downstream source
# compatible while Cargo can install both packages explicitly.
name = "calamine"

[dependencies]
log = "0.4"
Expand All @@ -33,6 +43,18 @@ sha2 = "0.10"
env_logger = "0.11"
serde_derive = "1.0"
rstest = { version = "0.26", default-features = false }
rust_xlsxwriter = "0.93"
# Criterion 0.8 requires Rust 1.86; keep development targets honest at the
# crate's declared Rust 1.83 floor.
criterion = "0.5"

[[example]]
name = "generate_styles_1M"
path = "benches/generate_styles_1M.rs"

[[bench]]
name = "style"
harness = false

[features]
default = []
Expand All @@ -48,4 +70,4 @@ dates = ["chrono"]

[package.metadata.docs.rs]
features = ["chrono", "picture"]
rustdoc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]
Loading
Loading