Posted By

guai on 09/22/11


Tagged

jruby jedit


Versions (?)

jEdit macro integrating jRuby


 / Published in: Java
 

Almost the same as my snippet for groovy, but for jruby

  1. buffer.setMode("ruby");
  2. buffers = jEdit.getBuffers();
  3. for(i = 0; i < buffers.length; i++) {
  4. jrc = buffers[i].getProperty("JRubyContainer");
  5. if(jrc != null) { break; }
  6. }
  7. if(jrc == null) {
  8. jarfilenamefilter = new java.io.FilenameFilter() {
  9. boolean accept(File dir, String name) {
  10. return name.endsWith(".jar");
  11. }
  12. };
  13. libfiles = new File(System.getenv("JRUBY_HOME") + "/lib/").listFiles(jarfilenamefilter);
  14. urls = new URL[libfiles.length];
  15. for(i = 0; i < libfiles.length; i++) {
  16. urls[i] = new URL("jar:" + libfiles[i].toURL().toString() + "!/");
  17. }
  18. jrubycl = new java.net.URLClassLoader(urls, this.getClass().getClassLoader());
  19. jrc = jrubycl.loadClass("org.jruby.embed.ScriptingContainer").newInstance();
  20. //jrc.setCompatVersion(jrubycl.loadClass("org.jruby.CompatVersion").getEnumConstants()[2]); //JRUBY1_9
  21. //jrc.setKCode(jrubycl.loadClass("org.jruby.util.KCode").getEnumConstants()[2]); //UTF8
  22. jrc.setClassLoader(jrubycl);
  23. }
  24. for(i = 0; i < buffers.length; i++) {
  25. buffers[i].setProperty("JRubyContainer", jrc);
  26. }
  27. outbuffer = buffer.getProperty("outbuffer");
  28. if((outbuffer == null) || outbuffer.isClosed()) {
  29. outbuffer = jEdit.newFile(view);
  30. buffer.setProperty("outbuffer", outbuffer);
  31. }
  32. out = new java.io.StringWriter();
  33. jrc.setWriter(out);
  34. String text() {
  35. view.showBuffer(buffer);
  36. res = textArea.getSelectedText();
  37. if(res == null || res.length() == 0) { res = buffer.getText(); }
  38. return res;
  39. }
  40. text = text();
  41. jrc.remove("DATA");
  42. ma = java.util.regex.Pattern.compile("(?sm)\\A(.+)^__END__$(.*)\\z").matcher(text);
  43. if(ma.matches()) {
  44. text = ma.group(1);
  45. jrc.put("DATA", ma.group(2));
  46. }
  47. result = jrc.runScriptlet(new java.io.ByteArrayInputStream(("# -*- encoding : utf-8 -*-\n" + text).getBytes("UTF-8")), "script.rb");
  48. outbuffer.remove(0, outbuffer.getLength());
  49. outbuffer.insert(0, out.toString());
  50. outbuffer.insert(outbuffer.getLength(),"\n\tResult: " + result);
  51. if(result != null) {
  52. view.showBuffer(outbuffer);
  53. }

Report this snippet  

You need to login to post a comment.