package ui;
import model.html.ElementNode;
import model.html.HtmlParser;
import model.html.TextNode;
import model.util.Node;
import java.nio.file.*;
import java.util.*;
/**
* The console interface to Apus.
*/
public class BrowserApp {
private Scanner input;
/**
* EFFECTS: Renders an arbitrary HTML page and arbitrary HTML input.
*/
public BrowserApp() {
println("apus: currently a barebones html/css renderer");
println("please provide a path to a file (examples located in data/*):");
String pathString = input.next();
Path path = Path.of(pathString);
try {
String file = Files.readString(path);
HtmlParser parser = new HtmlParser();
renderHtml(parser.parseHtml(file));
println("Page rendered. Input raw HTML to add Nodes.");
parser = new HtmlParser();
String rawHtml = input.next();
renderHtml(parser.parseHtml(file + rawHtml));
} catch (Exception e) {
println("Reading from the file failed with " + e.toString());
}
}
/**
* EFFECTS: Barebones HTML rendering. Iterates through a list of Nodes and their children and prints any text.
*/
private void renderHtml(ArrayList html) {
for (Node node: html) {
if (node instanceof TextNode) {
println(node.getData());
} else {
renderHtml(((ElementNode) node).getChildren());
}
}
}
private void print(String toPrint) {
System.out.print(toPrint);
}
private void println(String toPrint) {
System.out.println(toPrint);
}
}