Advertisement
irmantas_radavicius

Untitled

Apr 6th, 2022
1,151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.30 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class UnusedContentException extends Exception {
  5.     public UnusedContentException(String message){
  6.         super(message);
  7.     }
  8. }
  9.  
  10. class Aligner {
  11.     private int depth;
  12.     private boolean isBlock;
  13.     private boolean callAlign;
  14.    
  15.     public Aligner(){
  16.         this(0, false, false);     
  17.     }  
  18.     public Aligner(int depth, boolean isBlock){
  19.         this(depth, isBlock, true);    
  20.     }
  21.     public Aligner(int depth, boolean isBlock, boolean callAlign){
  22.         this.depth = depth;
  23.         this.isBlock = isBlock;
  24.         this.callAlign = callAlign;
  25.     }
  26.    
  27.     public int getDepth(){
  28.         return depth;
  29.     }  
  30.     public boolean getIsBlock(){
  31.         return isBlock;
  32.     }
  33.     public boolean shouldAlign(){
  34.         return callAlign;
  35.     }
  36.    
  37.     private String getPrefix(){
  38.         String prefix = "";
  39.         for(int j = depth; j > 0; --j){
  40.             prefix += "    ";
  41.         }      
  42.         return prefix;
  43.     }  
  44.    
  45.    
  46.     public String alignTag(String mid){
  47.         return alignTag(mid, false);
  48.     }
  49.     public String alignTag(String mid, boolean isBlock){
  50.         String str = "\n";     
  51.         String prefix = getPrefix();
  52.         str += prefix;
  53.         int index = mid.lastIndexOf("</");
  54.         if ((index > -1) && (isBlock))
  55.             str += mid.substring(0, index) + prefix + mid.substring(index);
  56.         else
  57.             str += mid;
  58.         str += "\n";
  59.         return str.replace("\n\n", "\n");
  60.     }
  61. }
  62.  
  63. class Tag {
  64.    
  65.     private String name;
  66.     private String content;
  67.     private ArrayList<Tag> elements = new ArrayList<>();
  68.    
  69.     public Tag(String name){
  70.         this(name, "");
  71.     }
  72.     public Tag(String name, String content){
  73.         this.name = name;
  74.         this.content = content;
  75.     }
  76.     public Tag(Tag other){
  77.         this(other.name, other.content);       
  78.         this.elements = new ArrayList<>(other.elements);
  79.     }
  80.    
  81.     public String getName(){
  82.         return name;
  83.     }
  84.     public String getContent(){
  85.         return content;
  86.     }  
  87.    
  88.     public Tag getElement(int i){
  89.         return elements.get(i);
  90.     }
  91.     public ArrayList<Tag> getElements(){
  92.         return elements;
  93.     }
  94.    
  95.     public Tag add(String name){
  96.         Tag temp = new Tag(name);
  97.         elements.add(temp);
  98.         return temp;
  99.     }
  100.     public Tag add(Tag inner){     
  101.         Tag temp = new Tag(inner);
  102.         elements.add(temp);
  103.         return temp;
  104.     }
  105.    
  106.        
  107.    
  108.     private String prepareTag(String mid){
  109.         String str = "";
  110.         str += ((name.length() > 0) ? ("<" + name + ">") : "");    
  111.         str += mid;
  112.         str += ((name.length() > 0) ? ("</" + name + ">") : "");               
  113.         return str;
  114.     }  
  115.  
  116.     public String export() throws UnusedContentException {
  117.         return export(new Aligner());
  118.     }
  119.     public String export(int depth) throws UnusedContentException {
  120.         return export(new Aligner(depth, true));
  121.     }  
  122.     private String export(Aligner a) throws UnusedContentException {
  123.         if (elements.size() == 0){     
  124.             String strToAlign = (content != "") ? prepareTag(content) : ("<" + name + " />");
  125.             return a.shouldAlign() ? a.alignTag(strToAlign) : strToAlign;
  126.         } else if (content == ""){
  127.             String mid = "";
  128.             for(int i = 0; i < elements.size(); ++i){
  129.                 Aligner aa = new Aligner(a.getDepth()+1, a.getIsBlock(), a.shouldAlign());
  130.                 mid += elements.get(i).export(aa);             
  131.  
  132.             }      
  133.             String strToAlign = prepareTag(mid);
  134.             return a.shouldAlign() ? a.alignTag(strToAlign, a.getIsBlock()) : strToAlign;
  135.         } else {
  136.             throw new UnusedContentException("Unused content!");
  137.         }      
  138.     }
  139.    
  140. }
  141.  
  142. public class Sandbox {     
  143.     public static void main(String args[]) {       
  144.         try {
  145.            
  146.             Tag myPage = new Tag("html");
  147.             Tag myHead = myPage.add("head");
  148.             myHead.add(new Tag("title", "Hello world!"));
  149.                    
  150.             Tag myBody = myPage.add("body");           
  151.             myBody.add(new Tag("h1", "My heading"));
  152.             myBody.add(new Tag("p", "Lorem ipsum"));           
  153.            
  154.             Tag myPar = myBody.add(new Tag("p", ""));
  155.             myPar.add(new Tag("", "My paragraph"));
  156.            
  157.             Tag myLink = new Tag("a");
  158.             Tag myImg = myLink.add(new Tag("img", ""));
  159.             Tag myTxt = myLink.add(new Tag("", "My link"));
  160.            
  161.             Tag myDiv1 = new Tag("div");
  162.             Tag myDiv2 = myDiv1.add(new Tag("div"));
  163.             Tag myDiv3 = myDiv2.add(new Tag("div"));
  164.             Tag myDiv4 = myDiv3.add(new Tag("div", "Tekstas tekstas " + myLink.export() + " tekstas tekstas"));                    
  165.             myBody.add(myDiv1);
  166.                                            
  167.             System.out.println(myPage.export(0));
  168.                        
  169.             /*
  170.             FileWriter fw = new FileWriter("index.htm");
  171.             fw.write(myPage.export());
  172.             fw.close();
  173.             */
  174.            
  175.         } catch(Exception e){
  176.             e.printStackTrace();           
  177.             System.out.println("Unexpected error, sorry!");
  178.         }          
  179.     }  
  180. }
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement