diff --git a/runtime/Java/pom.xml b/runtime/Java/pom.xml
index 918673472..fb0fcac8d 100644
--- a/runtime/Java/pom.xml
+++ b/runtime/Java/pom.xml
@@ -11,14 +11,6 @@
ANTLR 4 Runtime
The ANTLR 4 Runtime
-
-
- org.abego.treelayout
- org.abego.treelayout.core
- 1.0.1
-
-
-
src
@@ -38,7 +30,7 @@
-
+
org.apache.felix
maven-bundle-plugin
2.5.4
@@ -46,7 +38,7 @@
bundle-manifest
process-classes
-
+
org.antlr.antlr4-runtime-osgi
ANTLR 4 Runtime
@@ -55,19 +47,19 @@
${project.version}
-
+
manifest
-
+
-
+
maven-jar-plugin
2.4
-
+
${project.build.outputDirectory}/META-INF/MANIFEST.MF
-
+
@@ -78,14 +70,14 @@
package
- ${project.build.directory}/dependency-reduced-pom.xml
-
+ ${project.build.directory}/dependency-reduced-pom.xml
+
shade
-
+
diff --git a/runtime/Java/src/org/antlr/v4/runtime/RuleContext.java b/runtime/Java/src/org/antlr/v4/runtime/RuleContext.java
index d2f9ea70e..6cde47e67 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/RuleContext.java
+++ b/runtime/Java/src/org/antlr/v4/runtime/RuleContext.java
@@ -34,7 +34,6 @@ import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
import org.antlr.v4.runtime.tree.RuleNode;
import org.antlr.v4.runtime.tree.Trees;
-import org.antlr.v4.runtime.tree.gui.TreeViewer;
import javax.print.PrintException;
import javax.swing.*;
@@ -183,49 +182,6 @@ public class RuleContext implements RuleNode {
@Override
public T accept(ParseTreeVisitor extends T> visitor) { return visitor.visitChildren(this); }
- /** Call this method to view a parse tree in a dialog box visually. */
- public Future inspect(Parser parser) {
- List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
- return inspect(ruleNames);
- }
-
- public Future inspect(List ruleNames) {
- TreeViewer viewer = new TreeViewer(ruleNames, this);
- return viewer.open();
- }
-
- /** Save this tree in a postscript file */
- public void save(Parser parser, String fileName)
- throws IOException, PrintException
- {
- List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
- save(ruleNames, fileName);
- }
-
- /** Save this tree in a postscript file using a particular font name and size */
- public void save(Parser parser, String fileName,
- String fontName, int fontSize)
- throws IOException
- {
- List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
- save(ruleNames, fileName, fontName, fontSize);
- }
-
- /** Save this tree in a postscript file */
- public void save(List ruleNames, String fileName)
- throws IOException, PrintException
- {
- Trees.writePS(this, ruleNames, fileName);
- }
-
- /** Save this tree in a postscript file using a particular font name and size */
- public void save(List ruleNames, String fileName,
- String fontName, int fontSize)
- throws IOException
- {
- Trees.writePS(this, ruleNames, fileName, fontName, fontSize);
- }
-
/** Print out a whole tree, not just a node, in LISP format
* (root child1 .. childN). Print just a node if this is a leaf.
* We have to know the recognizer so we can get rule names.
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/Trees.java b/runtime/Java/src/org/antlr/v4/runtime/tree/Trees.java
index 153e6178b..c58ee3dbe 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/Trees.java
+++ b/runtime/Java/src/org/antlr/v4/runtime/tree/Trees.java
@@ -37,12 +37,7 @@ import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.misc.Predicate;
import org.antlr.v4.runtime.misc.Utils;
-import org.antlr.v4.runtime.tree.gui.TreePostScriptGenerator;
-import org.antlr.v4.runtime.tree.gui.TreeTextProvider;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -51,41 +46,6 @@ import java.util.List;
/** A set of utility routines useful for all kinds of ANTLR trees. */
public class Trees {
-
- public static String getPS(Tree t, List ruleNames,
- String fontName, int fontSize)
- {
- TreePostScriptGenerator psgen =
- new TreePostScriptGenerator(ruleNames, t, fontName, fontSize);
- return psgen.getPS();
- }
-
- public static String getPS(Tree t, List ruleNames) {
- return getPS(t, ruleNames, "Helvetica", 11);
- }
-
- public static void writePS(Tree t, List ruleNames,
- String fileName,
- String fontName, int fontSize)
- throws IOException
- {
- String ps = getPS(t, ruleNames, fontName, fontSize);
- FileWriter f = new FileWriter(fileName);
- BufferedWriter bw = new BufferedWriter(f);
- try {
- bw.write(ps);
- }
- finally {
- bw.close();
- }
- }
-
- public static void writePS(Tree t, List ruleNames, String fileName)
- throws IOException
- {
- writePS(t, ruleNames, fileName, "Helvetica", 11);
- }
-
/** Print out a whole tree in LISP form. {@link #getNodeText} is used on the
* node payloads to get the text for the nodes. Detect
* parse trees and extract data appropriately.
@@ -104,38 +64,23 @@ public class Trees {
return toStringTree(t, ruleNamesList);
}
- /** Print out a whole tree in LISP form. Arg nodeTextProvider is used on the
- * node payloads to get the text for the nodes.
- *
- * @since 4.5.1
- */
- public static String toStringTree(Tree t, TreeTextProvider nodeTextProvider) {
- if ( t==null ) return "null";
- String s = Utils.escapeWhitespace(nodeTextProvider.getText(t), false);
- if ( t.getChildCount()==0 ) return s;
- StringBuilder buf = new StringBuilder();
- buf.append("(");
- s = Utils.escapeWhitespace(nodeTextProvider.getText(t), false);
- buf.append(s);
- buf.append(' ');
- for (int i = 0; i0 ) buf.append(' ');
- buf.append(toStringTree(t.getChild(i), nodeTextProvider));
- }
- buf.append(")");
- return buf.toString();
- }
-
/** Print out a whole tree in LISP form. {@link #getNodeText} is used on the
* node payloads to get the text for the nodes.
*/
public static String toStringTree(final Tree t, final List ruleNames) {
- return toStringTree(t, new TreeTextProvider() {
- @Override
- public String getText(Tree node) {
- return getNodeText(node, ruleNames);
- }
- });
+ String s = Utils.escapeWhitespace(getNodeText(t, ruleNames), false);
+ if ( t.getChildCount()==0 ) return s;
+ StringBuilder buf = new StringBuilder();
+ buf.append("(");
+ s = Utils.escapeWhitespace(getNodeText(t, ruleNames), false);
+ buf.append(s);
+ buf.append(' ');
+ for (int i = 0; i0 ) buf.append(' ');
+ buf.append(toStringTree(t.getChild(i), ruleNames));
+ }
+ buf.append(")");
+ return buf.toString();
}
public static String getNodeText(Tree t, Parser recog) {
@@ -204,7 +149,7 @@ public class Trees {
if ( t==null || u==null || t.getParent()==null ) return false;
Tree p = u.getParent();
while ( p!=null ) {
- if ( t == p ) return true;
+ if ( t==p ) return true;
p = p.getParent();
}
return false;
diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/InterpreterTreeTextProvider.java b/tool-testsuite/test/org/antlr/v4/test/tool/InterpreterTreeTextProvider.java
index 96bdc7c0f..1a555c4ed 100644
--- a/tool-testsuite/test/org/antlr/v4/test/tool/InterpreterTreeTextProvider.java
+++ b/tool-testsuite/test/org/antlr/v4/test/tool/InterpreterTreeTextProvider.java
@@ -3,7 +3,7 @@ package org.antlr.v4.test.tool;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.Tree;
import org.antlr.v4.runtime.tree.Trees;
-import org.antlr.v4.runtime.tree.gui.TreeTextProvider;
+import org.antlr.v4.gui.TreeTextProvider;
import org.antlr.v4.tool.GrammarInterpreterRuleContext;
import java.util.Arrays;
diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java
index 148cfc2e2..992b11679 100644
--- a/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java
+++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestAmbigParseTrees.java
@@ -14,7 +14,7 @@ import org.antlr.v4.runtime.atn.PredictionMode;
import org.antlr.v4.runtime.atn.RuleStartState;
import org.antlr.v4.runtime.atn.Transition;
import org.antlr.v4.runtime.tree.ParseTree;
-import org.antlr.v4.runtime.tree.Trees;
+import org.antlr.v4.gui.Trees;
import org.antlr.v4.tool.Grammar;
import org.antlr.v4.tool.GrammarParserInterpreter;
import org.antlr.v4.tool.LexerGrammar;
diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java
index aa28877e2..d2afde633 100644
--- a/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java
+++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestGrammarParserInterpreter.java
@@ -34,7 +34,7 @@ import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.InterpreterRuleContext;
import org.antlr.v4.runtime.LexerInterpreter;
import org.antlr.v4.runtime.tree.ParseTree;
-import org.antlr.v4.runtime.tree.Trees;
+import org.antlr.v4.gui.Trees;
import org.antlr.v4.tool.Grammar;
import org.antlr.v4.tool.GrammarParserInterpreter;
import org.antlr.v4.tool.LexerGrammar;
diff --git a/tool-testsuite/test/org/antlr/v4/test/tool/TestLookaheadTrees.java b/tool-testsuite/test/org/antlr/v4/test/tool/TestLookaheadTrees.java
index be047ac9c..36c816340 100644
--- a/tool-testsuite/test/org/antlr/v4/test/tool/TestLookaheadTrees.java
+++ b/tool-testsuite/test/org/antlr/v4/test/tool/TestLookaheadTrees.java
@@ -7,7 +7,7 @@ import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.atn.DecisionInfo;
import org.antlr.v4.runtime.atn.LookaheadEventInfo;
import org.antlr.v4.runtime.tree.ParseTree;
-import org.antlr.v4.runtime.tree.Trees;
+import org.antlr.v4.gui.Trees;
import org.antlr.v4.tool.Grammar;
import org.antlr.v4.tool.GrammarParserInterpreter;
import org.antlr.v4.tool.LexerGrammar;
diff --git a/tool/pom.xml b/tool/pom.xml
index 1ef4c1032..890f70bf5 100644
--- a/tool/pom.xml
+++ b/tool/pom.xml
@@ -46,6 +46,11 @@
4.0.8
compile
+
+ org.abego.treelayout
+ org.abego.treelayout.core
+ 1.0.1
+
@@ -93,14 +98,14 @@
package
- ${project.build.directory}/dependency-reduced-pom.xml
-
+ ${project.build.directory}/dependency-reduced-pom.xml
+
shade
-
+
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/BasicFontMetrics.java b/tool/src/org/antlr/v4/gui/BasicFontMetrics.java
similarity index 98%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/BasicFontMetrics.java
rename to tool/src/org/antlr/v4/gui/BasicFontMetrics.java
index e280aaf99..b424a003a 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/BasicFontMetrics.java
+++ b/tool/src/org/antlr/v4/gui/BasicFontMetrics.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
/** Font metrics. The only way to generate accurate images
* in any format that contain text is to know the font metrics.
diff --git a/runtime/Java/src/org/antlr/v4/runtime/misc/GraphicsSupport.java b/tool/src/org/antlr/v4/gui/GraphicsSupport.java
similarity index 99%
rename from runtime/Java/src/org/antlr/v4/runtime/misc/GraphicsSupport.java
rename to tool/src/org/antlr/v4/gui/GraphicsSupport.java
index a35c17cc1..eb9546dc8 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/misc/GraphicsSupport.java
+++ b/tool/src/org/antlr/v4/gui/GraphicsSupport.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.misc;
+package org.antlr.v4.gui;
import javax.imageio.ImageIO;
import javax.print.DocFlavor;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/misc/JFileChooserConfirmOverwrite.java b/tool/src/org/antlr/v4/gui/JFileChooserConfirmOverwrite.java
similarity index 98%
rename from runtime/Java/src/org/antlr/v4/runtime/misc/JFileChooserConfirmOverwrite.java
rename to tool/src/org/antlr/v4/gui/JFileChooserConfirmOverwrite.java
index 302274de9..59cbb69c2 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/misc/JFileChooserConfirmOverwrite.java
+++ b/tool/src/org/antlr/v4/gui/JFileChooserConfirmOverwrite.java
@@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.misc;
+package org.antlr.v4.gui;
import javax.swing.*;
import java.io.File;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/PostScriptDocument.java b/tool/src/org/antlr/v4/gui/PostScriptDocument.java
similarity index 99%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/PostScriptDocument.java
rename to tool/src/org/antlr/v4/gui/PostScriptDocument.java
index 13832d425..7faf2db3a 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/PostScriptDocument.java
+++ b/tool/src/org/antlr/v4/gui/PostScriptDocument.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import java.awt.*;
import java.util.HashMap;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/SystemFontMetrics.java b/tool/src/org/antlr/v4/gui/SystemFontMetrics.java
similarity index 98%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/SystemFontMetrics.java
rename to tool/src/org/antlr/v4/gui/SystemFontMetrics.java
index a3447d306..fb2b17aaf 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/SystemFontMetrics.java
+++ b/tool/src/org/antlr/v4/gui/SystemFontMetrics.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import java.awt.*;
import java.awt.font.FontRenderContext;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/misc/TestRig.java b/tool/src/org/antlr/v4/gui/TestRig.java
similarity index 98%
rename from runtime/Java/src/org/antlr/v4/runtime/misc/TestRig.java
rename to tool/src/org/antlr/v4/gui/TestRig.java
index 6c35a9028..4812e5cc6 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/misc/TestRig.java
+++ b/tool/src/org/antlr/v4/gui/TestRig.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.misc;
+package org.antlr.v4.gui;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CharStream;
@@ -252,10 +252,10 @@ public class TestRig {
System.out.println(tree.toStringTree(parser));
}
if ( gui ) {
- tree.inspect(parser);
+ Trees.inspect(tree, parser);
}
if ( psFile!=null ) {
- tree.save(parser, psFile); // Generate postscript
+ Trees.save(tree, parser, psFile); // Generate postscript
}
}
catch (NoSuchMethodException nsme) {
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeLayoutAdaptor.java b/tool/src/org/antlr/v4/gui/TreeLayoutAdaptor.java
similarity index 99%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeLayoutAdaptor.java
rename to tool/src/org/antlr/v4/gui/TreeLayoutAdaptor.java
index deb9658a2..6024e3b69 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeLayoutAdaptor.java
+++ b/tool/src/org/antlr/v4/gui/TreeLayoutAdaptor.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import org.abego.treelayout.TreeForTreeLayout;
import org.antlr.v4.runtime.tree.Tree;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreePostScriptGenerator.java b/tool/src/org/antlr/v4/gui/TreePostScriptGenerator.java
similarity index 99%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreePostScriptGenerator.java
rename to tool/src/org/antlr/v4/gui/TreePostScriptGenerator.java
index fc7e83e25..d78a1c873 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreePostScriptGenerator.java
+++ b/tool/src/org/antlr/v4/gui/TreePostScriptGenerator.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import org.abego.treelayout.Configuration;
import org.abego.treelayout.NodeExtentProvider;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeTextProvider.java b/tool/src/org/antlr/v4/gui/TreeTextProvider.java
similarity index 97%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeTextProvider.java
rename to tool/src/org/antlr/v4/gui/TreeTextProvider.java
index c73037418..9a88fc083 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeTextProvider.java
+++ b/tool/src/org/antlr/v4/gui/TreeTextProvider.java
@@ -28,7 +28,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import org.antlr.v4.runtime.tree.Tree;
diff --git a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeViewer.java b/tool/src/org/antlr/v4/gui/TreeViewer.java
similarity index 99%
rename from runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeViewer.java
rename to tool/src/org/antlr/v4/gui/TreeViewer.java
index 273ec8324..0ca15f303 100644
--- a/runtime/Java/src/org/antlr/v4/runtime/tree/gui/TreeViewer.java
+++ b/tool/src/org/antlr/v4/gui/TreeViewer.java
@@ -28,15 +28,13 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package org.antlr.v4.runtime.tree.gui;
+package org.antlr.v4.gui;
import org.abego.treelayout.NodeExtentProvider;
import org.abego.treelayout.TreeForTreeLayout;
import org.abego.treelayout.TreeLayout;
import org.abego.treelayout.util.DefaultConfiguration;
import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.misc.GraphicsSupport;
-import org.antlr.v4.runtime.misc.JFileChooserConfirmOverwrite;
import org.antlr.v4.runtime.misc.Utils;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.Tree;
diff --git a/tool/src/org/antlr/v4/gui/Trees.java b/tool/src/org/antlr/v4/gui/Trees.java
new file mode 100644
index 000000000..53796ab23
--- /dev/null
+++ b/tool/src/org/antlr/v4/gui/Trees.java
@@ -0,0 +1,120 @@
+package org.antlr.v4.gui;
+
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.misc.Utils;
+import org.antlr.v4.runtime.tree.Tree;
+
+import javax.print.PrintException;
+import javax.swing.*;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Future;
+
+public class Trees {
+ /** Call this method to view a parse tree in a dialog box visually. */
+ public static Future inspect(Tree t, List ruleNames) {
+ TreeViewer viewer = new TreeViewer(ruleNames, t);
+ return viewer.open();
+ }
+
+ /** Call this method to view a parse tree in a dialog box visually. */
+ public static Future inspect(Tree t, Parser parser) {
+ List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
+ return inspect(t, ruleNames);
+ }
+
+ /** Save this tree in a postscript file */
+ public static void save(Tree t, Parser parser, String fileName)
+ throws IOException, PrintException
+ {
+ List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
+ save(t, ruleNames, fileName);
+ }
+
+ /** Save this tree in a postscript file using a particular font name and size */
+ public static void save(Tree t, Parser parser, String fileName,
+ String fontName, int fontSize)
+ throws IOException
+ {
+ List ruleNames = parser != null ? Arrays.asList(parser.getRuleNames()) : null;
+ save(t, ruleNames, fileName, fontName, fontSize);
+ }
+
+ /** Save this tree in a postscript file */
+ public static void save(Tree t, List ruleNames, String fileName)
+ throws IOException, PrintException
+ {
+ writePS(t, ruleNames, fileName);
+ }
+
+ /** Save this tree in a postscript file using a particular font name and size */
+ public static void save(Tree t,
+ List ruleNames, String fileName,
+ String fontName, int fontSize)
+ throws IOException
+ {
+ writePS(t, ruleNames, fileName, fontName, fontSize);
+ }
+
+ public static String getPS(Tree t, List ruleNames,
+ String fontName, int fontSize)
+ {
+ TreePostScriptGenerator psgen =
+ new TreePostScriptGenerator(ruleNames, t, fontName, fontSize);
+ return psgen.getPS();
+ }
+
+ public static String getPS(Tree t, List ruleNames) {
+ return getPS(t, ruleNames, "Helvetica", 11);
+ }
+
+ public static void writePS(Tree t, List ruleNames,
+ String fileName,
+ String fontName, int fontSize)
+ throws IOException
+ {
+ String ps = getPS(t, ruleNames, fontName, fontSize);
+ FileWriter f = new FileWriter(fileName);
+ BufferedWriter bw = new BufferedWriter(f);
+ try {
+ bw.write(ps);
+ }
+ finally {
+ bw.close();
+ }
+ }
+
+ public static void writePS(Tree t, List ruleNames, String fileName)
+ throws IOException
+ {
+ writePS(t, ruleNames, fileName, "Helvetica", 11);
+ }
+
+ /** Print out a whole tree in LISP form. Arg nodeTextProvider is used on the
+ * node payloads to get the text for the nodes.
+ *
+ * @since 4.5.1
+ */
+ public static String toStringTree(Tree t, TreeTextProvider nodeTextProvider) {
+ if ( t==null ) return "null";
+ String s = Utils.escapeWhitespace(nodeTextProvider.getText(t), false);
+ if ( t.getChildCount()==0 ) return s;
+ StringBuilder buf = new StringBuilder();
+ buf.append("(");
+ s = Utils.escapeWhitespace(nodeTextProvider.getText(t), false);
+ buf.append(s);
+ buf.append(' ');
+ for (int i = 0; i0 ) buf.append(' ');
+ buf.append(toStringTree(t.getChild(i), nodeTextProvider));
+ }
+ buf.append(")");
+ return buf.toString();
+ }
+
+ private Trees() {
+ }
+}