FileDocCategorySizeDatePackage
GenMML.javaAPI DocExample4215Sun Feb 08 21:34:12 GMT 2004None

GenMML

public class GenMML extends Object implements XmlFormWalker
Class with code to walk a tree and convert it to MML (not MIF). WAY OUT OF DATE W.R.T. THE "DTD" -- DO NOT USE!!
author
Ian F. Darwin, http://www.darwinsys.com/
version
$Id: GenMML.java,v 1.11 2004/02/09 03:34:11 ian Exp $

Fields Summary
PrintStream
msg
The normal output writer
StyledPrintStream
smsg
Specialized PrintWriter for use by GetMark.
GetMark
gm
A GetMark converter for source code.
Document
theDocument
Constructors Summary
GenMML(Document doc, PrintStream pw)
Construct a converter object


	     
	    
		theDocument = doc;
		msg = new PrintStream(pw);
		smsg = new StyledPrintStream(msg);
	
Methods Summary
public voidconvertAll()
Convert all the nodes in the current document.


		msg.println("<MML 1.00 -- MML produced by XmlForm>");
		msg.println("<Include \"xmlformat.mml\">");

		doRecursive(theDocument);
	
protected voiddoBold(org.w3c.dom.Element p)

		msg.print("<Bold>");
		doNodes(p);
		msg.print("<Plain>");
	
protected voiddoCData(org.w3c.dom.CharacterData p)

		String s = p.getData().trim();
		if (s.length() == 0)	// Suns parser returns extra 1-space "Text"s
			return;
		msg.println(s);
	
protected voiddoChapter(org.w3c.dom.Element p)

		msg.println("<ChapterTitle>");
	
protected voiddoElement(org.w3c.dom.Element p)

		String tag = p.getTagName().toLowerCase();
		if (tag.equals("ch")) {
			doChapter(p);
		} else if (tag.equals("sc")) {
			doSection(p);
		} else if (tag.equals("ss")) {
			doSubSection(p);
		} else if (tag.equals("p")) {
			doParagraph(p);
		} else if (tag.equals("pr")) {
			msg.println("<HeadB>Problem");
		} else if (tag.equals("so")) {
			msg.println("<HeadB>Solution");
		} else if (tag.equals("di")) {
			msg.println("<HeadB>Discussion");
		} else if (tag.equals("b")) {
			doBold(p);
		} else if (tag.equals("i")) {
			doItalic(p);
		} else if (tag.equals("example")) {
			doExample(p);
		} else
			System.err.println("IGNORING UNHANDLED TAG " + tag + '(" +
				p.getClass() + '@" + p.hashCode() + ')");
	
protected voiddoExample(org.w3c.dom.Element p)

		NamedNodeMap attrs = p.getAttributes();
		Node href;
		if ((href = attrs.getNamedItem("HREF")) == null)
			throw new IllegalArgumentException(
				"node " + p + "lacks required HREF Attribute");
		String fname = href.getNodeValue();
		msg.println("<Example>");
		try {
			fname = "/javasrc/" + fname;
			LineNumberReader is = new LineNumberReader(new FileReader(fname));
			gm.process(fname, is, smsg);
		} catch(IOException e) {
			throw new IllegalArgumentException(e.toString());
		}
	
protected voiddoItalic(org.w3c.dom.Element p)

		msg.print("<Italic>");
		doNodes(p);
		msg.print("<Plain>");
	
public voiddoNode(org.w3c.dom.Node p)

		if (p.getNodeType() == Node.ELEMENT_NODE)
			doElement((Element)p);
		else if (p.getNodeType() == Node.TEXT_NODE)
			doCData((org.w3c.dom.CharacterData)p);
		else
			System.err.println("IGNORING non-Element: " +
				p.getClass() + ':" + p.toString() + "\n" +
				p.getNodeValue());
	
protected voiddoNodes(org.w3c.dom.Element p)

		NodeList nodes = p.getChildNodes();
		for (int i=0; i<nodes.getLength(); i++) {
			Node n = nodes.item(i);
			if (n instanceof CharacterData) {
				doCData((CharacterData)n);
				p.removeChild(n);
			}
		}
	
protected voiddoParagraph(org.w3c.dom.Element p)

		msg.println("<Body>");
	
protected voiddoRecursive(org.w3c.dom.Node n)

        NodeList kids;
        if (n == null)
            return;

        doNode(n);

        kids = n.getChildNodes();
        int nkids = kids.getLength();
        for (int i=0; i<nkids; i++) {
            doRecursive(kids.item(i));
        }
    
protected voiddoSection(org.w3c.dom.Element p)

		msg.println("<HeadA>");
	
protected voiddoSubSection(org.w3c.dom.Element p)

		msg.println("<HeadB>");