From bc28a00cfcb020f13a196749acc96f9441fba98d Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Sun, 11 Jun 2023 13:38:30 +0200 Subject: [PATCH] Now using gst-lib. --- api/build.gradle | 3 ++ .../ssg/page/GspPageRenderer.groovy | 22 +++++-------- .../ssg/part/GspPartRenderer.groovy | 28 +++++++---------- .../ssg/render/StandardGspRenderer.groovy | 31 +++++++++++++------ .../ssg/template/GspTemplateRenderer.groovy | 24 ++++++-------- buildSrc/build.gradle | 24 ++++++++++++++ buildSrc/src/main/groovy/ssg.common.gradle | 1 + 7 files changed, 77 insertions(+), 56 deletions(-) diff --git a/api/build.gradle b/api/build.gradle index edd1c17..75b4953 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -7,6 +7,9 @@ repositories { } dependencies { + // https://archiva.jessebrault.com/#artifact/com.jessebrault.gst/lib + implementation 'com.jessebrault.gst:lib:0.0.1' + // https://mvnrepository.com/artifact/org.apache.groovy/groovy-templates implementation 'org.apache.groovy:groovy-templates:4.0.12' diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy index 80fb544..d83fed3 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy @@ -19,20 +19,14 @@ final class GspPageRenderer implements PageRenderer { RenderContext context ) { def diagnostics = [] - try { - def result = this.gspRenderer.render(specialPage.text, context) { - it.diagnosticsConsumer = diagnostics.&addAll - it.loggerName = "GspSpecialPage(${ specialPage.path })" - } - Result.of(diagnostics, result.toString()) - } catch (Exception e) { - Result.of( - [*diagnostics, new Diagnostic( - "An exception occurred while rendering specialPage ${ specialPage.path }:\n${ e }", - e - )], - '' - ) + def result = this.gspRenderer.render(specialPage.text, context) { + it.diagnosticsConsumer = diagnostics.&addAll + it.loggerName = "GspSpecialPage(${ specialPage.path })" + } + if (result.hasDiagnostics()) { + Result.ofDiagnostics(diagnostics + result.diagnostics) + } else { + Result.of(diagnostics, result.get()) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy index acddb6a..6eb409f 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy @@ -26,24 +26,18 @@ final class GspPartRenderer implements PartRenderer { requireNonNull(binding) requireNonNull(context) def diagnostics = [] - try { - def result = this.gspRenderer.render(part.text, context) { - it.putCustom('binding', binding) - it.diagnosticsConsumer = diagnostics.&addAll - it.loggerName = "GspPart(${ part.path })" - if (text) { - it.text = text - } + def result = this.gspRenderer.render(part.text, context) { + it.putCustom('binding', binding) + it.diagnosticsConsumer = diagnostics.&addAll + it.loggerName = "GspPart(${ part.path })" + if (text) { + it.text = text } - Result.of(diagnostics, result.toString()) - } catch (Exception e) { - Result.of( - [*diagnostics, new Diagnostic( - "An exception occurred while rendering part ${ part.path }:\n${ e }", - e - )], - '' - ) + } + if (result.hasDiagnostics()) { + Result.ofDiagnostics(diagnostics + result.diagnostics) + } else { + Result.of(diagnostics, result.get()) } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy index ffbd9eb..6ad395d 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy @@ -1,28 +1,39 @@ package com.jessebrault.ssg.render +import com.jessebrault.gst.TemplateCreator +import com.jessebrault.gst.groovy.GroovyTemplateCreator +import com.jessebrault.gst.parser.ExtendedGstParser import com.jessebrault.ssg.dsl.StandardDslMap -import groovy.text.GStringTemplateEngine -import groovy.text.TemplateEngine -import org.codehaus.groovy.control.CompilerConfiguration +import com.jessebrault.ssg.util.Diagnostic +import com.jessebrault.ssg.util.Result import java.util.function.Consumer final class StandardGspRenderer { - private final TemplateEngine engine + private final TemplateCreator templateCreator StandardGspRenderer(ClassLoader parentClassLoader) { - def cc = new CompilerConfiguration() // TODO: investigate if this makes any difference on the ultimate template - def gcl = new GroovyClassLoader(parentClassLoader, cc) - this.engine = new GStringTemplateEngine(gcl) + this.templateCreator = new GroovyTemplateCreator(ExtendedGstParser::new, [], parentClassLoader, true) } - String render( - String template, + Result render( + String templateText, RenderContext context, Consumer dslMapBuilderConsumer ) { - this.engine.createTemplate(template).make(StandardDslMap.get(context, dslMapBuilderConsumer)).toString() + try { + def templateCreateResult = this.templateCreator.create(templateText) + if (templateCreateResult.hasDiagnostics()) { + Result.ofDiagnostics(templateCreateResult.diagnostics.collect { + new Diagnostic(it.message, it.exception) + }) + } else { + Result.of(templateCreateResult.get().make(StandardDslMap.get(context, dslMapBuilderConsumer))) + } + } catch (Exception e) { + Result.ofDiagnostics([new Diagnostic(e.message, e)]) + } } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy index 02f2ddd..0de105c 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -21,21 +21,15 @@ final class GspTemplateRenderer implements TemplateRenderer { RenderContext context ) { def diagnostics = [] - try { - def result = this.gspRenderer.render(template.text, context) { - it.diagnosticsConsumer = diagnostics.&addAll - it.loggerName = "GspTemplate(${ template.path })" - it.text = text - } - Result.of(diagnostics, result) - } catch (Exception e) { - Result.of( - [*diagnostics, new Diagnostic( - "An exception occurred while rendering Template ${ template.path }:\n${ e }", - e - )], - '' - ) + def result = this.gspRenderer.render(template.text, context) { + it.diagnosticsConsumer = diagnostics.&addAll + it.loggerName = "GspTemplate(${ template.path })" + it.text = text + } + if (result.hasDiagnostics()) { + Result.ofDiagnostics(diagnostics + result.diagnostics) + } else { + Result.of(diagnostics, result.get()) } } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 6784052..e61f38a 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -1,3 +1,27 @@ plugins { id 'groovy-gradle-plugin' } + +repositories { + maven { + url 'https://archiva.jessebrault.com/repository/internal/' + + credentials { + username System.getenv('JBARCHIVA_USERNAME') + password System.getenv('JBARCHIVA_PASSWORD') + } + } + + maven { + url 'https://archiva.jessebrault.com/repository/snapshots/' + + credentials { + username System.getenv('JBARCHIVA_USERNAME') + password System.getenv('JBARCHIVA_PASSWORD') + } + } +} + +dependencies { + implementation 'com.jessebrault.jbarchiva:jbarchiva:0.1.0' +} diff --git a/buildSrc/src/main/groovy/ssg.common.gradle b/buildSrc/src/main/groovy/ssg.common.gradle index 760d0cd..3e39049 100644 --- a/buildSrc/src/main/groovy/ssg.common.gradle +++ b/buildSrc/src/main/groovy/ssg.common.gradle @@ -1,4 +1,5 @@ plugins { + id 'com.jessebrault.jbarchiva' id 'groovy' id 'java-library' id 'java-test-fixtures'