Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
dafrito committed Jul 18, 2010
0 parents commit 4e89c77
Show file tree
Hide file tree
Showing 10 changed files with 634 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .classpath
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin"/>
</classpath>
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
.settings
17 changes: 17 additions & 0 deletions .project
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>jna-lua</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
48 changes: 48 additions & 0 deletions src/com/dafrito/lua/LuaStringUtil.java
@@ -0,0 +1,48 @@
package com.dafrito.lua;

public final class LuaStringUtil {

public static final LuaStringUtil INSTANCE=new LuaStringUtil();

private LuaStringUtil() {
}

public String escape(String s) {
StringBuilder sb = new StringBuilder(s);
escape(sb);
return sb.toString();
}

public void escape(StringBuilder sb) {
for (int i = 0; i < sb.length(); i++) {
String r=null;
switch (sb.charAt(i)) {
case '\u0007': r = "\\a"; break;
case '\b': r = "\\b"; break;
case '\f': r = "\\f"; break;
case '\n': r = "\\n"; break;
case '\r': r = "\\r"; break;
case '\t': r = "\\t"; break;
case '\u000b': r = "\\v"; break;
case '\\': r = "\\\\"; break;
case '"': r = "\\\""; break;
}
if(r != null) {
sb.replace(i, i+1, r);
i += r.length();
}
}
}

public String quote(String s) {
StringBuilder sb = new StringBuilder(s);
quote(sb);
return sb.toString();
}

public void quote(StringBuilder sb) {
escape(sb);
sb.insert(0, '"');
sb.append('"');
}
}
86 changes: 86 additions & 0 deletions src/com/dafrito/lua/script/LuaBindings.java
@@ -0,0 +1,86 @@
package com.dafrito.lua.script;

import java.util.AbstractMap;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

import javax.script.Bindings;
import javax.script.SimpleBindings;

public class LuaBindings extends SimpleBindings implements Bindings {

@Override
public Set<java.util.Map.Entry<String, Object>> entrySet() {
// TODO Auto-generated method stub
return null;
}

@Override
public boolean containsKey(Object key) {
// TODO Auto-generated method stub
return false;
}

@Override
public Object get(Object key) {
// TODO Auto-generated method stub
return null;
}

@Override
public Object put(String name, Object value) {
// TODO Auto-generated method stub
return null;
}

@Override
public void putAll(Map<? extends String, ? extends Object> toMerge) {
// TODO Auto-generated method stub

}

@Override
public Object remove(Object key) {
// TODO Auto-generated method stub
return null;
}

@Override
public void clear() {
// TODO Auto-generated method stub

}

@Override
public boolean containsValue(Object value) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}

@Override
public Set<String> keySet() {
// TODO Auto-generated method stub
return null;
}

@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}

@Override
public Collection<Object> values() {
// TODO Auto-generated method stub
return null;
}


}
48 changes: 48 additions & 0 deletions src/com/dafrito/lua/script/LuaScriptEngine.java
@@ -0,0 +1,48 @@
package com.dafrito.lua.script;

import java.io.Reader;

import javax.script.AbstractScriptEngine;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptException;
import javax.script.SimpleBindings;

public class LuaScriptEngine extends AbstractScriptEngine implements ScriptEngine {

private final LuaScriptEngineFactory factory;

public LuaScriptEngine(LuaScriptEngineFactory luaScriptEngineFactory) {
this.factory = luaScriptEngineFactory;
}

public LuaScriptEngine() {
this(null);
}

@Override
public Bindings createBindings() {
return new SimpleBindings();
}

@Override
public Object eval(String script, ScriptContext context)
throws ScriptException {
return 2;
}

@Override
public Object eval(Reader reader, ScriptContext context)
throws ScriptException {
// TODO Auto-generated method stub
return null;
}

@Override
public ScriptEngineFactory getFactory() {
return this.factory;
}

}
95 changes: 95 additions & 0 deletions src/com/dafrito/lua/script/LuaScriptEngineFactory.java
@@ -0,0 +1,95 @@
package com.dafrito.lua.script;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;

import com.dafrito.lua.LuaStringUtil;

public class LuaScriptEngineFactory implements ScriptEngineFactory {

private final List<String> extensions;
private final List<String> mimeTypes;
private final Map<String, String> parameters;

public LuaScriptEngineFactory() {
this.extensions = Collections.unmodifiableList(Arrays.asList("lua", "Lua"));
this.mimeTypes = Collections.unmodifiableList(Arrays.asList("application/x-lua", "text/x-lua"));

Map<String, String> params = new HashMap<String, String>();
params.put(ScriptEngine.ENGINE, this.getEngineName());
params.put(ScriptEngine.ENGINE_VERSION, this.getEngineVersion());
params.put(ScriptEngine.LANGUAGE, this.getLanguageName());
params.put(ScriptEngine.LANGUAGE_VERSION, this.getLanguageVersion());
params.put(ScriptEngine.NAME, this.extensions.get(0));
this.parameters = Collections.unmodifiableMap(params);
}

@Override
public Object getParameter(String k) {
return this.parameters.get(k);
}

@Override
public String getEngineName() {
return "JSR 223 JNA-Lua Engine";
}

@Override
public String getEngineVersion() {
return "1.0";
}

@Override
public List<String> getExtensions() {
return this.extensions;
}

@Override
public String getLanguageName() {
return "Lua";
}

@Override
public String getLanguageVersion() {
return "5.1";
}

@Override
public String getMethodCallSyntax(String arg0, String arg1, String... arg2) {
return "process:execute(a, b)";
}

@Override
public List<String> getMimeTypes() {
return this.mimeTypes;
}

@Override
public List<String> getNames() {
return this.extensions;
}

@Override
public String getOutputStatement(String v) {
StringBuilder sb = new StringBuilder(v);
LuaStringUtil.INSTANCE.quote(sb);
return "print(" + sb.toString() + ")";
}

@Override
public String getProgram(String... arg0) {
return "a = 1\nreturn b\n";
}

@Override
public ScriptEngine getScriptEngine() {
return new LuaScriptEngine(this);
}

}
34 changes: 34 additions & 0 deletions test/com/dafrito/lua/LuaStringUtilTest.java
@@ -0,0 +1,34 @@
package com.dafrito.lua;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;


public class LuaStringUtilTest {

private LuaStringUtil u;

@Before
public void setup() {
this.u = LuaStringUtil.INSTANCE;
}

@Test
public void testSingleLetterEscapes() throws Exception {
assertEquals("\\\"", u.escape("\""));
}

@Test
public void testEscape() throws Exception {
assertEquals("Trivial string is unchanged", "notime", u.escape("notime"));
assertEquals("String with quotes is escaped", "\\\"notime\\\"", u.escape("\"notime\""));
}

@Test
public void testQuote() throws Exception {
assertEquals("Trivial string is simply quoted", "\"notime\"", u.quote("notime"));
assertEquals("String with quotes is escaped", "\" \\\" \"", u.quote(" \" "));
}
}

0 comments on commit 4e89c77

Please sign in to comment.