Just a trivial test
Header row, column 1 Header 2 Header 3 Header 4 row 1, column1 column 2 column 3 column 4 body row 2 ... ...
(defun yh/orgtbl-to-rst-paddings (table) | |
(let* ((pruned-table (remove 'hline table)) | |
(size-table (mapcar (lambda (row) | |
(mapcar #'length row)) | |
pruned-table))) | |
(apply #'mapcar* #'max size-table))) | |
(defun yh/orgtbl-padded-hline (paddings &optional chr) | |
(let ((chr (or chr ?-))) | |
(concat (format "+%c" chr) | |
(mapconcat (lambda (size) | |
(make-string size chr)) paddings | |
(format "%c+%c" chr chr)) | |
(format "%c+" chr)))) | |
(defun yh/orgtbl-to-rst (table params) | |
"Convert the Orgtbl mode TABLE to ReST." | |
(let* ((indent (make-string (or (plist-get params :indent) 0) ?\ )) | |
(paddings (yh/orgtbl-to-rst-paddings table)) | |
(hline (concat indent (yh/orgtbl-padded-hline paddings))) | |
(hlend (concat indent (yh/orgtbl-padded-hline paddings ?=))) | |
(lfmt (concat indent "| " | |
(mapconcat (lambda (size) | |
(format "%%-%ds" size)) paddings | |
" | ") " |")) | |
(hlfmt (concat lfmt "\n" hlend)) | |
(params2 | |
(list | |
:tstart (concat "\n" hline) :tend (concat hline "\n") :hline hline | |
:lfmt lfmt :hlfmt hlfmt :skipheadrule t))) | |
(orgtbl-to-generic table (org-combine-plists params2 params)))) | |
(push `(rst-mode ,(concat | |
".. BEGIN RECEIVE ORGTBL %n\n" | |
"\n" | |
".. END RECEIVE ORGTBL %n\n" | |
"\n" | |
"..\n" | |
" #+ORGTBL: SEND %n yh/orgtbl-to-rst :splice nil :skip 0\n" | |
" | | |\n")) | |
orgtbl-radio-table-templates) |