feat(slides): add techne:slides, a gate and renderer for talk decks - #74
Merged
Merged
Conversation
slides.py check parses a .pptx with the stdlib and gates it on real title placeholders, WCAG contrast resolved through fills and the shape underneath, alt text, em-dashes, small text, portable fonts, speaker notes, and figures or dense text on talk slides. slides.py render exports through PowerPoint (native or from WSL) or LibreOffice, then rasterizes and writes contact sheets. The SKILL.md carries the toolchain choice, how to write for a newcomer audience, the pptxgenjs traps, and briefing the presenter.
… foreign files render now claims its output folder with a marker and refuses a non-empty folder it did not create, so it can no longer delete a user's slide-*.png or overwrite the PDF beside their deck. check stops at the first level that defines a background and treats pictures, gradients, theme-styled, translucent and grouped surfaces as unmeasured instead of misjudged; titles inherit the master title size; paragraphs keep their separation; only an exact Backup or Appendix divider starts the backup section; theme font references resolve through the theme; a broken part is an ERROR, not a crash. render also finds MSI Office, isolates LibreOffice's profile and checks it wrote a PDF, and writes its .ps1 as UTF-8 with a BOM.
Owner
Author
|
Findings (all fixed in c7fd7e2, each with a regression test that fails on the first commit)
Refuted
Verified clean
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
techne:slides: get a talk deck ready to present, and gate the.pptxbefore it reaches a room.slides.py checkparses the package with the stdlib and exits 0 / 1 / 2 liketechne:latex:--level AA), pictures without alt text, em-dashes.Backup slidesdivider onward are exempt), long titles.Contrast is measured against what is actually behind the text: its own fill, the topmost filled shape under it, then the first of slide, layout and master that defines a background. Pictures, gradients, theme-styled, translucent and grouped surfaces are reported as unchecked rather than guessed.
slides.py renderexports through PowerPoint over COM (native Windows, or from WSL by staging on the Windows side) or LibreOffice with a private profile, then writes a PNG per slide and 2x2 contact sheets. It only writes into a folder that is new, empty, or already marked as its own, and quits PowerPoint only when it started the instance and nothing else is open.SKILL.mdcarries the toolchain split (Typst + Touying for decks presented as PDF, pptxgenjs when a.pptxis required), writing for a newcomer audience (claim headlines, an agenda, one idea per slide, numbers kept to the notes and backup, discussion stops), the pptxgenjs traps (table margins are inches since v3.8.0), and briefing the presenter.Checked:
renderat a folder holding someone'sslide-hero.pngand a PDF: it refused and left both untouched.make validategreen.