+ public static class Doc {
+ public Header head;
+ public Body body;
+ }
+ public static class kv { public String key; public Text[] val; }
+ public static class Header {
+ public void attrs(kv[] kvs) {
+ for(int i=0; i<kvs.length; i++)
+ System.out.println("key="+kvs[i].key+" val="+kvs[i].val);
+ }
+ }
+ public static class Body {
+ Section[] sections;
+ }
+ public static class Section { }
+ public static abstract class Text {
+ public static final Class[] subclasses = new Class[] { Chars.class, URL.class, Email.class };
+ }
+ public static class Chars extends Text { String chars; }
+ public static class Symbol extends Text { String chars; }
+ public static class Email extends Text { String user; Host host; }
+ public static interface Host { }
+ public static class DNS implements Host { String[] part; }
+ public static class IP implements Host { int a, b, c, d; }
+ public static class URL extends Text { String method; Host host; int port; String path; }
+ public static class Italic extends Text { Text body; }
+