package nota.oxygen.epub;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
public class SplitHandler extends DefaultHandler {
private Map<String, String> htmlAttributes;
private String title;
private Map<String, String> metaNodes;
private List<String> cssLinks;
private String characterData;
public SplitHandler() {
htmlAttributes = new HashMap<String, String>();
metaNodes = new LinkedHashMap <String, String>();
cssLinks = new ArrayList<String>();
}
public Map<String, String> getHtmlAttributes() {
return htmlAttributes;
}
public String getTitle() {
return title;
}
public Map<String, String> getMetaNodes() {
return metaNodes;
}
public List<String> getCssLinks() {
return cssLinks;
}
public void startDocument() {
}
public void endDocument() {
}
public void startElement(String uri, String localName, String qualifiedName, Attributes attributes) {
if (qualifiedName.equals("html")) {
if (attributes != null) {
for (int i = 0; i < attributes.getLength(); i++) {
if (!htmlAttributes.containsKey(attributes.getQName(i))) {
String key = attributes.getQName(i);
String value = attributes.getValue(i);
if (key.equals("lang") && value.equals("")) value = "da";
if (key.equals("xml:lang") && value.equals("")) value = "da";
htmlAttributes.put(key, value);
}
}
}
}
if (qualifiedName.equals("meta")) {
if (attributes != null) {
String name = null;
String content = null;
for (int i = 0; i < attributes.getLength(); i++) {
if (attributes.getQName(i).equals("name")) name = attributes.getValue(i);
else if (attributes.getQName(i).equals("content")) content = attributes.getValue(i);
}
if (name != null && !metaNodes.containsKey(name)) {
metaNodes.put(name, content);
}
}
}
if (qualifiedName.equals("link")) {
if (attributes != null) {
for (int i = 0; i < attributes.getLength(); i++) {
if (attributes.getQName(i).equals("href")) {
if (!cssLinks.contains(attributes.getValue(i))) {
cssLinks.add(attributes.getValue(i));
}
}
}
}
}
}
public void endElement(String uri, String localName, String qualifiedName) {
if (qualifiedName.equals("title") && title == null) {
title = characterData;
}
}
public void characters(char characters[], int start, int length) {
characterData = new String(characters, start, length);
characterData = characterData.replaceAll("&(?!amp;)", "&");
characterData = characterData.replaceAll("<", "<");
characterData = characterData.replaceAll(">", ">");
characterData = characterData.replaceAll("\"", """);
characterData = characterData.replaceAll("'", "'");
}
}