diff options
| author | Aaron S. Hawley | 2019-06-27 13:55:04 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2019-06-27 13:55:04 +0200 |
| commit | d64c72f50cb5acefb806c53dfc965ff5b22e8ac9 (patch) | |
| tree | 3a24cb3d315439c782a46d9a5fe088a5e3f4c1b5 | |
| parent | 573de396f03684efa89ead24a371b0f4c9bf8d5d (diff) | |
| download | emacs-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.texi | 11 | ||||
| -rw-r--r-- | etc/NEWS | 4 | ||||
| -rw-r--r-- | lisp/textmodes/table.el | 40 |
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 |
| 2853 | specific markup language. It asks for a language (which must be one | 2853 | specific markup language. It asks for a language (which must be one |
| 2854 | of @code{html}, @code{latex}, or @code{cals}), a destination buffer in | 2854 | of @code{html}, @code{latex}, @code{cals}, @code{wiki} or |
| 2855 | which to put the result, and a table caption, and then inserts the | 2855 | @code{mediawiki}), a destination buffer in which to put the result, |
| 2856 | generated table into the specified buffer. The default destination | 2856 | and a table caption, and then inserts the generated table into the |
| 2857 | buffer is @code{table.@var{lang}}, where @var{lang} is the language | 2857 | specified buffer. The default destination buffer is |
| 2858 | you specified. | 2858 | @code{table.@var{lang}}, where @var{lang} is the language you |
| 2859 | specified. | ||
| 2859 | 2860 | ||
| 2860 | @node Two-Column | 2861 | @node Two-Column |
| 2861 | @section Two-Column Editing | 2862 | @section Two-Column Editing |
| @@ -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 | ||
| 480 | mediawiki 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" |