1   package ch.qos.logback.classic.html;
2   
3   import java.io.InputStream;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.xml.sax.EntityResolver;
8   import org.xml.sax.InputSource;
9   
10  public class XHTMLEntityResolver implements EntityResolver {
11  
12    // key: public id, value: relative path to DTD file
13    static Map<String, String> entityMap = new HashMap<String, String>();
14  
15    static {
16      entityMap.put("-//W3C//DTD XHTML 1.0 Strict//EN",
17          "/dtd/xhtml1-strict.dtd");
18      entityMap.put("-//W3C//ENTITIES Latin 1 for XHTML//EN",
19          "/dtd/xhtml-lat1.ent");
20      entityMap.put("-//W3C//ENTITIES Symbols for XHTML//EN",
21          "/dtd/xhtml-symbol.ent");
22      entityMap.put("-//W3C//ENTITIES Special for XHTML//EN",
23          "/dtd/xhtml-special.ent");
24    }
25  
26    public InputSource resolveEntity(String publicId, String systemId) {
27      //System.out.println(publicId);
28      final String relativePath = (String)entityMap.get(publicId);
29  
30      if (relativePath != null) {
31        Class clazz = getClass();
32        InputStream in =
33          clazz.getResourceAsStream(relativePath);
34        if (in == null) {
35          return null;
36        } else {
37          return new InputSource(in);
38        }
39      } else {
40        return null;
41      }
42    }
43  }