KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > kawa > brl > BRL


1 package gnu.kawa.brl;
2 import gnu.mapping.*;
3 import kawa.standard.Scheme;
4 import gnu.lists.*;
5 import gnu.xml.*;
6 import gnu.expr.*;
7 import gnu.kawa.lispexpr.ReadTable;
8
9 public class BRL extends Scheme
10 {
11   // The following two fields need to be public so that the findLiteral
12
// method in gnu.expr.LitTable can find them.
13
/** Language instance for KRL dialect. */
14   public static final BRL krl_instance;
15   /** Language instance for BRL dialect. */
16   public static final BRL brl_instance;
17   static final Object JavaDoc emptyForm = new FString();
18
19   protected static final SimpleEnvironment brlEnvironment
20     = Environment.make("brl-environment", Scheme.kawaEnvironment);
21
22   static BRLReaderString brlReader = new BRLReaderString();
23
24   static
25   {
26     krl_instance = new BRL(brlEnvironment);
27     brl_instance = new BRL(brlEnvironment);
28     brl_instance.setBrlCompatible(true);
29     CallContext ctx = CallContext.getInstance();
30     Environment saveEnv = ctx.getEnvironmentRaw();
31     try
32       {
33         ctx.setEnvironmentRaw(brlEnvironment);
34         krl_instance.initBRL();
35       }
36     finally
37       {
38         ctx.setEnvironmentRaw(saveEnv);
39       }
40   }
41
42   protected BRL (Environment env)
43   {
44     super(env);
45   }
46
47   void initBRL ()
48   {
49     ModuleBody.setMainPrintValues(true);
50     try
51       {
52     loadClass("gnu.brl.stringfun");
53     loadClass("gnu.kawa.brl.progfun");
54     loadClass("gnu.kawa.servlet.HTTP");
55       }
56     catch (Throwable JavaDoc ex)
57       {
58     System.err.println("caught "+ex);
59       }
60   }
61
62   public static Language getInstance(boolean brlCompatible)
63   {
64     return brlCompatible ? getBrlInstance() : getBrlInstance();
65   }
66
67   public static BRL getKrlInstance()
68   {
69     return krl_instance;
70   }
71
72   public static BRL getBrlInstance()
73   {
74     return brl_instance;
75   }
76
77   boolean brlCompatible = false;
78
79   public boolean isBrlCompatible() { return brlCompatible; }
80   public void setBrlCompatible(boolean compat) { brlCompatible = compat; }
81
82   public gnu.text.Lexer getLexer(InPort inp, gnu.text.SourceMessages messages)
83   {
84     Compilation.defaultCallConvention = Compilation.CALL_WITH_CONSUMER;
85     BRLRead lexer = new BRLRead(inp, messages);
86     lexer.setBrlCompatible(isBrlCompatible());
87     return lexer;
88   }
89
90   public Consumer getOutputConsumer(java.io.Writer JavaDoc out)
91   {
92     if (isBrlCompatible())
93       return super.getOutputConsumer(out);
94     return new XMLPrinter(out, false);
95   }
96
97   /** The compiler insert calls to this method for applications and applets. */
98   public static void registerEnvironment()
99   {
100     Language.setDefaults(getKrlInstance());
101   }
102
103   public Expression makeBody(Expression[] exps)
104   {
105     if (isBrlCompatible())
106       return super.makeBody(exps);
107     return new ApplyExp(gnu.kawa.functions.AppendValues.appendValues, exps);
108   }
109
110   public ReadTable createReadTable ()
111   {
112     ReadTable rt = super.createReadTable();
113     rt.setBracketMode(1);
114     rt.set(']', brlReader);
115     return rt;
116   }
117
118   public Procedure getPrompter()
119   {
120     return new Prompter();
121   }
122 }
123
124 class Prompter extends Procedure1
125 {
126   public Object JavaDoc apply1 (Object JavaDoc arg)
127   {
128     InPort port = (InPort) arg;
129     int line = port.getLineNumber() + 1;
130     char state = port.readState;
131     if (state == ']')
132       return "<!--BRL:"+line+"-->";
133     else
134       {
135     if (state == '\n')
136       state = '-';
137     return "#|--BRL:"+line+state+"|#";
138       }
139   }
140 }
141
Popular Tags