Add HTMLRenderer

This commit is contained in:
Manuel Friedli 2020-10-01 00:48:54 +02:00
parent e10621c08c
commit 0a655bd617
2 changed files with 68 additions and 2 deletions

View file

@ -0,0 +1,65 @@
package ch.fritteli.labyrinth;
import lombok.NonNull;
public class HTMLRenderer {
private static final String PREAMBLE = "<!DOCTYPE html><html><head><title>Labyrinth</title><style>table{border-collapse:collapse;}td{border:0 solid black;height:1em;width:1em;}td.top{border-top-width:1px;}td.right{border-right-width:1px;}td.bottom{border-bottom-width:1px;}td.left{border-left-width:1px;}</style></head><body>";
private static final String POSTAMBLE = "</body></html>";
private final Labyrinth labyrinth;
private final int width;
private final int height;
// row counter
private int y = 0;
private HTMLRenderer(@NonNull final Labyrinth labyrinth, final int width, final int height) {
this.labyrinth = labyrinth;
this.width = width;
this.height = height;
}
public static String render(@NonNull final Labyrinth labyrinth) {
final int width = labyrinth.getWidth();
final int height = labyrinth.getHeight();
if (width == 0 || height == 0) {
return PREAMBLE + POSTAMBLE;
}
final HTMLRenderer renderer = new HTMLRenderer(labyrinth, width, height);
final StringBuilder sb = new StringBuilder(PREAMBLE);
sb.append("<table>");
while (renderer.hasNext()) {
sb.append(renderer.next());
}
sb.append("</table>");
sb.append(POSTAMBLE);
return sb.toString();
}
private boolean hasNext() {
return this.y < this.height;
}
private String next() {
StringBuilder sb = new StringBuilder("<tr>");
for (int x = 0; x < this.width; x++) {
final Tile currentTile = this.labyrinth.getTileAt(x, this.y);
sb.append("<td class=\"");
if (currentTile.hasWallAt(Direction.TOP)) {
sb.append("top ");
}
if (currentTile.hasWallAt(Direction.RIGHT)) {
sb.append("right ");
}
if (currentTile.hasWallAt(Direction.BOTTOM)) {
sb.append("bottom ");
}
if (currentTile.hasWallAt(Direction.LEFT)) {
sb.append("left ");
}
sb.append("\">&nbsp;</td>");
}
sb.append("</tr>");
this.y++;
return sb.toString();
}
}

View file

@ -4,9 +4,10 @@ import lombok.NonNull;
public class Main { public class Main {
public static void main(@NonNull final String[] args) { public static void main(@NonNull final String[] args) {
int width = 110; int width = 100;
int height = 15; int height = 50;
final Labyrinth labyrinth = new Labyrinth(width, height); final Labyrinth labyrinth = new Labyrinth(width, height);
System.out.println(TextRenderer.render(labyrinth)); System.out.println(TextRenderer.render(labyrinth));
System.out.println(HTMLRenderer.render(labyrinth));
} }
} }