Skip to content

Commit

Permalink
Update to Org 9.5
Browse files Browse the repository at this point in the history
  • Loading branch information
kyleam committed Sep 30, 2021
1 parent dc94ca7 commit bf9ec3d
Show file tree
Hide file tree
Showing 120 changed files with 12,488 additions and 5,421 deletions.
899 changes: 610 additions & 289 deletions doc/misc/org.org

Large diffs are not rendered by default.

691 changes: 627 additions & 64 deletions etc/ORG-NEWS

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions etc/refcards/orgcard.tex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
% Reference Card for Org Mode
\def\orgversionnumber{9.4.2}
\def\versionyear{2019} % latest update
\def\orgversionnumber{9.5}
\def\versionyear{2021} % latest update
\input emacsver.tex

%**start of header
Expand Down
116 changes: 74 additions & 42 deletions lisp/org/ob-C.el
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

;; Author: Eric Schulte
;; Thierry Banel
;; Maintainer: Thierry Banel
;; Keywords: literate programming, reproducible research
;; Homepage: https://orgmode.org

Expand Down Expand Up @@ -94,8 +95,7 @@ This function calls `org-babel-execute:C++'."
(org-babel-execute:C++ body params))

(defun org-babel-expand-body:cpp (body params)
"Expand a block of C++ code with org-babel according to its
header arguments."
"Expand a block of C++ code with org-babel according to its header arguments."
(org-babel-expand-body:C++ body params))

(defun org-babel-execute:C++ (body params)
Expand All @@ -104,8 +104,7 @@ This function is called by `org-babel-execute-src-block'."
(let ((org-babel-c-variant 'cpp)) (org-babel-C-execute body params)))

(defun org-babel-expand-body:C++ (body params)
"Expand a block of C++ code with org-babel according to its
header arguments."
"Expand a block of C++ code with org-babel according to its header arguments."
(let ((org-babel-c-variant 'cpp)) (org-babel-C-expand-C++ body params)))

(defun org-babel-execute:D (body params)
Expand All @@ -114,8 +113,7 @@ This function is called by `org-babel-execute-src-block'."
(let ((org-babel-c-variant 'd)) (org-babel-C-execute body params)))

(defun org-babel-expand-body:D (body params)
"Expand a block of D code with org-babel according to its
header arguments."
"Expand a block of D code with org-babel according to its header arguments."
(let ((org-babel-c-variant 'd)) (org-babel-C-expand-D body params)))

(defun org-babel-execute:C (body params)
Expand All @@ -124,8 +122,7 @@ This function is called by `org-babel-execute-src-block'."
(let ((org-babel-c-variant 'c)) (org-babel-C-execute body params)))

(defun org-babel-expand-body:C (body params)
"Expand a block of C code with org-babel according to its
header arguments."
"Expand a block of C code with org-babel according to its header arguments."
(let ((org-babel-c-variant 'c)) (org-babel-C-expand-C body params)))

(defun org-babel-C-execute (body params)
Expand Down Expand Up @@ -196,13 +193,11 @@ or `org-babel-execute:C++' or `org-babel-execute:D'."
)))

(defun org-babel-C-expand-C++ (body params)
"Expand a block of C or C++ code with org-babel according to
its header arguments."
"Expand a block of C/C++ code with org-babel according to its header arguments."
(org-babel-C-expand-C body params))

(defun org-babel-C-expand-C (body params)
"Expand a block of C or C++ code with org-babel according to
its header arguments."
"Expand a block of C/C++ code with org-babel according to its header arguments."
(let ((vars (org-babel--get-vars params))
(colnames (cdr (assq :colname-names params)))
(main-p (not (string= (cdr (assq :main params)) "no")))
Expand Down Expand Up @@ -257,15 +252,21 @@ its header arguments."
(when colnames
(org-babel-C-utility-header-to-C))
;; tables headers
(mapconcat 'org-babel-C-header-to-C colnames "\n")
(mapconcat (lambda (head)
(let* ((tblnm (car head))
(tbl (cdr (car (let* ((el vars))
(while (not (or (equal tblnm (caar el)) (not el)))
(setq el (cdr el)))
el))))
(type (org-babel-C-val-to-base-type tbl)))
(org-babel-C-header-to-C head type))) colnames "\n")
;; body
(if main-p
(org-babel-C-ensure-main-wrap body)
body) "\n") "\n")))

(defun org-babel-C-expand-D (body params)
"Expand a block of D code with org-babel according to
its header arguments."
"Expand a block of D code with org-babel according to its header arguments."
(let ((vars (org-babel--get-vars params))
(colnames (cdr (assq :colname-names params)))
(main-p (not (string= (cdr (assq :main params)) "no")))
Expand All @@ -289,7 +290,14 @@ its header arguments."
(when colnames
(org-babel-C-utility-header-to-C))
;; tables headers
(mapconcat 'org-babel-C-header-to-C colnames "\n")
(mapconcat (lambda (head)
(let* ((tblnm (car head))
(tbl (cdr (car (let* ((el vars))
(while (not (or (equal tblnm (caar el)) (not el)))
(setq el (cdr el)))
el))))
(type (org-babel-C-val-to-base-type tbl)))
(org-babel-C-header-to-C head type))) colnames "\n")
;; body
(if main-p
(org-babel-C-ensure-main-wrap body)
Expand Down Expand Up @@ -333,15 +341,17 @@ FORMAT can be either a format string or a function which is called with VAL."
(list
(if (eq org-babel-c-variant 'd) "string" "const char*")
"\"%s\""))
(_ (error "unknown type %S" basetype)))))
(_ (error "Unknown type %S" basetype)))))
(cond
((integerp val) type) ;; an integer declared in the #+begin_src line
((floatp val) type) ;; a numeric declared in the #+begin_src line
((and (listp val) (listp (car val))) ;; a table
`(,(car type)
(lambda (val)
(cons
(format "[%d][%d]" (length val) (length (car val)))
(pcase org-babel-c-variant
((or `c `cpp) (format "[%d][%d]" (length val) (length (car val))))
(`d (format "[%d][%d]" (length (car val)) (length val))))
(concat
(if (eq org-babel-c-variant 'd) "[\n" "{\n")
(mapconcat
Expand Down Expand Up @@ -388,8 +398,7 @@ FORMAT can be either a format string or a function which is called with VAL."
(t 'stringp)))

(defun org-babel-C-var-to-C (pair)
"Convert an elisp val into a string of C code specifying a var
of the same value."
"Convert an elisp val into a string of C code specifying a var of the same value."
;; TODO list support
(let ((var (car pair))
(val (cdr pair)))
Expand All @@ -402,11 +411,19 @@ of the same value."
(formatted (org-babel-C-format-val type-data val))
(suffix (car formatted))
(data (cdr formatted)))
(format "%s %s%s = %s;"
type
var
suffix
data))))
(pcase org-babel-c-variant
((or `c `cpp)
(format "%s %s%s = %s;"
type
var
suffix
data))
(`d
(format "%s%s %s = %s;"
type
suffix
var
data))))))

(defun org-babel-C-table-sizes-to-C (pair)
"Create constants of table dimensions, if PAIR is a table."
Expand All @@ -421,19 +438,23 @@ of the same value."
(format "const int %s_cols = %d;" (car pair) (length (cdr pair)))))))

(defun org-babel-C-utility-header-to-C ()
"Generate a utility function to convert a column name
into a column number."
"Generate a utility function to convert a column name into a column number."
(pcase org-babel-c-variant
((or `c `cpp)
"int get_column_num (int nbcols, const char** header, const char* column)
(concat
"
#ifndef _STRING_H
#include <string.h>
#endif
int get_column_num (int nbcols, const char** header, const char* column)
{
int c;
for (c=0; c<nbcols; c++)
if (strcmp(header[c],column)==0)
return c;
return -1;
}
")
"))
(`d
"int get_column_num (string[] header, string column)
{
Expand All @@ -444,29 +465,40 @@ into a column number."
}
")))

(defun org-babel-C-header-to-C (head)
(defun org-babel-C-header-to-C (head type)
"Convert an elisp list of header table into a C or D vector
specifying a variable with the name of the table."
(message "%S" type)
(let ((table (car head))
(headers (cdr head)))
(headers (cdr head))
(typename (pcase type
(`integerp "int")
(`floatp "double")
(`stringp (pcase org-babel-c-variant
((or `c `cpp) "const char*")
(`d "string"))))))
(concat
(format
(pcase org-babel-c-variant
((or `c `cpp) "const char* %s_header[%d] = {%s};")
(`d "string %s_header[%d] = [%s];"))
table
(length headers)
(mapconcat (lambda (h) (format "%S" h)) headers ","))
(pcase org-babel-c-variant
((or `c `cpp)
(format "const char* %s_header[%d] = {%s};"
table
(length headers)
(mapconcat (lambda (h) (format "\"%s\"" h)) headers ",")))
(`d
(format "string[%d] %s_header = [%s];"
(length headers)
table
(mapconcat (lambda (h) (format "\"%s\"" h)) headers ","))))
"\n"
(pcase org-babel-c-variant
((or `c `cpp)
(format
"const char* %s_h (int row, const char* col) { return %s[row][get_column_num(%d,%s_header,col)]; }"
table table (length headers) table))
"%s %s_h (int row, const char* col) { return %s[row][get_column_num(%d,%s_header,col)]; }"
typename table table (length headers) table))
(`d
(format
"string %s_h (size_t row, string col) { return %s[row][get_column_num(%s_header,col)]; }"
table table table))))))
"%s %s_h (size_t row, string col) { return %s[row][get_column_num(%s_header,col)]; }"
typename table table table))))))

(provide 'ob-C)

Expand Down
Loading

0 comments on commit bf9ec3d

Please sign in to comment.