emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] ob-java


From: ian martins
Subject: Re: [PATCH] ob-java
Date: Mon, 5 Oct 2020 09:23:41 -0400

I wrote those examples in an org file so I could test as I wrote them, and then exported it to make it more readable, but the export resulted in source block headers being lost.  Here is the same without export:
----
* Changes

- support for functional mode (~:results value~)
- accept variables
- don't require package, class, and main definitions
- write source and result tempfiles to ~org-babel-temporary-directory~, but respects the ~:dir~ header
- work with tramp

* Examples
** Example 1
This outputs "hello."  If class and main definitions aren't given the
code block will be wrapped in generic ones.

#+begin_src java :results output silent
  System.out.print("hello");
#+end_src

This is exactly equivalent:

#+begin_src java :results output silent
  public class Main {
      public static void main(String[] args) {
          System.out.print("hello");
      }
  }
#+end_src

** Example 2
This also outputs "hello."

#+begin_src java :results value silent
  return "hello";
#+end_src

** Example 3
This generates the class "Example" in the package "org.orgmode" in the
current directory.

#+begin_src java :results output silent :classname org.orgmode.Example :dir .
  System.out.print("hello, org-mode");
#+end_src

** Example 4
The "Hey" class defines a static method but no main. C-c C-c on the
"Hey" source block will write "./org/orgmode/Hey.java" and compile it.

The "Main" class calls the "Hey" class. C-c C-c on the "Main" source
block will write "./org/orgmode/Main.java" and compile and run it.

#+begin_src java :results output silent :dir .
  package org.orgmode;

  public class Hey {
      public static String say() {
          return "hey";
      }
  }
#+end_src

#+begin_src java :results output silent :dir .
  package org.orgmode;

  public class Main {
      public static void main(String[] args) {
          System.out.print(Hey.say());
      }
  }
#+end_src

Instead of C-c C-c, we could have added tangle headers and written the
source files out by tangling.

** Example 5
This prints the variable from the header

#+begin_src java :var msg="hello, org-mode" :results output silent
  System.out.print(msg);
#+end_src

** Example 6
This prints "hello, org-mode." The table is provided to the method as a list of lists.

#+name: table
| message | hello, org-mode  |

#+begin_src java :var tbl=table :results output silent
  System.out.print(tbl.get(0).get(1));
#+end_src

** Example 7
This example returns a list.

Note that you're allowed to specify imports without defining the class
or main methods.

#+begin_src java :results value :exports both
  import java.util.Arrays;

  return Arrays.asList("message", "hello, org-mode");
#+end_src

#+RESULTS:
| message | hello, org-mode |

On Mon, Oct 5, 2020 at 8:35 AM ian martins <ianxm@jhu.edu> wrote:
1 Changes
=========

  - support for functional mode (`:results value')
  - accept variables
  - don't require package, class, and main definitions
  - write source and result tempfiles to
    `org-babel-temporary-directory', but respects the `:dir' header
  - work with tramp


2 Examples
==========
Some examples follow.  See the tests for more examples.  I'll write proper docs after review.

2.1 Example 1
~~~~~~~~~~~~~

  This outputs "hello."  If class and main definitions aren't given the
  code block will be wrapped in generic ones.

  ,----
  | System.out.print("hello");
  `----

  This is exactly equivalent:

  ,----
  | public class Main {
  |     public static void main(String[] args) {
  |         System.out.print("hello");
  |     }
  | }
  `----


2.2 Example 2
~~~~~~~~~~~~~

  This also outputs "hello."

  ,----
  | return "hello";
  `----


2.3 Example 3
~~~~~~~~~~~~~

  This generates the class "Example" in the package "org.orgmode" in the
  current directory.

  ,----
  | System.out.print("hello, org-mode");
  `----


2.4 Example 4
~~~~~~~~~~~~~

  The "Hey" class defines a static method but no main. C-c C-c on the
  "Hey" source block will write "./org/orgmode/Hey.java" and compile it.

  The "Main" class calls the "Hey" class. C-c C-c on the "Main" source
  block will write "./org/orgmode/Main.java" and compile and run it.

  ,----
  | package org.orgmode;
  |
  | public class Hey {
  |     public static String say() {
  |         return "hey";
  |     }
  | }
  `----

  ,----
  | package org.orgmode;
  |
  | public class Main {
  |     public static void main(String[] args) {
  |         System.out.print(Hey.say());
  |     }
  | }
  `----

  Instead of C-c C-c, we could have added tangle headers and written the
  source files out by tangling.


2.5 Example 5
~~~~~~~~~~~~~

  This prints the variable from the header

  ,----
  | System.out.print(msg);
  `----


2.6 Example 6
~~~~~~~~~~~~~

  This prints "hello, org-mode." The table is provided to the method as
  a list of lists.

   message  hello, org-mode

  ,----
  | System.out.print(tbl.get(0).get(1));
  `----


2.7 Example 7
~~~~~~~~~~~~~

  This example returns a list.

  Note that you're allowed to specify imports without defining the class
  or main methods.

  ,----
  | import java.util.Arrays;
  |
  | return Arrays.asList("message", "hello, org-mode");
  `----

   message  hello, org-mode

reply via email to

[Prev in Thread] Current Thread [Next in Thread]