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 14 public static final BRL krl_instance; 15 16 public static final BRL brl_instance; 17 static final Object 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 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 out) 91 { 92 if (isBrlCompatible()) 93 return super.getOutputConsumer(out); 94 return new XMLPrinter(out, false); 95 } 96 97 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 apply1 (Object 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 |