diff --git a/README.md b/README.md
index 097399f..662f4e7 100644
--- a/README.md
+++ b/README.md
@@ -333,13 +333,13 @@ max_depth/
```
## Tree format
-Choose between different tree formats.
+Choose between different built-in tree formats, or create your own.
The default is `UNICODE_BOX_DRAWING`, supported by all terminals, but you can also switch to use `CLASSIC_ASCII`.
```java
// Example: FileTreeFormat.java
var prettyPrinter = FileTreePrettyPrinter.builder()
- .customizeOptions(options -> options.withTreeFormat(TreeFormat.CLASSIC_ASCII))
+ .customizeOptions(options -> options.withTreeFormat(TreeFormats.CLASSIC_ASCII))
.build();
```
@@ -352,9 +352,6 @@ tree_format/
`-- subFile_2
```
-> [!TIP]
-> *Idea for a future version: option to allow usage of custom format*
-
# Project Information
* See [πCHANGELOG.md](CHANGELOG.md) for a list of released versions and detailed changes.
diff --git a/ROADMAP.md b/ROADMAP.md
index 89834c4..2802d6c 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -4,12 +4,11 @@
- [x] **Features**
- [x] Option: filtering
- [x] Option: ordering
- - [x] Option: emojis
- - [x] Option: custom emojis mapping
+ - [x] Option: emojis (+ custom mapping)
- [x] Option: compact directories display
- [x] Option: line extension (=additional text after the file name)
- [x] Option: children limit (static & dynamic)
- - [x] Option: tree format Unicode box drawing / classic ASCII
+ - [x] Option: tree format (+ custom mapping)
- [x] Option: max directory depth
- [x] **Helpers**
- [x] Path matchers
@@ -29,10 +28,11 @@
- [x] SonarCloud integration
- [x] **Workflows**
- [x] Github actions
- - [x] Publish on Maven Central!
+ - [x] Publish `0.0.x` alpha on Maven Central!
## To do
-- [ ] Option: custom tree format
+- [ ] Gather feedback
+- [ ] Publish `0.x.0` beta on Maven Central!
## Backlog / To analyze / To implement if requested
- [ ] Rework/fix Github wiki to be up to date
diff --git a/assets/project-structure.png b/assets/project-structure.png
index 19d0c8d..68b8e4b 100644
Binary files a/assets/project-structure.png and b/assets/project-structure.png differ
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java
index b1d6f87..973764c 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java
@@ -1,8 +1,8 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.ChildLimits;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers;
public class ChildLimitDynamic {
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java
index 8305f58..5e83379 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java
@@ -1,13 +1,13 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PrettyPrintOptions.TreeFormat;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.TreeFormats;
public class FileTreeFormat {
public static void main(String[] args) {
var prettyPrinter = FileTreePrettyPrinter.builder()
- .customizeOptions(options -> options.withTreeFormat(TreeFormat.CLASSIC_ASCII))
+ .customizeOptions(options -> options.withTreeFormat(TreeFormats.CLASSIC_ASCII))
.build();
var tree = prettyPrinter.prettyPrint("src/example/resources/tree_format");
System.out.println(tree);
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java
index acd3138..be80241 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java
@@ -1,7 +1,7 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers;
public class Filtering {
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java
index fc79715..f8500c1 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java
@@ -1,8 +1,8 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.LineExtensions;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.LineExtensions;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers;
import java.nio.file.Path;
import java.util.function.Function;
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java
index 66f0c0a..1221124 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java
@@ -1,10 +1,10 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.ChildLimits;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.LineExtensions;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathSorts;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.LineExtensions;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathSorts;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.function.Function;
@@ -56,9 +56,10 @@ public static void main(String[] args) {
*/
var childLimitFunction = ChildLimits.builder()
// Hide all files under renderer and scanner packages
+ .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/options"), 0)
.add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer"), 0)
.add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner"), 0)
- .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter"), 3)
+ .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter"), 4)
.build();
/*
@@ -113,22 +114,25 @@ public static void main(String[] args) {
β ββ πΌοΈ project-structure.png // This image
ββ π src/main/java/
β ββ π io/github/computerdaddyguy/jfiletreeprettyprinter/
+ β ββ π options/
+ β β ββ ...
β ββ π renderer/
β β ββ ...
β ββ π scanner/
β β ββ ...
β ββ β FileTreePrettyPrinter.java // Main entry point
β ββ ...
- ββ πΊοΈ CHANGELOG.md
- ββ π CONTRIBUTING.md
- ββ π LICENSE
- ββ π README.md // You're reading at this!
+ ββ π CHANGELOG.md
+ ββ π€ CONTRIBUTING.md
+ ββ βοΈ LICENSE
+ ββ π README.md // You're reading at this!
ββ πΊοΈ ROADMAP.md
ββ π‘οΈ SECURITY.md
- ββ ποΈ pom.xml
- ββ π release_process.md
+ ββ π οΈ pom.xml
+ ββ π release_process.md
ββ π runMutationTests.sh
+
*/
}
diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java
index 5009595..8a3973e 100644
--- a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java
+++ b/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java
@@ -1,7 +1,7 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathSorts;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathSorts;
public class Sorting {
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java
index aa8af48..e5506f8 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java
@@ -1,5 +1,6 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions;
import java.io.UncheckedIOException;
import java.nio.file.Path;
import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java
index 682250a..62d2011 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java
@@ -1,5 +1,6 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions;
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.TreeEntryRenderer;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.PathToTreeScanner;
import java.util.Objects;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java
similarity index 98%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitBuilder.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java
index 12090b6..e6eef92 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimits.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java
similarity index 95%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimits.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java
index b640440..6493d2e 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimits.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
/**
* Utility class providing constants and factory methods for creating
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMapping.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java
similarity index 89%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMapping.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java
index b233fcc..553bd92 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMapping.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java
@@ -1,6 +1,5 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
import java.nio.file.Path;
import java.util.Objects;
import java.util.Optional;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMappingBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java
similarity index 97%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMappingBuilder.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java
index 8b515dd..29eedef 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/DefaultEmojiMappingBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java
@@ -1,6 +1,6 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji.PathMatcherEmojiFunction.EmojiMatch;
+import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatcherEmojiFunction.EmojiMatch;
import java.nio.file.PathMatcher;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMapping.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java
similarity index 91%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMapping.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java
index 3d6e982..12a33df 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMapping.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMappingBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java
similarity index 97%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMappingBuilder.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java
index 57a79d2..036f31f 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/EmojiMappingBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java
@@ -1,6 +1,5 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.PathMatchers;
import java.nio.file.PathMatcher;
import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java
similarity index 98%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionBuilder.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java
index b10cb13..f83d2ed 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java
similarity index 95%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensions.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java
index efce6d4..4ec2c06 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensions.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
/**
* Utility class providing constants and factory methods for creating
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/MappingUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java
similarity index 86%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/MappingUtils.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java
index 0a63c2f..58279cf 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/MappingUtils.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.util.Map;
import java.util.Map.Entry;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathExtensionEmojiFunction.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java
similarity index 95%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathExtensionEmojiFunction.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java
index 399c731..aa8fb1d 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathExtensionEmojiFunction.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.util.ArrayList;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathMatcherEmojiFunction.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java
similarity index 92%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathMatcherEmojiFunction.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java
index edb8d4e..b7c6f1a 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathMatcherEmojiFunction.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchers.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java
similarity index 99%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchers.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java
index 34dbe7f..621d624 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchers.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.io.IOException;
import java.io.UncheckedIOException;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathNameEmojiFunction.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java
similarity index 89%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathNameEmojiFunction.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java
index b0d906c..20c8ab2 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/PathNameEmojiFunction.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.util.Map;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilder.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java
similarity index 98%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilder.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java
index 0745e40..b15bb7e 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilder.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSorts.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java
similarity index 98%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSorts.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java
index 4d8fd6e..a6090f9 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSorts.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.util.Comparator;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PrettyPrintOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java
similarity index 93%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PrettyPrintOptions.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java
index a48608c..8a52df7 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PrettyPrintOptions.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java
@@ -1,7 +1,6 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.RenderingOptions;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji.EmojiMapping;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.ScanningOptions;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
@@ -62,21 +61,7 @@ public PrettyPrintOptions withChildLimit(ToIntFunction A {@code TreeFormat} defines the characters or strings used for:
+ * null.
*/
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/SequentialEmojiFunction.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java
similarity index 90%
rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/SequentialEmojiFunction.java
rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java
index f63cfdd..549c1e9 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/emoji/SequentialEmojiFunction.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java
@@ -1,4 +1,4 @@
-package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji;
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
import java.nio.file.Path;
import java.util.Objects;
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java
new file mode 100644
index 0000000..2906c10
--- /dev/null
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java
@@ -0,0 +1,103 @@
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
+
+import java.util.List;
+
+/**
+ * Represents the ASCII or Unicode symbol set used to render the visual
+ * structure of a directory tree.
+ *
+ *
+ *
+ *
All four symbols must have the same display width + * (i.e., same string length) to ensure proper alignment of the printed tree. + * A mismatch will cause an {@link IllegalArgumentException} at construction time.
+ * + *{@code
+ * var treeFormat = new TreeFormat("ββ", "ββ", "β ", " ");
+ * }
+ *
+ * @see TreeFormats
+ */
+public class TreeFormat {
+
+ private final String nonLastChildSymbol;
+ private final String lastChildSymbol;
+ private final String continuationSymbol;
+ private final String emptySymbol;
+
+ /**
+ * Constructs a new {@link TreeFormat} instance.
+ *
+ * @param nonLastChildSymbol the symbol used to connect non-last children (e.g. {@code "ββ"})
+ * @param lastChildSymbol the symbol used to connect the last child (e.g. {@code "ββ"})
+ * @param continuationSymbol the symbol used for vertical continuation (e.g. {@code "β "})
+ * @param emptySymbol the symbol used for empty indentation (e.g. {@code " "})
+ *
+ * @throws NullPointerException if any argument is {@code null}
+ * @throws IllegalArgumentException if the provided symbols do not all have the same length
+ */
+ public TreeFormat(String nonLastChildSymbol, String lastChildSymbol, String continuationSymbol, String emptySymbol) {
+ super();
+ ensureAllSameLength(nonLastChildSymbol, lastChildSymbol, continuationSymbol, emptySymbol);
+ this.nonLastChildSymbol = nonLastChildSymbol;
+ this.lastChildSymbol = lastChildSymbol;
+ this.continuationSymbol = continuationSymbol;
+ this.emptySymbol = emptySymbol;
+ }
+
+ private void ensureAllSameLength(String nonLastChildSymbol, String lastChildSymbol, String continuationSymbol, String emptySymbol) {
+ var sizeCountList = List.of(nonLastChildSymbol, lastChildSymbol, continuationSymbol, emptySymbol)
+ .stream()
+ .map(String::length)
+ .distinct()
+ .toList();
+ if (sizeCountList.size() != 1) {
+ throw new IllegalArgumentException("All tree symbols must have the same length");
+ }
+ }
+
+ /**
+ * Returns the symbol used for non-last child connections.
+ *
+ * @return the non-last child symbol
+ */
+ public String getNonLastChildSymbol() {
+ return nonLastChildSymbol;
+ }
+
+ /**
+ * Returns the symbol used for last child connections.
+ *
+ * @return the last child symbol
+ */
+ public String getLastChildSymbol() {
+ return lastChildSymbol;
+ }
+
+ /**
+ * Returns the symbol used for continuing lines in deeper levels.
+ *
+ * @return the continuation symbol
+ */
+ public String getContinuationSymbol() {
+ return continuationSymbol;
+ }
+
+ /**
+ * Returns the symbol used for empty indentation (no connection line).
+ *
+ * @return the empty indentation symbol
+ */
+ public String getEmptySymbol() {
+ return emptySymbol;
+ }
+
+}
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java
new file mode 100644
index 0000000..bf8f21f
--- /dev/null
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java
@@ -0,0 +1,36 @@
+package io.github.computerdaddyguy.jfiletreeprettyprinter.options;
+
+public final class TreeFormats {
+
+ /**
+ * Uses characters: |--, `-- and β
+ */
+ public static final TreeFormat CLASSIC_ASCII = new TreeFormat("|--", "`--", "β ", " ");
+
+ /**
+ * Uses characters: ββ, ββ and β
+ */
+ public static final TreeFormat UNICODE_BOX_DRAWING = new TreeFormat("ββ", "ββ", "β ", " ");
+
+ private TreeFormats() {
+ // Helper class
+ }
+
+ /**
+ * Constructs a new {@link TreeFormat} instance.
+ *
+ * @param nonLastChildSymbol the symbol used to connect non-last children (e.g. {@code "ββ"})
+ * @param lastChildSymbol the symbol used to connect the last child (e.g. {@code "ββ"})
+ * @param continuationSymbol the symbol used for vertical continuation (e.g. {@code "β "})
+ * @param emptySymbol the symbol used for empty indentation (e.g. {@code " "})
+ *
+ * @throws NullPointerException if any argument is {@code null}
+ * @throws IllegalArgumentException if the provided symbols do not all have the same length
+ *
+ * @see TreeFormat
+ */
+ public static TreeFormat create(String nonLastChildSymbol, String lastChildSymbol, String continuationSymbol, String emptySymbol) {
+ return new TreeFormat(nonLastChildSymbol, lastChildSymbol, continuationSymbol, emptySymbol);
+ }
+
+}
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java
index 276b20f..f25d520 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java
@@ -1,7 +1,5 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.Depth;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.DepthFormatter;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.MaxDepthReachEntry;
@@ -15,10 +13,10 @@
@NullMarked
class DefaultLineRenderer implements LineRenderer {
- private final DepthFormatter treeFormatter;
+ private final TreeFormatter treeFormatter;
private final FileFormatter fileFormatter;
- public DefaultLineRenderer(DepthFormatter treeFormatter, FileFormatter fileFormatter) {
+ public DefaultLineRenderer(TreeFormatter treeFormatter, FileFormatter fileFormatter) {
this.treeFormatter = Objects.requireNonNull(treeFormatter, "treeFormatter formatter is null");
this.fileFormatter = Objects.requireNonNull(fileFormatter, "fileFormatter formatter is null");
}
diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java
index 7e5694f..7f7fef5 100644
--- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java
+++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java
@@ -1,7 +1,5 @@
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.Depth;
-import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.DepthSymbol;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;
@@ -75,7 +73,7 @@ private String renderDirectory(Depth depth, DirectoryEntry dirEntry, List