import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.net.URL;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Pattern;
import javax.swing.text.ChangedCharSetException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.parser.DTD;
import javax.swing.text.html.parser.Parser;
import javax.swing.text.html.parser.TagElement;

public class Linker extends Parser {
    Set links;

    public Linker(DTD dtd) {
	super(dtd);
	links = new TreeSet();
    }

    protected void handleEmptyTag(TagElement tag) {
	HTML.Tag ht = tag.getHTMLTag();
	SimpleAttributeSet as = getAttributes();
	Object href = as.getAttribute(HTML.Attribute.HREF);
	if (href != null) {
	    links.add(href);
	}
    }

    public Set getLinks() {
	return links;
    }

    public static void main(String[] args) {
	try {
	    Linker b = new Linker(DTD.getDTD("HTML 4.01"));	
	    URL url = new URL(args[0]);
	    System.out.println("Main: " + url);
	    Reader in =
		new BufferedReader(new InputStreamReader(url.openStream()));
	    BufferedReader tty = 
		new BufferedReader(new InputStreamReader(System.in));
	    b.parse(in);
	    Iterator it = b.getLinks().iterator();
	    Pattern pattern = Pattern.compile("\\s*(y|yes|Y|Yes|YES)\\s*");
	    while (it.hasNext()) {
		String link = (String)it.next();
		System.out.print(link + " proceed (y/n) ");
		if (pattern.matcher(tty.readLine()).matches()) {
		    main(new String[] { link });
		}
	    }
	} catch(IOException e) {
	    e.printStackTrace();
	}
    }
}
