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

Last change on this file was 12160, checked in by astalla, 15 years ago

JSR-223: methods returning lists in the script engine factory now return immutable lists.
Thanks to Clemens Blamauer.

  • Property svn:eol-style set to LF
File size: 3.1 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.Collections;
25import java.util.List;
26
27import javax.script.ScriptEngine;
28import javax.script.ScriptEngineFactory;
29
30public class AbclScriptEngineFactory implements ScriptEngineFactory {
31
32    private static final AbclScriptEngine THE_ONLY_ONE_ENGINE = new AbclScriptEngine();
33 
34  @Override
35  public String getEngineName() {
36    return "ABCL Script";
37  }
38
39  @Override
40  public String getEngineVersion() {
41    return "0.1";
42  }
43
44  @Override
45  public List<String> getExtensions() {
46    List<String> extensions = new ArrayList<String>(1);
47    extensions.add("lisp");
48    return Collections.unmodifiableList(extensions);
49  }
50
51  @Override
52  public String getLanguageName() {
53    return "ANSI Common Lisp";
54  }
55
56  @Override
57  public String getLanguageVersion() {
58    return "ANSI X3.226:1994";
59  }
60
61  public static String escape(String raw) {
62    StringBuilder sb = new StringBuilder();
63    int len = raw.length();
64    char c;
65    for(int i = 0; i < len; ++i) {
66      c = raw.charAt(i);
67      if(c != '"') {
68        sb.append(c);
69      } else {
70        sb.append("\\\"");
71      }
72    }
73    return sb.toString();
74  }
75 
76  @Override
77  public String getMethodCallSyntax(String obj, String method, String... args) {
78    StringBuilder sb = new StringBuilder();
79    sb.append("(jcall \"");
80    sb.append(method);
81    sb.append("\" ");
82    sb.append(obj);
83    for(String arg : args) {
84      sb.append(" ");
85      sb.append(arg);
86    }
87    sb.append(")");
88    return sb.toString();
89  }
90
91  @Override
92  public List<String> getMimeTypes() {
93      return Collections.unmodifiableList(new ArrayList<String>());
94  }
95
96  @Override
97  public List<String> getNames() {
98    List<String> names = new ArrayList<String>(1);
99    names.add("ABCL");
100    names.add("cl");
101    names.add("Lisp");
102    names.add("Common Lisp");
103    return Collections.unmodifiableList(names);
104  }
105
106  @Override
107  public String getOutputStatement(String str) {
108    return "(cl:print \"" + str + "\")";
109  }
110
111  @Override
112  public Object getParameter(String key) {
113    // TODO Auto-generated method stub
114    return null;
115  }
116
117  @Override
118  public String getProgram(String... statements) {
119    StringBuilder sb = new StringBuilder();
120    sb.append("(cl:progn");
121    for(String stmt : statements) {
122      sb.append("\n\t");
123      sb.append(stmt);
124    }
125    sb.append(")");
126    return sb.toString();
127  }
128
129  @Override
130  public ScriptEngine getScriptEngine() {
131    return THE_ONLY_ONE_ENGINE;
132  }
133
134}
Note: See TracBrowser for help on using the repository browser.