aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron S. Hawley2019-06-27 13:55:04 +0200
committerLars Ingebrigtsen2019-06-27 13:55:04 +0200
commitd64c72f50cb5acefb806c53dfc965ff5b22e8ac9 (patch)
tree3a24cb3d315439c782a46d9a5fe088a5e3f4c1b5
parent573de396f03684efa89ead24a371b0f4c9bf8d5d (diff)
downloademacs-d64c72f50cb5acefb806c53dfc965ff5b22e8ac9.tar.gz
emacs-d64c72f50cb5acefb806c53dfc965ff5b22e8ac9.zip
Allow generating wiki and mediawiki tables
* lisp/textmodes/table.el (table--generate-source-prologue) (table--generate-source-epilogue) (table--generate-source-scan-rows) (table--generate-source-cells-in-a-row): Insert the wiki/mediawiki separators. * lisp/textmodes/table.el (table-source-languages): Add support for wiki and mediawiki tables (bug#13287). 2019-06-27 Lars Ingebrigtsen <larsi@gnus.org> * doc/emacs/text.texi (Table Misc): Mention the new wiki and mediawiki formats.
-rw-r--r--doc/emacs/text.texi11
-rw-r--r--etc/NEWS4
-rw-r--r--lisp/textmodes/table.el40
3 files changed, 38 insertions, 17 deletions
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index 59423feeeae..ffebf39f331 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -2851,11 +2851,12 @@ cell interval, and the justification of the text in each cell.
2851@findex table-generate-source 2851@findex table-generate-source
2852 @kbd{M-x table-generate-source} generates a table formatted for a 2852 @kbd{M-x table-generate-source} generates a table formatted for a
2853specific markup language. It asks for a language (which must be one 2853specific markup language. It asks for a language (which must be one
2854of @code{html}, @code{latex}, or @code{cals}), a destination buffer in 2854of @code{html}, @code{latex}, @code{cals}, @code{wiki} or
2855which to put the result, and a table caption, and then inserts the 2855@code{mediawiki}), a destination buffer in which to put the result,
2856generated table into the specified buffer. The default destination 2856and a table caption, and then inserts the generated table into the
2857buffer is @code{table.@var{lang}}, where @var{lang} is the language 2857specified buffer. The default destination buffer is
2858you specified. 2858@code{table.@var{lang}}, where @var{lang} is the language you
2859specified.
2859 2860
2860@node Two-Column 2861@node Two-Column
2861@section Two-Column Editing 2862@section Two-Column Editing
diff --git a/etc/NEWS b/etc/NEWS
index 10882e4ec45..6b38b81d4ab 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -475,6 +475,10 @@ current and the previous or the next line, as before.
475 475
476* Changes in Specialized Modes and Packages in Emacs 27.1 476* Changes in Specialized Modes and Packages in Emacs 27.1
477 477
478** table
479** `table-generate-source' and friends now support outputting wiki and
480mediawiki format tables.
481
478--- 482---
479** telnet-mode 483** telnet-mode
480*** Reverting a buffer in `telnet-mode' will restart a closed 484*** Reverting a buffer in `telnet-mode' will restart a closed
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index ef688f129fa..1f185e0f216 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -882,7 +882,7 @@ This is always set to nil at the entry to `table-with-cache-buffer' before execu
882 (push '(table-mode-indicator (table-fixed-width-mode " Fixed-Table" " Table")) 882 (push '(table-mode-indicator (table-fixed-width-mode " Fixed-Table" " Table"))
883 minor-mode-alist)) 883 minor-mode-alist))
884 884
885(defconst table-source-languages '(html latex cals) 885(defconst table-source-languages '(html latex cals wiki mediawiki)
886 "Supported source languages.") 886 "Supported source languages.")
887(defvar table-source-info-plist nil 887(defvar table-source-info-plist nil
888 "General storage for temporary information used while generating source.") 888 "General storage for temporary information used while generating source.")
@@ -3053,7 +3053,11 @@ CALS (DocBook DTD):
3053 (table-put-source-info 'row-type (if (zerop table-cals-thead-rows) "tbody" "thead")) 3053 (table-put-source-info 'row-type (if (zerop table-cals-thead-rows) "tbody" "thead"))
3054 (set-marker-insertion-type (table-get-source-info 'colspec-marker) nil) ;; insert after 3054 (set-marker-insertion-type (table-get-source-info 'colspec-marker) nil) ;; insert after
3055 (insert (format " <%s valign=\"top\">\n" (table-get-source-info 'row-type)))) 3055 (insert (format " <%s valign=\"top\">\n" (table-get-source-info 'row-type))))
3056 ))) 3056 ((eq language 'mediawiki)
3057 (insert (format
3058 "<!-- This HTML table template is generated by Emacs %s -->\n"
3059 emacs-version))
3060 (insert "{|\n")))))
3057 3061
3058(defun table--generate-source-epilogue (dest-buffer language _col-list _row-list) 3062(defun table--generate-source-epilogue (dest-buffer language _col-list _row-list)
3059 "Generate and insert source epilogue into DEST-BUFFER." 3063 "Generate and insert source epilogue into DEST-BUFFER."
@@ -3070,7 +3074,8 @@ CALS (DocBook DTD):
3070 (dolist (col (sort (table-get-source-info 'colnum-list) '<)) 3074 (dolist (col (sort (table-get-source-info 'colnum-list) '<))
3071 (insert (format " <colspec colnum=\"%d\" colname=\"c%d\"/>\n" col col)))) 3075 (insert (format " <colspec colnum=\"%d\" colname=\"c%d\"/>\n" col col))))
3072 (insert (format " </%s>\n </tgroup>\n</table>\n" (table-get-source-info 'row-type)))) 3076 (insert (format " </%s>\n </tgroup>\n</table>\n" (table-get-source-info 'row-type))))
3073 ))) 3077 ((eq language 'mediawiki)
3078 (insert "|}\n")))))
3074 3079
3075(defun table--generate-source-scan-rows (dest-buffer language _origin-cell col-list row-list) 3080(defun table--generate-source-scan-rows (dest-buffer language _origin-cell col-list row-list)
3076 "Generate and insert source rows into DEST-BUFFER." 3081 "Generate and insert source rows into DEST-BUFFER."
@@ -3082,7 +3087,11 @@ CALS (DocBook DTD):
3082 (insert " <tr>\n")) 3087 (insert " <tr>\n"))
3083 ((eq language 'cals) 3088 ((eq language 'cals)
3084 (insert " <row>\n")) 3089 (insert " <row>\n"))
3085 )) 3090 ((eq language 'wiki)
3091 (insert "|"))
3092 ((and (eq language 'mediawiki)
3093 (> (table-get-source-info 'current-row) 1))
3094 (insert "|-\n"))))
3086 (table--generate-source-cells-in-a-row dest-buffer language col-list row-list) 3095 (table--generate-source-cells-in-a-row dest-buffer language col-list row-list)
3087 (with-current-buffer dest-buffer 3096 (with-current-buffer dest-buffer
3088 (cond 3097 (cond
@@ -3092,7 +3101,9 @@ CALS (DocBook DTD):
3092 (insert " </row>\n") 3101 (insert " </row>\n")
3093 (unless (/= (table-get-source-info 'current-row) table-cals-thead-rows) 3102 (unless (/= (table-get-source-info 'current-row) table-cals-thead-rows)
3094 (insert (format " </%s>\n" (table-get-source-info 'row-type))) 3103 (insert (format " </%s>\n" (table-get-source-info 'row-type)))
3095 (insert (format " <%s valign=\"top\">\n" (table-put-source-info 'row-type "tbody"))))))) 3104 (insert (format " <%s valign=\"top\">\n" (table-put-source-info 'row-type "tbody")))))
3105 ((eq language 'wiki)
3106 (insert "|\n"))))
3096 (table-put-source-info 'current-row (1+ (table-get-source-info 'current-row))) 3107 (table-put-source-info 'current-row (1+ (table-get-source-info 'current-row)))
3097 (setq row-list (cdr row-list)))) 3108 (setq row-list (cdr row-list))))
3098 3109
@@ -3161,7 +3172,8 @@ CALS (DocBook DTD):
3161 (not (memq valign '(top none)))) 3172 (not (memq valign '(top none))))
3162 (insert " valign=\"" (symbol-name valign) "\"")) 3173 (insert " valign=\"" (symbol-name valign) "\""))
3163 (insert ">\n")) 3174 (insert ">\n"))
3164 )) 3175 ((memq language '(wiki mediawiki))
3176 (insert "|"))))
3165 (table--generate-source-cell-contents dest-buffer language cell) 3177 (table--generate-source-cell-contents dest-buffer language cell)
3166 (with-current-buffer dest-buffer 3178 (with-current-buffer dest-buffer
3167 (cond 3179 (cond
@@ -3169,7 +3181,10 @@ CALS (DocBook DTD):
3169 (insert (format" </%s>\n" (table-get-source-info 'cell-type)))) 3181 (insert (format" </%s>\n" (table-get-source-info 'cell-type))))
3170 ((eq language 'cals) 3182 ((eq language 'cals)
3171 (insert " </entry>\n")) 3183 (insert " </entry>\n"))
3172 )) 3184 ((eq language 'wiki)
3185 (insert "|"))
3186 ((eq language 'mediawiki)
3187 (insert ?\n))))
3173 (table-forward-cell 1 t) 3188 (table-forward-cell 1 t)
3174 (table-put-source-info 'current-column (table-get-source-info 'next-column)) 3189 (table-put-source-info 'current-column (table-get-source-info 'next-column))
3175 )))) 3190 ))))
@@ -3208,11 +3223,12 @@ CALS (DocBook DTD):
3208 (with-current-buffer dest-buffer 3223 (with-current-buffer dest-buffer
3209 (let ((beg (point))) 3224 (let ((beg (point)))
3210 (insert cell-contents) 3225 (insert cell-contents)
3211 (indent-rigidly beg (point) 3226 (when (memq language '(html cals))
3212 (cond 3227 (indent-rigidly beg (point)
3213 ((eq language 'html) 6) 3228 (cond
3214 ((eq language 'cals) 10))) 3229 ((eq language 'html) 6)
3215 (insert ?\n))))) 3230 ((eq language 'cals) 10)))
3231 (insert ?\n))))))
3216 3232
3217(defun table--cell-horizontal-char-p (c) 3233(defun table--cell-horizontal-char-p (c)
3218 "Test if character C is one of the horizontal characters" 3234 "Test if character C is one of the horizontal characters"