From 2016a8de97ff1a9f95779795ec4cb2757d77074a Mon Sep 17 00:00:00 2001
From: burinc
](demos.md#basic-lighting) | `basic-lighting` | four point lights, custom vertex shader |
| preview | `bb` name | shows |
|---|---|---|
+| [
](demos.md#basic-lighting) | `basic-lighting` | four point lights, custom vertex shader |
| [
](demos.md#fog-rendering) | `fog-rendering` | exponential distance fog in the light shader |
| [
](demos.md#julia-set) | `julia-set` | the Julia set, mouse-steered, in a shader |
| [
](demos.md#mandelbrot-set) | `mandelbrot-set` | the Mandelbrot set, zoomable, in a shader |
diff --git a/docs/templates/home.html b/docs/templates/home.html
index 658fd7d..167cc15 100644
--- a/docs/templates/home.html
+++ b/docs/templates/home.html
@@ -66,7 +66,7 @@ raylib examples in Jolt
jolt.ffi: no wrapper library, no codegen, no C shim.
flowchart TB
- subgraph ex["175 example namespaces"]
+ subgraph ex["187 example namespaces"]
e["pong · boids · tetris
camera-3d · penrose-tiling · …"]
end
door["net.b12n.raylib.all
generated aggregator (bb gen:all)"]
@@ -217,7 +217,7 @@ Provable without a display
RAYLIB_APP_AUTO_QUIT_MS closes the window on a timer and RAYLIB_APP_SHOT dumps a frame to PNG, so a windowed example can prove itself unattended.
- A compile gate over all 175
+ A compile gate over all 187
bb check requires every example namespace headlessly. No window, no JVM, and it catches a broken binding across the whole suite at once.
@@ -241,7 +241,7 @@ Quickstart
bb info # grouped cheat-sheet of every example
bb tetris # run one (opens a window)
bb run-all 10 # demo reel: every example, 10s each
-bb check # headless compile-check of all 175, no window
+bb check # headless compile-check of all 187, no window
Needs jolt 0.8.0 or newer (deps.edn declares
:jolt/min-version) and a system libraylib 6.0+.
diff --git a/scripts/check_demos.clj b/scripts/check_demos.clj
index 16bb75b..10df5e3 100644
--- a/scripts/check_demos.clj
+++ b/scripts/check_demos.clj
@@ -108,6 +108,50 @@
(add! (str "docs/guide/demos.md group headings total " stated ", but "
(count shown) " examples have a GIF or a still"))))
+ ;; 6b. The catalog's own group headings state their row counts, and every
+ ;; group's table starts with its header. A row inserted above the header
+ ;; renders as a literal |---|---|---| on the published site and nothing
+ ;; else in this gate can see it, because every row is still present and
+ ;; every image still resolves.
+ (doseq [m (re-seq #"(?m)^## (\S+) \((\d+)\)$" catalog)]
+ (let [[whole grp n] m
+ start (+ (.indexOf catalog whole) (count whole))
+ rest' (subs catalog start)
+ end (if-let [i (re-find #"(?m)^## " rest')]
+ (.indexOf rest' i) (count rest'))
+ sec (subs rest' 0 end)
+ rows (filter #(str/starts-with? % "| ") (str/split-lines sec))
+ data (remove #(or (str/includes? % "| preview |")
+ (str/starts-with? % "|---")) rows)]
+ (when (and (seq rows) (not (str/includes? (first rows) "| preview |")))
+ (add! (str "docs/guide/example-catalog.md: the " grp
+ " table has a row above its header, which renders as a broken table")))
+ (when (not= (parse-long n) (count data))
+ (add! (str "docs/guide/example-catalog.md heading \"## " grp " (" n ")\" but the section holds "
+ (count data) " rows")))))
+
+ ;; 6c. The homepage states the example count in several places and had
+ ;; nothing gating it, which is how it sat at a stale 175 in four spots
+ ;; and carried per-group counts wrong in six of nine groups.
+ (let [home "docs/templates/home.html"]
+ (when (.exists (io/file home))
+ (let [txt (slurp (io/file home))
+ want (count ids)]
+ (doseq [[whole num] (re-seq #"(\d+)\s+(?:)?raylib(?:)?\s+examples" txt)]
+ (when (not= (parse-long num) want)
+ (add! (str home " says \"" (str/trim whole) "\", but the registry holds " want))))
+ (doseq [[whole num] (re-seq #"(?:Browse all|all of|compile-check of all)\s+(\d+)" txt)]
+ (when (not= (parse-long num) want)
+ (add! (str home " says \"" (str/trim whole) "\", but the registry holds " want))))
+ (doseq [[whole num] (re-seq #"(\d+)\s+example namespaces" txt)]
+ (when (not= (parse-long num) want)
+ (add! (str home " says \"" (str/trim whole) "\", but the registry holds " want))))
+ (let [by-group (frequencies (map #(nth % 2) examples-registry/examples))]
+ (doseq [[whole grp num] (re-seq #"([a-z0-9]+) (\d+)(?: ·|\.)" txt)]
+ (when-let [actual (by-group grp)]
+ (when (not= (parse-long num) actual)
+ (add! (str home " says \"" (str/trim whole) "\", but that group holds " actual)))))))))
+
;; 7. Prose counting GIFs or recordings must say what is on disk. Scoped to
;; a number immediately followed by a gallery word, so it does not fire
;; on a resolution, a year or an example count.