Changelog --------- org-html.el: Fix export of table.el tables.
* lisp/org-html.el (org-export-as-html): Don't expand non-data lines of table.el tables. (org-html-expand): Removed the (buggy) test for non-data lines in table.el tables. The test is now done as part of org-export-as-html. (org-format-table-table-html-using-table-generate-source): Added test for spanning of cells in table.el tables using table.el's own library routine. Optionlly Suppress export of simple table.el tables. (org-format-table-html): Removed the (buggy) test for spanned table.el tables. The test is now done as part of org-format-table-table-html-using-table-generate-source.
>From 3c8ff02efa0d2a4a08fe5341b9faa1de193048e9 Mon Sep 17 00:00:00 2001 From: Jambunathan K <kjambunat...@gmail.com> Date: Mon, 25 Apr 2011 03:35:03 +0530 Subject: [PATCH] org-html: Fix export of table.el tables. * lisp/org-html.el (org-export-as-html): Don't expand non-data lines of table.el tables. (org-html-expand): Removed the (buggy) test for non-data lines in table.el tables. The test is now done as part of org-export-as-html. (org-format-table-table-html-using-table-generate-source): Added test for spanning of cells in table.el tables using table.el's own library routine. Optionlly Suppress export of simple table.el tables. (org-format-table-html): Removed the (buggy) test for spanned table.el tables. The test is now done as part of org-format-table-table-html-using-table-generate-source. --- lisp/org-html.el | 72 +++++++++++++++++++++++++++-------------------------- 1 files changed, 37 insertions(+), 35 deletions(-) diff --git a/lisp/org-html.el b/lisp/org-html.el index 7a4564d..29bb825 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -1543,6 +1543,7 @@ lang=\"%s\" xml:lang=\"%s\"> ;; handle @<..> HTML tags (replace "@>..<" by "<..>") ;; Also handle sub_superscripts and checkboxes (or (string-match org-table-hline-regexp line) + (string-match "^[ \t]*\\([+]-\\||[ ]\\)[-+ |]*[+|][ \t]*$" line) (setq line (org-html-expand line))) ;; Format the links @@ -1888,24 +1889,13 @@ NO-CSS is passed to the exporter." (if (string-match "^[ \t]*|" (car lines)) ;; A normal org table (org-format-org-table-html lines nil no-css) - ;; Table made by table.el - test for spanning - (let* ((hlines (delq nil (mapcar - (lambda (x) - (if (string-match "^[ \t]*\\+-" x) x - nil)) - lines))) - (first (car hlines)) - (ll (and (string-match "\\S-+" first) - (match-string 0 first))) - (re (concat "^[ \t]*" (regexp-quote ll))) - (spanning (delq nil (mapcar (lambda (x) (not (string-match re x))) - hlines)))) - (if (and (not spanning) - (not org-export-prefer-native-exporter-for-tables)) - ;; We can use my own converter with HTML conversions - (org-format-table-table-html lines) - ;; Need to use the code generator in table.el, with the original text. - (org-format-table-table-html-using-table-generate-source olines))))) + ;; Table made by table.el + (or (org-format-table-table-html-using-table-generate-source + olines (not org-export-prefer-native-exporter-for-tables)) + ;; We are here only when table.el table has NO col or row + ;; spanning and the user prefers using org's own converter for + ;; exporting of such simple table.el tables. + (org-format-table-table-html lines)))) (defvar org-table-number-fraction) ; defined in org-table.el (defun org-format-org-table-html (lines &optional splice no-css) @@ -2116,10 +2106,20 @@ But it has the disadvantage, that no cell- or row-spanning is allowed." (setq html (concat html "</table>\n")) html)) -(defun org-format-table-table-html-using-table-generate-source (lines) +(defun org-format-table-table-html-using-table-generate-source (lines + &optional + spanned-only) "Format a table into html, using `table-generate-source' from table.el. -This has the advantage that cell- or row-spanning is allowed. -But it has the disadvantage, that Org-mode's HTML conversions cannot be used." +Use SPANNED-ONLY to suppress exporting of simple table.el tables. + +When SPANNED-ONLY is nil, all table.el tables are exported. When +SPANNED-ONLY is non-nil, only tables with either row or column +spans are exported. + +This routine returns the generated source or nil as appropriate. + +Refer docstring of `org-export-prefer-native-exporter-for-tables' +for further information." (require 'table) (with-current-buffer (get-buffer-create " org-tmp1 ") (erase-buffer) @@ -2128,10 +2128,14 @@ But it has the disadvantage, that Org-mode's HTML conversions cannot be used." (if (not (re-search-forward "|[^+]" nil t)) (error "Error processing table")) (table-recognize-table) - (with-current-buffer (get-buffer-create " org-tmp2 ") (erase-buffer)) - (table-generate-source 'html " org-tmp2 ") - (set-buffer " org-tmp2 ") - (buffer-substring (point-min) (point-max)))) + (when (or (not spanned-only) + (let* ((dim (table-query-dimension)) + (c (nth 4 dim)) (r (nth 5 dim)) (cells (nth 6 dim))) + (not (= (* c r) cells)))) + (with-current-buffer (get-buffer-create " org-tmp2 ") (erase-buffer)) + (table-generate-source 'html " org-tmp2 ") + (set-buffer " org-tmp2 ") + (buffer-substring (point-min) (point-max))))) (defun org-export-splice-style (style extra) "Splice EXTRA into STYLE, just before \"</style>\"." @@ -2234,16 +2238,14 @@ If there are links in the string, don't modify these." (let* ((re (concat org-bracket-link-regexp "\\|" (org-re "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$"))) m s l res) - (if (string-match "^[ \t]*\\+-[-+]*\\+[ \t]*$" string) - string - (while (setq m (string-match re string)) - (setq s (substring string 0 m) - l (match-string 0 string) - string (substring string (match-end 0))) - (push (org-html-do-expand s) res) - (push l res)) - (push (org-html-do-expand string) res) - (apply 'concat (nreverse res))))) + (while (setq m (string-match re string)) + (setq s (substring string 0 m) + l (match-string 0 string) + string (substring string (match-end 0))) + (push (org-html-do-expand s) res) + (push l res)) + (push (org-html-do-expand string) res) + (apply 'concat (nreverse res)))) (defun org-html-do-expand (s) "Apply all active conversions to translate special ASCII to HTML." -- 1.7.2.3
* Table.el Table with no Spanning # See org-export-prefer-native-exporter-for-tables +---------------+---------------+ |Term |Percentage | +---------------+---------------+ |Quarter |25% | |One-Fourth | | +---------------+---------------+ |Half |50% | |One-by-Two | | +---------------+---------------+ |Three-Quarters |75% | |Three-Fourths | | +---------------+---------------+ |Full |100% | |Whole | | +---------------+---------------+ * Table.el Table with Spanning +----------+---------------------+----------+ |Name |cmd calls |Percentage| +----------+ +----------+ |rgb |93 534 |46% | +----------+ +----------+ |Xah |82 090 |40% | +----------+ +----------+ |total |203 118 |100% | +----------+---------------------+----------+ * Another Table.el Table with Spanning +-----------+----------+ | R1C1 | R1C2 | +-----------+----------+ | R2C1 R2C2 | +-----------+----------+ | R3C1 | R3C2 | | +----------+ | R4C1 | R4C2 | +-----------+----------+ * buggy export (pre-patch) ** org-export-prefer-native-exporter-for-tables is nil #+begin_src html <div id="outline-container-1" class="outline-2"> <h2 id="sec-1"><span class="section-number-2">1</span> Table.el Table with no Spanning </h2> <div class="outline-text-2" id="text-1"> <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <tr><th scope="col">Term</th> <th scope="col">Percentage</th></tr> <tr><td>Quarter<br/>One-Fourth</td> <td>25%<br/></td></tr> <tr><td>Half<br/>One-by-Two</td> <td>50%<br/></td></tr> <tr><td>Three-Quarters<br/>Three-Fourths</td> <td>75%<br/></td></tr> <tr><td>Full<br/>Whole</td> <td>100%<br/></td></tr> </table> </div> </div> <div id="outline-container-2" class="outline-2"> <h2 id="sec-2"><span class="section-number-2">2</span> Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-2"> <p> <del>-———</del> <del>-———</del> <del>-———</del> <del>-———</del> <del>-———</del> <del>-———</del> </p><table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <tr><th scope="col">Name<br/>rgb<br/>Xah<br/>total</th> <th scope="col">cmd calls<br/>93 534<br/>82 090<br/>203 118</th> <th scope="col">Percentage<br/>46%<br/>40%<br/>100%</th></tr> </table> </div> </div> <div id="outline-container-3" class="outline-2"> <h2 id="sec-3"><span class="section-number-2">3</span> Another Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-3"> <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <tr><th scope="col">R1C1</th> <th scope="col">R1C2</th></tr> <tr><td>R2C1 R2C2</td></tr> <tr><td>R3C1<br/><del>-———</del><br/>R4C1</td> <td>R3C2<br/><br/>R4C2</td></tr> </table> </div> </div> #+end_src * correct export (post-patch) ** org-export-prefer-native-exporter-for-tables is t #+begin_src html <div id="outline-container-1" class="outline-2"> <h2 id="sec-1"><span class="section-number-2">1</span> Table.el Table with no Spanning </h2> <div class="outline-text-2" id="text-1"> <!-- This HTML table template is generated by emacs 24.0.50.1 --> <table border="1"> <tr> <td align="left" valign="top"> Term </td> <td align="left" valign="top"> Percentage </td> </tr> <tr> <td align="left" valign="top"> Quarter <br /> One-Fourth </td> <td align="left" valign="top"> 25% <br /> </td> </tr> <tr> <td align="left" valign="top"> Half <br /> One-by-Two </td> <td align="left" valign="top"> 50% <br /> </td> </tr> <tr> <td align="left" valign="top"> Three-Quarters <br /> Three-Fourths </td> <td align="left" valign="top"> 75% <br /> </td> </tr> <tr> <td align="left" valign="top"> Full <br /> Whole </td> <td align="left" valign="top"> 100% <br /> </td> </tr> </table> </div> </div> <div id="outline-container-2" class="outline-2"> <h2 id="sec-2"><span class="section-number-2">2</span> Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-2"> <!-- This HTML table template is generated by emacs 24.0.50.1 --> <table border="1"> <tr> <td align="left" valign="top"> Name </td> <td rowspan="4" align="left" valign="top"> cmd calls <br /> <br /> 93 534 <br /> <br /> 82 090 <br /> <br /> 203 118 </td> <td align="left" valign="top"> Percentage </td> </tr> <tr> <td align="left" valign="top"> rgb </td> <td align="left" valign="top"> 46% </td> </tr> <tr> <td align="left" valign="top"> Xah </td> <td align="left" valign="top"> 40% </td> </tr> <tr> <td align="left" valign="top"> total </td> <td align="left" valign="top"> 100% </td> </tr> </table> </div> </div> <div id="outline-container-3" class="outline-2"> <h2 id="sec-3"><span class="section-number-2">3</span> Another Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-3"> <!-- This HTML table template is generated by emacs 24.0.50.1 --> <table border="1"> <tr> <td align="center" valign="top"> R1C1 </td> <td align="center" valign="top"> R1C2 </td> </tr> <tr> <td colspan="2" align="center" valign="top"> R2C1 R2C2 </td> </tr> <tr> <td rowspan="2" align="center" valign="top"> R3C1 <br /> <br /> R4C1 </td> <td align="center" valign="top"> R3C2 </td> </tr> <tr> <td align="center" valign="top"> R4C2 </td> </tr> </table> </div> </div> #+end_src ** org-export-prefer-native-exporter-for-tables is nil #+begin_src html <div id="outline-container-1" class="outline-2"> <h2 id="sec-1"><span class="section-number-2">1</span> Table.el Table with no Spanning </h2> <div class="outline-text-2" id="text-1"> <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> <tr><th scope="col">Term</th> <th scope="col">Percentage</th></tr> <tr><td>Quarter<br/>One-Fourth</td> <td>25%<br/></td></tr> <tr><td>Half<br/>One-by-Two</td> <td>50%<br/></td></tr> <tr><td>Three-Quarters<br/>Three-Fourths</td> <td>75%<br/></td></tr> <tr><td>Full<br/>Whole</td> <td>100%<br/></td></tr> </table> </div> </div> <div id="outline-container-2" class="outline-2"> <h2 id="sec-2"><span class="section-number-2">2</span> Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-2"> <!-- This HTML table template is generated by emacs 24.0.50.1 --> <table border="1"> <tr> <td align="left" valign="top"> Name </td> <td rowspan="4" align="left" valign="top"> cmd calls <br /> <br /> 93 534 <br /> <br /> 82 090 <br /> <br /> 203 118 </td> <td align="left" valign="top"> Percentage </td> </tr> <tr> <td align="left" valign="top"> rgb </td> <td align="left" valign="top"> 46% </td> </tr> <tr> <td align="left" valign="top"> Xah </td> <td align="left" valign="top"> 40% </td> </tr> <tr> <td align="left" valign="top"> total </td> <td align="left" valign="top"> 100% </td> </tr> </table> </div> </div> <div id="outline-container-3" class="outline-2"> <h2 id="sec-3"><span class="section-number-2">3</span> Another Table.el Table with Spanning </h2> <div class="outline-text-2" id="text-3"> <!-- This HTML table template is generated by emacs 24.0.50.1 --> <table border="1"> <tr> <td align="center" valign="top"> R1C1 </td> <td align="center" valign="top"> R1C2 </td> </tr> <tr> <td colspan="2" align="center" valign="top"> R2C1 R2C2 </td> </tr> <tr> <td rowspan="2" align="center" valign="top"> R3C1 <br /> <br /> R4C1 </td> <td align="center" valign="top"> R3C2 </td> </tr> <tr> <td align="center" valign="top"> R4C2 </td> </tr> </table> </div> </div> #+end_src
--