diff --git a/gradle.properties b/gradle.properties index 2f632d7..a2af0e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ org.gradle.parallel=true org.gradle.caching=true gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven -jwo.version = 2025.01.09 -lys.version = 2025.01.08 +jwo.version = 2025.01.17 +lys.version = 2025.01.10 guice.version = 5.0.1 diff --git a/src/main/java/net/woggioni/jwo/JWO.java b/src/main/java/net/woggioni/jwo/JWO.java index d427394..de0a407 100644 --- a/src/main/java/net/woggioni/jwo/JWO.java +++ b/src/main/java/net/woggioni/jwo/JWO.java @@ -346,13 +346,20 @@ public class JWO { int cursor = 0; while(cursor < template.length()) { - int nextPlaceHolder = indexOfWithEscape(template, '$', '$', cursor, template.length()); + int nextPlaceHolder = template.indexOf('$', cursor); if (nextPlaceHolder < 0) { nextPlaceHolder = template.length(); } - while (cursor < nextPlaceHolder) { - char ch = template.charAt(cursor++); - sb.append(ch); + int nextPlaceHolderWithEscape = indexOfWithEscape(template, '$', '$', cursor, template.length()); + if (nextPlaceHolderWithEscape < 0) { + nextPlaceHolderWithEscape = template.length(); + } + while (cursor < nextPlaceHolderWithEscape) { + char ch = template.charAt(cursor); + if (nextPlaceHolder == nextPlaceHolderWithEscape || cursor != nextPlaceHolder) { + sb.append(ch); + } + ++cursor; } if (cursor + 1 < template.length() && template.charAt(cursor + 1) == '{') { String key; diff --git a/src/main/java9/net/woggioni/jwo/url/jpms/Handler.java b/src/main/java9/net/woggioni/jwo/url/jpms/Handler.java index 4c6ed2d..67dcab0 100644 --- a/src/main/java9/net/woggioni/jwo/url/jpms/Handler.java +++ b/src/main/java9/net/woggioni/jwo/url/jpms/Handler.java @@ -9,15 +9,6 @@ import java.net.URLStreamHandler; import java.util.Optional; public class Handler extends URLStreamHandler { - private final ClassLoader classLoader; - - public Handler() { - this.classLoader = getClass().getClassLoader(); - } - - public Handler(ClassLoader classLoader) { - this.classLoader = classLoader; - } @Override protected URLConnection openConnection(URL u) throws IOException { diff --git a/src/test/java/net/woggioni/jwo/JWOTest.java b/src/test/java/net/woggioni/jwo/JWOTest.java index 5449e14..ee08597 100644 --- a/src/test/java/net/woggioni/jwo/JWOTest.java +++ b/src/test/java/net/woggioni/jwo/JWOTest.java @@ -158,6 +158,7 @@ public class JWOTest { /home/user /home/user defaultValue + ;=%x$!~L+LJr?50l.^{veaS'zLHo=!}wT """; Map> contextMap = new MapBuilder>() .entry("env", @@ -168,7 +169,8 @@ public class JWOTest { .entry("sys", new MapBuilder() .entry("user.home", "/home/user") - .build(TreeMap::new, Collections::unmodifiableMap)).build(TreeMap::new, Collections::unmodifiableMap); + .build(TreeMap::new, Collections::unmodifiableMap) + ).build(TreeMap::new, Collections::unmodifiableMap); try (Reader reader = new InputStreamReader( JWOTest.class.getResourceAsStream("/render_template_test.txt"))) { String rendered = JWO.renderTemplate(reader, valuesMap, contextMap); diff --git a/src/test/resources/render_template_test.txt b/src/test/resources/render_template_test.txt index 8cf0a24..ada53bc 100644 --- a/src/test/resources/render_template_test.txt +++ b/src/test/resources/render_template_test.txt @@ -2,3 +2,4 @@ This is a ${adjective} test made by ${author} on ${date}. It's really ${adjectiv ${sys:user.home} ${env:HOME} ${env:SOME_STRANGE_VAR:defaultValue} +;=%x$$!~L+LJr?50l.^{veaS'zLHo=!}wT