From d5a47ce568b1e6829a1cba579f2f782a2b0eb297 Mon Sep 17 00:00:00 2001 From: Speiger Date: Tue, 27 Jun 2023 13:29:31 +0200 Subject: [PATCH] Added Iteration support. Said support allows to use the #iterate & #argument #enditerate parameters. Which will duplicate the text block inside of it x amount of times with arguments being replaced. The idea being that if code can be replicated the iterate option would simplify the process. Multiple arguments can be defined (they will be not part of the output) and it will simply insert them. Note that all argument parameters have to be equal size. Otherwise the iterator processor will fail. Iterators can be stacked too to create layers upon layers. On top of that the iterator is part of the Template parser and not of the template processor meaning its a Pre processor step. And all mappers still apply themselves on to the output of the iterators! --- .settings/org.eclipse.buildship.core.prefs | 11 ++ .settings/org.eclipse.core.resources.prefs | 2 + build.gradle | 108 +++++++++--------- example/cache.bin | 2 +- example/input/test.template | 32 +++++- example/output/test.txt | 35 +++++- .../src/builder/base/ConditionedSegment.java | 4 + .../src/builder/base/SegmentIterator.java | 61 ++++++++++ .../speiger/src/builder/base/Template.java | 5 + .../src/builder/conditions/ICondition.java | 2 +- .../builder/processor/TemplateProcessor.java | 3 +- 11 files changed, 206 insertions(+), 59 deletions(-) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 src/main/java/speiger/src/builder/base/SegmentIterator.java diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index 408b507..7b8f972 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..4824b80 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/build.gradle b/build.gradle index 5bccaf5..81eac0a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,55 +1,55 @@ -apply plugin: 'java-library' - -repositories { - jcenter() -} - -archivesBaseName = 'Simple Code Generator' -version = '1.2.2' -apply plugin: 'maven' - -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} - -dependencies { -} - -task srcJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'sources' -} - -artifacts { - archives srcJar -} - -uploadArchives { - repositories.mavenDeployer { - repository(url: 'https://maven.speiger.com/repository/main') { - authentication(userName: project.properties.mavenUser, password: project.properties.mavenPassword) - } - snapshotRepository(url: 'https://maven.speiger.com/repository/main') { - authentication(userName: project.properties.mavenUser, password: project.properties.mavenPassword) - } - pom { - version = project.version - artifactId = project.archivesBaseName.replace(" ", "-") - groupId = 'de.speiger' - project { - licenses { - license { - name = 'The Apache License, Version 2.0' - url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - } - } - developers { - developer { - id = 'speiger' - name = 'Speiger' - } - } - } - } - } +apply plugin: 'java-library' + +repositories { + jcenter() +} + +archivesBaseName = 'Simple Code Generator' +version = '1.3.0' +apply plugin: 'maven' + +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + +dependencies { +} + +task srcJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'sources' +} + +artifacts { + archives srcJar +} + +uploadArchives { + repositories.mavenDeployer { + repository(url: 'https://maven.speiger.com/repository/main') { + authentication(userName: project.properties.mavenUser, password: project.properties.mavenPassword) + } + snapshotRepository(url: 'https://maven.speiger.com/repository/main') { + authentication(userName: project.properties.mavenUser, password: project.properties.mavenPassword) + } + pom { + version = project.version + artifactId = project.archivesBaseName.replace(" ", "-") + groupId = 'de.speiger' + project { + licenses { + license { + name = 'The Apache License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + developers { + developer { + id = 'speiger' + name = 'Speiger' + } + } + } + } + } } \ No newline at end of file diff --git a/example/cache.bin b/example/cache.bin index c2588e6..d5a615d 100644 --- a/example/cache.bin +++ b/example/cache.bin @@ -1 +1 @@ -test=e949777578333aa849d74d6a2c651236 +test=ddb9367ebd61888ab31a658dd6f6df86 diff --git a/example/input/test.template b/example/input/test.template index da17d64..a163188 100644 --- a/example/input/test.template +++ b/example/input/test.template @@ -20,4 +20,34 @@ TESTING should not be overriden #endignore TESTING should not be overriden -#endif \ No newline at end of file +#endif + +#iterate +#argument NUMBER 1 2 3 4 5 6 7 8 9 +Lets test number NUMBER +#enditerate + +#if TEST0 +Lets test a true condition. +#iterate +#argument NUMBER 1 2 3 4 5 6 7 8 9 +Lets test number NUMBER +#enditerate +#endif + +#if TEST1 +Lets test a false condition. +#iterate +#argument NUMBER 1 2 3 4 5 6 7 8 9 +Lets test number NUMBER +#enditerate +#endif + +Lets test stacked iterators +#iterate +#argument NUMBER1 1 2 3 +#iterate +#argument NUMBER2 4 5 6 +Lets test numbers NUMBER1 NUMBER2 +#enditerate +#enditerate \ No newline at end of file diff --git a/example/output/test.txt b/example/output/test.txt index accf736..b0f4d03 100644 --- a/example/output/test.txt +++ b/example/output/test.txt @@ -5,4 +5,37 @@ TESTING should not be overriden Test2 should be overriden TESTING should not be overriden too -Test2 should be overriden too \ No newline at end of file +Test2 should be overriden too + +Lets test number 1 +Lets test number 2 +Lets test number 3 +Lets test number 4 +Lets test number 5 +Lets test number 6 +Lets test number 7 +Lets test number 8 +Lets test number 9 + +Lets test a true condition. +Lets test number 1 +Lets test number 2 +Lets test number 3 +Lets test number 4 +Lets test number 5 +Lets test number 6 +Lets test number 7 +Lets test number 8 +Lets test number 9 + + +Lets test stacked iterators +Lets test numbers 1 4 +Lets test numbers 1 5 +Lets test numbers 1 6 +Lets test numbers 2 4 +Lets test numbers 2 5 +Lets test numbers 2 6 +Lets test numbers 3 4 +Lets test numbers 3 5 +Lets test numbers 3 6 \ No newline at end of file diff --git a/src/main/java/speiger/src/builder/base/ConditionedSegment.java b/src/main/java/speiger/src/builder/base/ConditionedSegment.java index 3452cca..4b67d63 100644 --- a/src/main/java/speiger/src/builder/base/ConditionedSegment.java +++ b/src/main/java/speiger/src/builder/base/ConditionedSegment.java @@ -97,6 +97,10 @@ public class ConditionedSegment i += parse(fileName, null, lines, i, segmentText.length(), ignoreCounter, childSegments, postSegments); segmentText.add(lines.get(prev)); } + else if(trimmed.startsWith("#iterate")) { + SegmentIterator.iterateSegment(fileName, trimmed, lines, i, segmentText.length()); + i--; + } continue; } segmentText.add(s); diff --git a/src/main/java/speiger/src/builder/base/SegmentIterator.java b/src/main/java/speiger/src/builder/base/SegmentIterator.java new file mode 100644 index 0000000..281b8d1 --- /dev/null +++ b/src/main/java/speiger/src/builder/base/SegmentIterator.java @@ -0,0 +1,61 @@ +package speiger.src.builder.base; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.StringJoiner; +import java.util.stream.Collectors; + +public class SegmentIterator { + public static void iterateSegment(String fileName, String currentLine, List lines, int currentIndex, int startIndex) { + List arguments = new ArrayList<>(); + StringJoiner toIterate = new StringJoiner("\n"); + int skip = 0; + int end = 1; + for(int i = currentIndex+1;i 0) + { + toIterate.add(s); + continue; + } + if(trimmed.startsWith("#argument")) + { + arguments.add(trimmed.substring(9).trim().split(" ")); + continue; + } + } + toIterate.add(s); + } + int size = arguments.get(0).length; + for(int i = 1,m=arguments.size();i[] mappers = debugUnusedMappers() ? new Set[]{Collections.synchronizedSet(new HashSet()), Collections.synchronizedSet(new HashSet())} : null; + Set[] mappers = debugUnusedMappers() ? new Set[]{Collections.synchronizedSet(new HashSet<>()), Collections.synchronizedSet(new HashSet<>())} : null; ThreadPoolExecutor service = (ThreadPoolExecutor)Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); service.setKeepAliveTime(10, TimeUnit.MILLISECONDS); service.allowCoreThreadTimeOut(true);