ox-ascii: Improve speed wrt table export

* lisp/ox-ascii.el (org-ascii--table-cell-width): Cache results of
  this internal function since it is called at each cell, though its
  value only change column wise.
This commit is contained in:
Nicolas Goaziou 2013-05-18 18:22:11 +02:00
parent 62296ceb88
commit c22f5f632b
1 changed files with 29 additions and 19 deletions

View File

@ -1672,25 +1672,35 @@ column.
When `org-ascii-table-widen-columns' is non-nil, width cookies
are ignored."
(or (and (not org-ascii-table-widen-columns)
(org-export-table-cell-width table-cell info))
(let* ((max-width 0)
(table (org-export-get-parent-table table-cell))
(specialp (org-export-table-has-special-column-p table))
(col (cdr (org-export-table-cell-address table-cell info))))
(org-element-map table 'table-row
(lambda (row)
(setq max-width
(max (length
(org-export-data
(org-element-contents
(elt (if specialp (cdr (org-element-contents row))
(org-element-contents row))
col))
info))
max-width)))
info)
max-width)))
(let* ((row (org-export-get-parent table-cell))
(table (org-export-get-parent row))
(col (let ((cells (org-element-contents row)))
(- (length cells) (length (memq table-cell cells)))))
(cache
(or (plist-get info :ascii-table-cell-width-cache)
(plist-get (setq info
(plist-put info :ascii-table-cell-width-cache
(make-hash-table :test 'equal)))
:ascii-table-cell-width-cache)))
(key (cons table col)))
(or (gethash key cache)
(puthash
key
(or (and (not org-ascii-table-widen-columns)
(org-export-table-cell-width table-cell info))
(let* ((max-width 0))
(org-element-map table 'table-row
(lambda (row)
(setq max-width
(max (length
(org-export-data
(org-element-contents
(elt (org-element-contents row) col))
info))
max-width)))
info)
max-width))
cache))))
(defun org-ascii-table-cell (table-cell contents info)
"Transcode a TABLE-CELL object from Org to ASCII.