@@ -404,6 +404,30 @@ String renderDocLinks(String tpl, JsonNode docs) {
404404 return String .join ("\n " , links );
405405}
406406
407+ String slugToPascalCase (String slug ) {
408+ return Arrays .stream (slug .split ("-" ))
409+ .filter (w -> !w .isEmpty ())
410+ .map (w -> Character .toUpperCase (w .charAt (0 )) + w .substring (1 ))
411+ .collect (Collectors .joining ());
412+ }
413+
414+ String renderProofSection (Snippet s , Map <String , String > strings ) {
415+ var pascal = slugToPascalCase (s .slug ());
416+ var proofFile = Path .of ("proof" , s .category (), pascal + ".java" );
417+ if (!Files .exists (proofFile )) return "" ;
418+ var proofUrl = "https://github.com/javaevolved/javaevolved.github.io/blob/main/proof/%s/%s.java"
419+ .formatted (s .category (), pascal );
420+ var label = strings .getOrDefault ("sections.proof" , "Proof" );
421+ var linkText = strings .getOrDefault ("sections.proofLink" , "View proof source" );
422+ return """
423+ <section class="docs-section">
424+ <div class="section-label">%s</div>
425+ <div class="docs-links">
426+ <a href="%s" target="_blank" rel="noopener" class="doc-link">%s ↗</a>
427+ </div>
428+ </section>""" .formatted (label , proofUrl , linkText );
429+ }
430+
407431String renderRelatedSection (String tpl , Snippet snippet , Map <String , Snippet > all , String locale , Map <String , String > strings ) {
408432 return snippet .related ().stream ().filter (all ::containsKey )
409433 .map (p -> renderRelatedCard (tpl , all .get (p ), locale , strings ))
@@ -469,6 +493,7 @@ String generateHtml(Templates tpl, Snippet s, Map<String, Snippet> all, Map<Stri
469493 Map .entry ("navArrows" , renderNavArrows (s , locale )),
470494 Map .entry ("whyCards" , renderWhyCards (tpl .whyCard (), s .whyModernWins ())),
471495 Map .entry ("docLinks" , renderDocLinks (tpl .docLink (), s .node ().withArray ("docs" ))),
496+ Map .entry ("proofSection" , renderProofSection (s , extraTokens )),
472497 Map .entry ("relatedCards" , renderRelatedSection (tpl .relatedCard (), s , all , locale , extraTokens )),
473498 Map .entry ("socialShare" , renderSocialShare (tpl .socialShare (), s .slug (), s .title (), extraTokens ))));
474499 var localeName = LOCALES .getOrDefault (locale , locale );
0 commit comments