1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
Thank you for your interest in contributing! This document covers everything you need
to get started.
```sh
git clone https://github.com/matyushkin/djvu-rs
cd djvu-rs
git config core.hooksPath .githooks # install pre-commit checks
cargo test # run the full test suite
cargo clippy -- -D warnings
cargo fmt --check
```
Rust **1.88** or later is required (uses let-chains from edition 2024).
All of the following must pass locally:
```sh
cargo fmt --check # formatting
cargo clippy -- -D warnings # no lint warnings
cargo test # unit + integration + doctests
cargo build --no-default-features # no_std check
```
These match the crate's own invariants — violations will be requested to fix in review:
1. 2.3.
No test → no merge.
Test fixtures live in `tests/corpus/`. They must be:
- --
Do not commit files whose copyright status is unclear.
Criterion benchmarks are in `benches/`. Run them with:
```sh
cargo bench
```
If your change affects codec performance, include before/after numbers in the PR
description (machine specs + `cargo bench` output).
This crate is written from the public DjVu v3 specification only (see `SOURCES.md`).
If you are implementing a new codec feature, cite the relevant section of the spec in
a comment. Do not copy code from djvulibre or any GPL-licensed source.
Commits must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
This is not just style — **release-please reads commit messages to determine the next
version number and generate `CHANGELOG.md` automatically.**
```
<type>
[optional body]
[optional footer: BREAKING CHANGE: <description>]
```
Common types and their effect on versioning:
Examples:
```
fix: clamp overflow in IW44 normalize for extreme coefficients
feat(render): add render_gray8 for single-channel grayscale output
feat!: remove deprecated DjVuPage::extract_mask — use raw_chunk instead
perf(iw44): SIMD YCbCr→RGB using wide::i32x8
docs: document Rotation enum variants
chore(ci): upgrade actions/checkout to v4
```
See `RELEASING.md` for how commits drive the automated release process.
- ---
OSS-Fuzz reports arrive as private issues containing a testcase plus a
reproducer command. Workflow:
1. 2.3.4.5.6.
Open a GitHub issue. Include:
- --