KickJava   Java API By Example, From Geeks To Geeks.

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


1 // UnwrapLinks.java - Saxon extension for unwrapping nested links
2

3 package com.nwalsh.saxon;
4
5 import java.util.Stack JavaDoc;
6 import java.util.StringTokenizer JavaDoc;
7 import org.xml.sax.*;
8 import org.w3c.dom.*;
9 import javax.xml.transform.TransformerException JavaDoc;
10 import com.icl.saxon.Controller;
11 import com.icl.saxon.expr.*;
12 import com.icl.saxon.om.*;
13 import com.icl.saxon.pattern.*;
14 import com.icl.saxon.Context;
15 import com.icl.saxon.tree.*;
16 import com.icl.saxon.functions.Extensions;
17 import com.nwalsh.saxon.UnwrapLinksEmitter;
18
19 /**
20  * <p>Saxon extension for unwrapping nested links</p>
21  *
22  * <p>$Id: UnwrapLinks.java,v 1.1 2002/06/26 11:02:05 nwalsh Exp $</p>
23  *
24  * <p>Copyright (C) 2000, 2002 Norman Walsh.</p>
25  *
26  * <p>This class provides a
27  * <a HREF="http://saxon.sf.net/">Saxon 6.*</a>
28  * implementation of a link unwrapper.</p>
29  *
30  * <p><b>Change Log:</b></p>
31  * <dl>
32  * <dt>1.0</dt>
33  * <dd><p>Initial release.</p></dd>
34  * </dl>
35  *
36  * @author Norman Walsh
37  * <a HREF="mailto:ndw@nwalsh.com">ndw@nwalsh.com</a>
38  *
39  * @version $Id: UnwrapLinks.java,v 1.1 2002/06/26 11:02:05 nwalsh Exp $
40  *
41  */

42 public class UnwrapLinks {
43   /** True if the stylesheet is producing formatting objects */
44   private static boolean foStylesheet = false;
45
46   /**
47    * <p>Constructor for UnwrapLinks</p>
48    *
49    * <p>All of the methods are static, so the constructor does nothing.</p>
50    */

51   public UnwrapLinks() {
52   }
53
54   /**
55    * <p>Find the string value of a stylesheet variable or parameter</p>
56    *
57    * <p>Returns the string value of <code>varName</code> in the current
58    * <code>context</code>. Returns the empty string if the variable is
59    * not defined.</p>
60    *
61    * @param context The current stylesheet context
62    * @param varName The name of the variable (without the dollar sign)
63    *
64    * @return The string value of the variable
65    */

66   protected static String JavaDoc getVariable(Context context, String JavaDoc varName) {
67     Value variable = null;
68     String JavaDoc varString = null;
69
70     try {
71       variable = Extensions.evaluate(context, "$" + varName);
72       varString = variable.asString();
73       return varString;
74     } catch (TransformerException JavaDoc te) {
75       System.out.println("Undefined variable: " + varName);
76       return "";
77     } catch (IllegalArgumentException JavaDoc iae) {
78       System.out.println("Undefined variable: " + varName);
79       return "";
80     }
81   }
82
83   /**
84    * <p>Setup the parameters associated with unwrapping links</p>
85    *
86    * @param context The current stylesheet context
87    *
88    */

89   private static void setupUnwrapLinks(Context context) {
90     // Get the stylesheet type
91
String JavaDoc varString = getVariable(context, "stylesheet.result.type");
92     foStylesheet = (varString.equals("fo"));
93   }
94
95   /**
96    * <p>Unwrap links</p>
97    *
98    * @param rtf The result tree fragment of the verbatim environment.
99    *
100    * @return The modified result tree fragment.
101    */

102   public static NodeSetValue unwrapLinks (Context context,
103                       NodeSetValue rtf_ns) {
104
105     FragmentValue rtf = (FragmentValue) rtf_ns;
106     boolean tryAgain = true;
107
108     setupUnwrapLinks(context);
109
110     try {
111       Controller controller = context.getController();
112       NamePool namePool = controller.getNamePool();
113
114       while (tryAgain) {
115     UnwrapLinksEmitter ulEmitter = new UnwrapLinksEmitter(controller,
116                                   namePool,
117                                   foStylesheet);
118     rtf.replay(ulEmitter);
119     tryAgain = ulEmitter.tryAgain();
120     rtf = (FragmentValue) ulEmitter.getResultTreeFragment();
121       }
122
123       return rtf;
124
125     } catch (TransformerException JavaDoc e) {
126       // This "can't" happen.
127
System.out.println("Transformer Exception in unwrapLinks");
128       return rtf;
129     }
130   }
131 }
132
Popular Tags