Re: [Orgmode] [PATCH 3/5] Some improvements to org-table-export

2008-04-09 Thread Carsten Dominik

Also this is a fine addition, thank you very much.

- Carsten

On Mar 16, 2008, at 5:29 PM, James TD Smith wrote:


From: James TD Smith [EMAIL PROTECTED]

Specify the file to export to as parameter or property
Use the export mechanisms from orgtbl instead of the simple export.
Specify the table output format in property.

---

org.el |   91  
+---

1 files changed, 64 insertions(+), 27 deletions(-)


diff --git a/org.el b/org.el
index 021bd59..dee8471 100644
--- a/org.el
+++ b/org.el
@@ -965,6 +965,13 @@ table, obtained by prompting the user.
  (list (symbol :tag Major mode)
(string :tag Format

+(defcustom org-table-export-default orgtbl-to-generic :splice  
t :sep \\t\

+  Default export parameters for org-table-export. These can be
+  overridden on for a specific table by setting the
+  TABLE_EXPORT_FORMAT parameter. See orgtbl-export for the
+  different export transforms and available parameters.
+  :group 'org-table)
+
(defgroup org-table-settings nil
  Settings for tables in Org-mode.
  :tag Org Table Settings
@@ -975,6 +982,7 @@ table, obtained by prompting the user.
  :group 'org-table-settings
   :type 'string)

+
(defcustom org-table-number-regexp
  ^\\([]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|\\(0[xX]\\)[0-9a-fA- 
F]+\\|nan\\)$

  Regular expression for recognizing numbers in table columns.
@@ -8568,41 +8576,70 @@ are found, lines will be split on whitespace  
into fields.

(insert-file-contents file)
(org-table-convert-region beg (+ (point) (- (point-max) pm))  
arg)))


-(defun org-table-export ()
+(defun org-table-export (optional target)
  Export table as a tab-separated file.
-Such a file can be imported into a spreadsheet program like Excel.
+Such a file can be imported into a spreadsheet program like
+Excel. If TARGET is set, the table is exported to that file. If
+the property TABLE_EXPORT_FILE is set on the entry the table is
+in, the table will be exported to that file. Otherwise the user
+is prompted for a file to write the table to.
+
+If the TABLE_EXPORT_FORMAT property is set, the contents of this
+property will control export format in the same way as radio
+tables in OrgTbl mode.
+
  (interactive)
  (let* ((beg (org-table-begin))
 (end (org-table-end))
-(table (buffer-substring beg end))
-(file (read-file-name Export table to: ))
+(txt (buffer-substring-no-properties beg end))
+(file (or target (org-entry-get beg TABLE_EXPORT_FILE)
+  (read-file-name Export table to: )))
+(format (or (org-entry-get beg TABLE_EXPORT_FORMAT)
+org-table-export-default))
 buf)
(unless (or (not (file-exists-p file))
(y-or-n-p (format Overwrite file %s?  file)))
  (error Abort))
-(with-current-buffer (find-file-noselect file)
-  (setq buf (current-buffer))
-  (erase-buffer)
-  (fundamental-mode)
-  (insert table)
-  (goto-char (point-min))
-  (while (re-search-forward ^[ \t]*|[ \t]* nil t)
-   (replace-match  t t)
-   (end-of-line 1))
-  (goto-char (point-min))
-  (while (re-search-forward [ \t]*|[ \t]*$ nil t)
-   (replace-match  t t)
-   (goto-char (min (1+ (point)) (point-max
-  (goto-char (point-min))
-  (while (re-search-forward ^-[-+]*$ nil t)
-   (replace-match )
-   (if (looking-at \n)
-   (delete-char 1)))
-  (goto-char (point-min))
-  (while (re-search-forward [ \t]*|[ \t]* nil t)
-   (replace-match \t t t))
-  (save-buffer))
-(kill-buffer buf)))
+(message format)
+
+(if (string-match \\([^ \t\r\n]+\\)\\( +.*\\)? format)
+   (let* ((transform (intern (match-string 1 format)))
+  (params (if (match-end 2)
+  (read (concat ( (match-string 2 format) )
+  (skip (plist-get params :skip))
+  (skipcols (plist-get params :skipcols))
+	   (lines (nthcdr (or skip 0) (org-split-string txt [ \t]* 
\n[ \t]*)))

+  (lines (org-table-clean-before-export lines))
+  (i0 (if org-table-clean-did-remove-column 2 1))
+  (table (mapcar
+  (lambda (x)
+(if (string-match org-table-hline-regexp x)
+'hline
+  (org-remove-by-index
+   (org-split-string (org-trim x) \\s-*|\\s-*)
+   skipcols i0)))
+  lines))
+  (fun (if (= i0 2) 'cdr 'identity))
+  (org-table-last-alignment
+   (org-remove-by-index (funcall fun org-table-last-alignment)
+skipcols i0))
+  (org-table-last-column-widths
+   (org-remove-by-index (funcall fun org-table-last-column-widths)
+skipcols i0)))
+
+ (unless (fboundp transform)
+ 

[Orgmode] [PATCH 3/5] Some improvements to org-table-export

2008-03-16 Thread James TD Smith
From: James TD Smith [EMAIL PROTECTED]

Specify the file to export to as parameter or property
Use the export mechanisms from orgtbl instead of the simple export.
Specify the table output format in property.

---

 org.el |   91 +---
 1 files changed, 64 insertions(+), 27 deletions(-)


diff --git a/org.el b/org.el
index 021bd59..dee8471 100644
--- a/org.el
+++ b/org.el
@@ -965,6 +965,13 @@ table, obtained by prompting the user.
  (list (symbol :tag Major mode)
(string :tag Format
 
+(defcustom org-table-export-default orgtbl-to-generic :splice t :sep \\t\
+  Default export parameters for org-table-export. These can be
+  overridden on for a specific table by setting the
+  TABLE_EXPORT_FORMAT parameter. See orgtbl-export for the
+  different export transforms and available parameters.
+  :group 'org-table)
+
 (defgroup org-table-settings nil
   Settings for tables in Org-mode.
   :tag Org Table Settings
@@ -975,6 +982,7 @@ table, obtained by prompting the user.
   :group 'org-table-settings
:type 'string)
 
+
 (defcustom org-table-number-regexp
   
^\\([]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|\\(0[xX]\\)[0-9a-fA-F]+\\|nan\\)$
   Regular expression for recognizing numbers in table columns.
@@ -8568,41 +8576,70 @@ are found, lines will be split on whitespace into 
fields.
 (insert-file-contents file)
 (org-table-convert-region beg (+ (point) (- (point-max) pm)) arg)))
 
-(defun org-table-export ()
+(defun org-table-export (optional target)
   Export table as a tab-separated file.
-Such a file can be imported into a spreadsheet program like Excel.
+Such a file can be imported into a spreadsheet program like
+Excel. If TARGET is set, the table is exported to that file. If
+the property TABLE_EXPORT_FILE is set on the entry the table is
+in, the table will be exported to that file. Otherwise the user
+is prompted for a file to write the table to.
+
+If the TABLE_EXPORT_FORMAT property is set, the contents of this
+property will control export format in the same way as radio
+tables in OrgTbl mode.
+
   (interactive)
   (let* ((beg (org-table-begin))
 (end (org-table-end))
-(table (buffer-substring beg end))
-(file (read-file-name Export table to: ))
+(txt (buffer-substring-no-properties beg end))
+(file (or target (org-entry-get beg TABLE_EXPORT_FILE)
+  (read-file-name Export table to: )))
+(format (or (org-entry-get beg TABLE_EXPORT_FORMAT)
+org-table-export-default))
 buf)
 (unless (or (not (file-exists-p file))
(y-or-n-p (format Overwrite file %s?  file)))
   (error Abort))
-(with-current-buffer (find-file-noselect file)
-  (setq buf (current-buffer))
-  (erase-buffer)
-  (fundamental-mode)
-  (insert table)
-  (goto-char (point-min))
-  (while (re-search-forward ^[ \t]*|[ \t]* nil t)
-   (replace-match  t t)
-   (end-of-line 1))
-  (goto-char (point-min))
-  (while (re-search-forward [ \t]*|[ \t]*$ nil t)
-   (replace-match  t t)
-   (goto-char (min (1+ (point)) (point-max
-  (goto-char (point-min))
-  (while (re-search-forward ^-[-+]*$ nil t)
-   (replace-match )
-   (if (looking-at \n)
-   (delete-char 1)))
-  (goto-char (point-min))
-  (while (re-search-forward [ \t]*|[ \t]* nil t)
-   (replace-match \t t t))
-  (save-buffer))
-(kill-buffer buf)))
+(message format)
+
+(if (string-match \\([^ \t\r\n]+\\)\\( +.*\\)? format)
+   (let* ((transform (intern (match-string 1 format)))
+  (params (if (match-end 2)
+  (read (concat ( (match-string 2 format) )
+  (skip (plist-get params :skip))
+  (skipcols (plist-get params :skipcols))
+  (lines (nthcdr (or skip 0) (org-split-string txt [ \t]*\n[ 
\t]*)))
+  (lines (org-table-clean-before-export lines))
+  (i0 (if org-table-clean-did-remove-column 2 1))
+  (table (mapcar
+  (lambda (x)
+(if (string-match org-table-hline-regexp x)
+'hline
+  (org-remove-by-index
+   (org-split-string (org-trim x) \\s-*|\\s-*)
+   skipcols i0)))
+  lines))
+  (fun (if (= i0 2) 'cdr 'identity))
+  (org-table-last-alignment
+   (org-remove-by-index (funcall fun org-table-last-alignment)
+skipcols i0))
+  (org-table-last-column-widths
+   (org-remove-by-index (funcall fun org-table-last-column-widths)
+skipcols i0)))
+
+ (unless (fboundp transform)
+   (error No such transformation function %s transform))
+ (setq txt (funcall transform table