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.