aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
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 /lisp
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.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/textmodes/table.el40
1 files changed, 28 insertions, 12 deletions
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"