KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nwalsh > saxon > ColumnUpdateEmitter


1 package com.nwalsh.saxon;
2
3 import org.xml.sax.*;
4 import com.icl.saxon.output.*;
5 import com.icl.saxon.Controller;
6 import com.icl.saxon.om.*;
7 import javax.xml.transform.TransformerException JavaDoc;
8 import com.icl.saxon.expr.FragmentValue;
9 import com.icl.saxon.tree.AttributeCollection;
10
11 /**
12  * <p>Saxon extension to scan the column widthsin a result tree fragment.</p>
13  *
14  * <p>$Id: ColumnUpdateEmitter.java,v 1.1 2001/07/16 21:23:57 nwalsh Exp $</p>
15  *
16  * <p>Copyright (C) 2000 Norman Walsh.</p>
17  *
18  * <p>This class provides a
19  * <a HREF="http://users.iclway.co.uk/mhkay/saxon/">Saxon 6.*</a>
20  * implementation to scan the column widths in a result tree
21  * fragment.</p>
22  *
23  * <p>The general design is this: the stylesheets construct a result tree
24  * fragment for some colgroup environment. That result tree fragment
25  * is "replayed" through the ColumnUpdateEmitter; the ColumnUpdateEmitter watches
26  * the cols go by and extracts the column widths that it sees. These
27  * widths are then made available.</p>
28  *
29  * <p><b>Change Log:</b></p>
30  * <dl>
31  * <dt>1.0</dt>
32  * <dd><p>Initial release.</p></dd>
33  * </dl>
34  *
35  * @author Norman Walsh
36  * <a HREF="mailto:ndw@nwalsh.com">ndw@nwalsh.com</a>
37  *
38  * @version $Id: ColumnUpdateEmitter.java,v 1.1 2001/07/16 21:23:57 nwalsh Exp $
39  *
40  */

41 public class ColumnUpdateEmitter extends CopyEmitter {
42   /** The number of columns seen. */
43   protected int numColumns = 0;
44   protected String JavaDoc width[] = null;
45   protected NamePool namePool = null;
46
47   /** The FO namespace name. */
48   protected static String JavaDoc foURI = "http://www.w3.org/1999/XSL/Format";
49
50   /** Construct a new ColumnUpdateEmitter. */
51   public ColumnUpdateEmitter(Controller controller,
52                  NamePool namePool,
53                  String JavaDoc width[]) {
54     super(controller, namePool);
55     numColumns = 0;
56     this.width = width;
57     this.namePool = namePool;
58   }
59
60   /** Examine for column info. */
61   public void startElement(int nameCode,
62             org.xml.sax.Attributes JavaDoc attributes,
63             int[] namespaces, int nscount)
64     throws TransformerException JavaDoc {
65
66     int thisFingerprint = namePool.getFingerprint(nameCode);
67     int colFingerprint = namePool.getFingerprint("", "col");
68     int foColFingerprint = namePool.getFingerprint(foURI, "table-column");
69
70     if (thisFingerprint == colFingerprint) {
71       AttributeCollection attr = new AttributeCollection(namePool, attributes);
72       int widthFingerprint = namePool.getFingerprint("", "width");
73
74       if (attr.getValueByFingerprint(widthFingerprint) == null) {
75     attr.addAttribute(widthFingerprint, "CDATA", width[numColumns++]);
76       } else {
77     attr.setAttribute(widthFingerprint, "CDATA", width[numColumns++]);
78       }
79       attributes = attr;
80     } else if (thisFingerprint == foColFingerprint) {
81       AttributeCollection attr = new AttributeCollection(namePool, attributes);
82       int widthFingerprint = namePool.getFingerprint("", "column-width");
83
84       if (attr.getValueByFingerprint(widthFingerprint) == null) {
85     attr.addAttribute(widthFingerprint, "CDATA", width[numColumns++]);
86       } else {
87     attr.setAttribute(widthFingerprint, "CDATA", width[numColumns++]);
88       }
89       attributes = attr;
90     }
91
92     rtfEmitter.startElement(nameCode, attributes, namespaces, nscount);
93   }
94 }
95
96
97
Popular Tags