ReplaceReader.java Source code

Java tutorial

Introduction

Here is the source code for ReplaceReader.java

Source

/*
Core SWING Advanced Programming 
By Kim Topley
ISBN: 0 13 083292 8       
Publisher: Prentice Hall  
*/

import java.io.FileReader;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;

public class ReplaceReader {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception evt) {
        }

        JFrame f = new JFrame("JEditorPane with Custom Reader");
        JEditorPane ep = new JEditorPane();
        f.getContentPane().add(new JScrollPane(ep));
        f.setSize(400, 300);
        f.setVisible(true);

        HTMLEditorKit kit = new HTMLEditorKit() {
            public Document createDefaultDocument() {
                HTMLDocument doc = new CustomHTMLDocument(getStyleSheet());
                doc.setAsynchronousLoadPriority(4);
                doc.setTokenThreshold(100);
                return doc;
            }
        };
        ep.setEditorKit(kit);

        try {
            Document doc = ep.getDocument();
            doc.putProperty("IgnoreCharsetDirective", new Boolean(true));
            kit.read(new FileReader(args[0]), doc, 0);
        } catch (Exception e) {
            System.out.println("Exception while reading HTML " + e);
        }
    }
}

class CustomHTMLDocument extends HTMLDocument {
    CustomHTMLDocument(StyleSheet styles) {
        super(styles);
    }

    public HTMLEditorKit.ParserCallback getReader(int pos) {
        return new CustomReader(pos);
    }

    class CustomReader extends HTMLDocument.HTMLReader {
        public CustomReader(int pos) {
            super(pos);
        }

        public void flush() throws BadLocationException {
            System.out.println("flush called");
            super.flush();
        }

        public void handleText(char[] data, int pos) {
            indent();
            System.out.println("handleText <" + new String(data) + ">, pos " + pos);
            super.handleText(data, pos);
        }

        public void handleComment(char[] data, int pos) {
            indent();
            System.out.println("handleComment <" + new String(data) + ">, pos " + pos);
            super.handleComment(data, pos);
        }

        public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
            indent();
            System.out.println("handleStartTag <" + t + ">, pos " + pos);
            indent();
            System.out.println("Attributes: " + a);
            tagLevel++;
            super.handleStartTag(t, a, pos);
        }

        public void handleEndTag(HTML.Tag t, int pos) {
            tagLevel--;
            indent();
            System.out.println("handleEndTag <" + t + ">, pos " + pos);
            super.handleEndTag(t, pos);
        }

        public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
            indent();
            System.out.println("handleSimpleTag <" + t + ">, pos " + pos);
            indent();
            System.out.println("Attributes: " + a);
            super.handleSimpleTag(t, a, pos);
        }

        public void handleError(String errorMsg, int pos) {
            indent();
            System.out.println("handleError <" + errorMsg + ">, pos " + pos);
            super.handleError(errorMsg, pos);
        }

        protected void indent() {
            for (int i = 0; i < tagLevel; i++) {
                System.out.print(" ");
            }
        }

        int tagLevel;
    }
}