package org.wikiwebserver.util;

import java.text.ParseException;
import java.util.Map;

import page.tools.xml.WikiParser;


public class AudioPageReformatter extends WikiParser {
    
    private StringBuilder reformatted = new StringBuilder();
    
    private boolean silenced = false;
    
    private static final String[] PAUSE_TAGS = { 
        "p", "br", "h1", "h2", "h3", "h4", "td", "tr", "li", "div"
    };
    
    public AudioPageReformatter() {
    }
    
    public String reformat(String page) {
        if (page == null) return null;
        
        try {
            parse(page);
        } catch (ParseException ex) {
            append("I cant reed that page, the html is horrible!");
        }
        
        String r = reformatted.toString();
        
        r = r.replace("&nbsp;", " ");
        r = r.replace("&quot;", "\"");
        r = r.replace("&gt;", ">");
        r = r.replace("&lt;", "<");
        r = r.replace("&amp", "&");
        
        return r;
    }
    
    
    
    
    
    
    

    public void openTag(String tagName, Map<String, String> attributes) {   
        
        if (tagName.equals("style")) {
            silenced = true;
        } 
        
        else if (tagName.equals("script")) {
            silenced = true;
        }   
        
        else {
            
            for (String tag : PAUSE_TAGS) {
                if (tagName.equals(tag)) {
                    pause();
                    break;
                }
            }            
        }         
        
        if (!silenced) {
            String text = getTextAfterTag();
            if (text != null) {
                append(text);
            }
        }
    }
    
    public void closeTag(String tagName) {
        
        if (tagName.equals("style")) {
            silenced = false;
        } 
        
        else if (tagName.equals("script")) {
            silenced = false;
        }         
        
        else {
            
            for (String tag : PAUSE_TAGS) {
                if (tagName.equals(tag)) {
                    pause();
                    break;
                }
            }            
        } 
        
        if (!silenced) {
            String text = getTextAfterTag();
            if (text != null) {
                append(text);
            }
        }        
    }
    
    public void append(String text) {
        reformatted.append(text);
    }
    
    public void pause() {
        reformatted.append(". ");
    }
}

