Witan Lint
witan pptx lint checks presentation content that can be structurally valid but misleading or unreadable. It reports broken or stale chart data and text covered by objects without opening PowerPoint.
witan pptx lint deck.pptx
The entire deck is checked by default. Limit analysis to selected slides by repeating --slide:
witan pptx lint deck.pptx --slide 1 --slide 4
Rules
Presentation-specific rules use the P### namespace. Chart rules share the same D### IDs and semantics as spreadsheet chart lint.
| Rule | Severity | Check |
|---|---|---|
| P001 | Warning | One or more lines of text are hidden behind opaque objects painted later on the slide |
| P002 | Warning | All text in a shape is hidden behind opaque objects |
| D100 | Error | A chart series data reference cannot be resolved |
| D101 | Warning | Cached chart data differs from its embedded workbook source |
| D102 | Warning | Chart series references have mismatched lengths |
| D103 | Warning | A chart series renders no data points |
| D104 | Warning | Chart series data contains calculation errors |
| D105 | Warning | A chart value range contains non-numeric text |
| D106 | Warning | Chart data lies outside explicit axis bounds |
| D107 | Error | A logarithmic axis receives zero or negative data |
| D108 | Warning | A pie or doughnut chart plots negative values as positive slices |
| D109 | Warning | A scatter or bubble chart has non-numeric X values |
| D110 | Warning | Multiple displayed series plot the same values range |
| Worksheet-only chart geometry rules D111–D116 do not run against presentations. |
Text Occlusion
P001 and P002 analyze rendered text lines rather than only shape rectangles. They combine coverage from opaque objects with higher z-order, so several foreground objects can together hide text. P001 reports partially hidden text; P002 reports a shape once when all of its text is hidden.
Decorative overlaps are normal in slide design, so these rules focus on authored text. They do not report a picture, chart, or decorative shape merely because another object covers it.
Chart Analysis
Chart rules inspect the chart part and its embedded workbook data. They use the same data interpretation as the chart renderer, including displayed-series filtering and axis bounds.
Filtering
Skip a noisy rule with --skip-rule, or run a selected set with --only-rule. Both flags are repeatable and rule IDs are case-insensitive:
witan pptx lint deck.pptx --skip-rule D101
witan pptx lint deck.pptx --only-rule P001 --only-rule P002
Slide and rule filters can be combined:
witan pptx lint deck.pptx --slide 3 --only-rule D100 --only-rule D101
Output And Exit Codes
Human-readable output groups diagnostics by severity and identifies the affected slide and shape when available. Use the PPTX-level --json flag for automation:
witan pptx --json lint deck.pptx
JSON diagnostics include severity, ruleId, message, location, slideNumber, slideId, shapeId, and shapeName, plus a top-level total.
| Exit code | Meaning |
|---|---|
0 |
No Error or Warning diagnostics |
1 |
Request, transport, or input error |
2 |
At least one Error or Warning diagnostic |
Analysis Scope
Lint visits selected slides in slide order and traverses locally authored visuals, including nested groups. Chart data is read directly from chart parts.
Inherited layout/master placeholders, notes slides, table-cell contents, and SmartArt internals are not currently traversed by general presentation rules. Render the affected slide when a visual review needs broader coverage.
See Witan Render for slide rendering and pixel diffs, and Charts for chart support.