source: branches/0.15.x/abcl/src/org/armedbear/lisp/scripting/AbclScriptEngineFactory.java

Last change on this file was 11623, checked in by astalla, 17 years ago

Perfectioned ABCL auto-configuration when using JSR-223; added option to
compile scripts using temp files (default) or using the run-time
compiler; added example of usage of ABCL with JSR-223.

  • Property svn:eol-style set to LF
File size: 3.0 KB
Line 
1/*
2 * AbclScriptEngineFactory.java
3 *
4 * Copyright (C) 2008 Alessio Stalla
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 */
20
21package org.armedbear.lisp.scripting;
22
23import java.util.ArrayList;
24import java.util.List;
25
26import javax.script.ScriptEngine;
27import javax.script.ScriptEngineFactory;
28
29public class AbclScriptEngineFactory implements ScriptEngineFactory {
30
31    private static final AbclScriptEngine THE_ONLY_ONE_ENGINE = new AbclScriptEngine();
32 
33  @Override
34  public String getEngineName() {
35    return "ABCL Script";
36  }
37
38  @Override
39  public String getEngineVersion() {
40    return "0.1";
41  }
42
43  @Override
44  public List<String> getExtensions() {
45    List<String> extensions = new ArrayList<String>(1);
46    extensions.add("lisp");
47    return extensions;
48  }
49
50  @Override
51  public String getLanguageName() {
52    return "ANSI Common Lisp";
53  }
54
55  @Override
56  public String getLanguageVersion() {
57    return "ANSI X3.226:1994";
58  }
59
60  public static String escape(String raw) {
61    StringBuilder sb = new StringBuilder();
62    int len = raw.length();
63    char c;
64    for(int i = 0; i < len; ++i) {
65      c = raw.charAt(i);
66      if(c != '"') {
67        sb.append(c);
68      } else {
69        sb.append("\\\"");
70      }
71    }
72    return sb.toString();
73  }
74 
75  @Override
76  public String getMethodCallSyntax(String obj, String method, String... args) {
77    StringBuilder sb = new StringBuilder();
78    sb.append("(jcall \"");
79    sb.append(method);
80    sb.append("\" ");
81    sb.append(obj);
82    for(String arg : args) {
83      sb.append(" ");
84      sb.append(arg);
85    }
86    sb.append(")");
87    return sb.toString();
88  }
89
90  @Override
91  public List<String> getMimeTypes() {
92    return new ArrayList<String>();
93  }
94
95  @Override
96  public List<String> getNames() {
97    List<String> names = new ArrayList<String>(1);
98    names.add("ABCL");
99    names.add("cl");
100    names.add("Lisp");
101    names.add("Common Lisp");
102    return names;
103  }
104
105  @Override
106  public String getOutputStatement(String str) {
107    return "(cl:print \"" + str + "\")";
108  }
109
110  @Override
111  public Object getParameter(String key) {
112    // TODO Auto-generated method stub
113    return null;
114  }
115
116  @Override
117  public String getProgram(String... statements) {
118    StringBuilder sb = new StringBuilder();
119    sb.append("(cl:progn");
120    for(String stmt : statements) {
121      sb.append("\n\t");
122      sb.append(stmt);
123    }
124    sb.append(")");
125    return sb.toString();
126  }
127
128  @Override
129  public ScriptEngine getScriptEngine() {
130    return THE_ONLY_ONE_ENGINE;
131  }
132
133}
Note: See TracBrowser for help on using the repository browser.