1 16 package org.outerj.daisy.publisher.serverimpl; 17 18 import org.xml.sax.ContentHandler ; 19 import org.xml.sax.SAXException ; 20 import org.xml.sax.Locator ; 21 import org.xml.sax.Attributes ; 22 import org.xml.sax.helpers.AttributesImpl ; 23 24 public class InsertBreaksInCommentsHandler implements ContentHandler { 25 private static final String DAISY_NS = "http://outerx.org/daisy/1.0"; 26 private boolean inComment = false; 27 private ContentHandler consumer; 28 29 public InsertBreaksInCommentsHandler(ContentHandler consumer) { 30 this.consumer = consumer; 31 } 32 33 public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 34 if (namespaceURI.equals(DAISY_NS) && localName.equals("comment")) { 35 inComment = true; 36 } 37 consumer.startElement(namespaceURI, localName, qName, atts); 38 } 39 40 public void characters(char ch[], int start, int length) throws SAXException { 41 if (inComment) { 42 int prevBreakPos = start - 1; 43 int end = start + length; 44 int i; 45 for (i = start; i < end; i++) { 46 if (ch[i] == '\n') { 47 if (prevBreakPos != i - 1) 48 consumer.characters(ch, prevBreakPos + 1, i - prevBreakPos - 1); 49 consumer.startElement("", "br", "br", new AttributesImpl ()); 50 consumer.endElement("", "br", "br"); 51 prevBreakPos = i; 52 } 53 } 54 if (prevBreakPos != i) { 55 consumer.characters(ch, prevBreakPos + 1, i - prevBreakPos - 1); 56 } 57 } else { 58 consumer.characters(ch, start, length); 59 } 60 } 61 62 public void endElement(String namespaceURI, String localName, String qName) throws SAXException { 63 if (namespaceURI.equals(DAISY_NS) && localName.equals("comment")) { 64 inComment = false; 65 } 66 consumer.endElement(namespaceURI, localName, qName); 67 } 68 69 public void endDocument() throws SAXException { 70 consumer.endDocument(); 71 } 72 73 public void startDocument() throws SAXException { 74 consumer.startDocument(); 75 } 76 77 public void ignorableWhitespace(char ch[], int start, int length) throws SAXException { 78 consumer.ignorableWhitespace(ch, start, length); 79 } 80 81 public void endPrefixMapping(String prefix) throws SAXException { 82 consumer.endPrefixMapping(prefix); 83 } 84 85 public void skippedEntity(String name) throws SAXException { 86 consumer.skippedEntity(name); 87 } 88 89 public void setDocumentLocator(Locator locator) { 90 consumer.setDocumentLocator(locator); 91 } 92 93 public void processingInstruction(String target, String data) throws SAXException { 94 consumer.processingInstruction(target, data); 95 } 96 97 public void startPrefixMapping(String prefix, String uri) throws SAXException { 98 consumer.startPrefixMapping(prefix, uri); 99 } 100 } 101 | Popular Tags |