Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.io.*;
- class UnusedContentException extends Exception {
- public UnusedContentException(String message){
- super(message);
- }
- }
- class Aligner {
- private int depth;
- private boolean isBlock;
- private boolean callAlign;
- public Aligner(){
- this(0, false, false);
- }
- public Aligner(int depth, boolean isBlock){
- this(depth, isBlock, true);
- }
- public Aligner(int depth, boolean isBlock, boolean callAlign){
- this.depth = depth;
- this.isBlock = isBlock;
- this.callAlign = callAlign;
- }
- public int getDepth(){
- return depth;
- }
- public boolean getIsBlock(){
- return isBlock;
- }
- public boolean shouldAlign(){
- return callAlign;
- }
- private String getPrefix(){
- String prefix = "";
- for(int j = depth; j > 0; --j){
- prefix += " ";
- }
- return prefix;
- }
- public String alignTag(String mid){
- return alignTag(mid, false);
- }
- public String alignTag(String mid, boolean isBlock){
- String str = "\n";
- String prefix = getPrefix();
- str += prefix;
- int index = mid.lastIndexOf("</");
- if ((index > -1) && (isBlock))
- str += mid.substring(0, index) + prefix + mid.substring(index);
- else
- str += mid;
- str += "\n";
- return str.replace("\n\n", "\n");
- }
- }
- class Tag {
- private String name;
- private String content;
- private ArrayList<Tag> elements = new ArrayList<>();
- public Tag(String name){
- this(name, "");
- }
- public Tag(String name, String content){
- this.name = name;
- this.content = content;
- }
- public Tag(Tag other){
- this(other.name, other.content);
- this.elements = new ArrayList<>(other.elements);
- }
- public String getName(){
- return name;
- }
- public String getContent(){
- return content;
- }
- public Tag getElement(int i){
- return elements.get(i);
- }
- public ArrayList<Tag> getElements(){
- return elements;
- }
- public Tag add(String name){
- Tag temp = new Tag(name);
- elements.add(temp);
- return temp;
- }
- public Tag add(Tag inner){
- Tag temp = new Tag(inner);
- elements.add(temp);
- return temp;
- }
- private String prepareTag(String mid){
- String str = "";
- str += ((name.length() > 0) ? ("<" + name + ">") : "");
- str += mid;
- str += ((name.length() > 0) ? ("</" + name + ">") : "");
- return str;
- }
- public String export() throws UnusedContentException {
- return export(new Aligner());
- }
- public String export(int depth) throws UnusedContentException {
- return export(new Aligner(depth, true));
- }
- private String export(Aligner a) throws UnusedContentException {
- if (elements.size() == 0){
- String strToAlign = (content != "") ? prepareTag(content) : ("<" + name + " />");
- return a.shouldAlign() ? a.alignTag(strToAlign) : strToAlign;
- } else if (content == ""){
- String mid = "";
- for(int i = 0; i < elements.size(); ++i){
- Aligner aa = new Aligner(a.getDepth()+1, a.getIsBlock(), a.shouldAlign());
- mid += elements.get(i).export(aa);
- }
- String strToAlign = prepareTag(mid);
- return a.shouldAlign() ? a.alignTag(strToAlign, a.getIsBlock()) : strToAlign;
- } else {
- throw new UnusedContentException("Unused content!");
- }
- }
- }
- public class Sandbox {
- public static void main(String args[]) {
- try {
- Tag myPage = new Tag("html");
- Tag myHead = myPage.add("head");
- myHead.add(new Tag("title", "Hello world!"));
- Tag myBody = myPage.add("body");
- myBody.add(new Tag("h1", "My heading"));
- myBody.add(new Tag("p", "Lorem ipsum"));
- Tag myPar = myBody.add(new Tag("p", ""));
- myPar.add(new Tag("", "My paragraph"));
- Tag myLink = new Tag("a");
- Tag myImg = myLink.add(new Tag("img", ""));
- Tag myTxt = myLink.add(new Tag("", "My link"));
- Tag myDiv1 = new Tag("div");
- Tag myDiv2 = myDiv1.add(new Tag("div"));
- Tag myDiv3 = myDiv2.add(new Tag("div"));
- Tag myDiv4 = myDiv3.add(new Tag("div", "Tekstas tekstas " + myLink.export() + " tekstas tekstas"));
- myBody.add(myDiv1);
- System.out.println(myPage.export(0));
- /*
- FileWriter fw = new FileWriter("index.htm");
- fw.write(myPage.export());
- fw.close();
- */
- } catch(Exception e){
- e.printStackTrace();
- System.out.println("Unexpected error, sorry!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement