[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: XHTML support in table.el
From: |
Tak Ota |
Subject: |
Re: XHTML support in table.el |
Date: |
Fri, 11 Mar 2005 10:43:01 -0800 (PST) |
Thanks for the suggestion. Recently I received the same suggestion
from Trent Buck. I will convert the tags to lowercase and call it
HTML/XHTML.
-Tak
Fri, 11 Mar 2005 09:46:53 -0800: "Per Cederqvist" <address@hidden> wrote:
> I just found table.el in the CVS version of Emacs (updated earlier
> today). I really like it. The patch below adds support for
> generating XHTML 1.0 tables. The generated table validates as both
> 1.0 Transitional and 1.0 Strict.
>
> An alternative to this patch would be to just lowercase the TABLE, TR,
> TH and TD strings in the generated 'html. That would cause the output
> to be both valid HTML and XHTML. Maybe that is a better thing to do.
>
> Many thanks for a great library!
>
> Yours,
> /Per Cederqvist
>
> --- table.el 08 Mar 2005 14:41:25 +0100 1.11
> +++ table.el 11 Mar 2005 18:39:24 +0100
> @@ -790,6 +790,39 @@
> :type 'string
> :group 'table)
>
> +(defcustom table-xhtml-delegate-spacing-to-user-agent nil
> + "*Non-nil delegates cell contents spacing entirely to user agent.
> +Otherwise, when nil, it preserves the original spacing and line
> breaks."
> + :tag "XHTML delegate spacing"
> + :type 'boolean
> + :group 'table)
> +
> +(defcustom table-xhtml-th-rows 0
> + "*Number of top rows to become header cells automatically in XHTML
> generation."
> + :tag "XHTML Header Rows"
> + :type 'integer
> + :group 'table)
> +
> +(defcustom table-xhtml-th-columns 0
> + "*Number of left columns to become header cells automatically in
> XHTML generation."
> + :tag "XHTML Header Columns"
> + :type 'integer
> + :group 'table)
> +
> +(defcustom table-xhtml-table-attribute "border=\"1\""
> + "*Table attribute that applies to the table in XHTML generation."
> + :tag "XHTML table attribute"
> + :type 'string
> + :group 'table)
> +
> +(defcustom table-xhtml-cell-attribute ""
> + "*Cell attribute that applies to all cells in XHTML generation.
> +Do not specify \"align\" and \"valign\" because they are determined by
> +the cell contents dynamically."
> + :tag "XHTML cell attribute"
> + :type 'string
> + :group 'table)
> +
> (defcustom table-cals-thead-rows 1
> "*Number of top rows to become header rows in CALS table."
> :tag "CALS Header Rows"
> @@ -909,7 +942,7 @@
> "For mode line indicator")
> (defvar table-fixed-mode-indicator nil
> "For mode line indicator")
> -(defconst table-source-languages '(html latex cals)
> +(defconst table-source-languages '(xhtml html latex cals)
> "Supported source languages.")
> (defvar table-source-info-plist nil
> "General storage for temporary information used while generating
> source.")
> @@ -943,7 +976,7 @@
> (defvar table-sequence-increment-history '("1"))
> (defvar table-sequence-interval-history '("1"))
> (defvar table-sequence-justify-history '("left"))
> -(defvar table-source-language-history '("html"))
> +(defvar table-source-language-history '("xhtml"))
> (defvar table-col-delim-regexp-history '(""))
> (defvar table-row-delim-regexp-history '(""))
> (defvar table-capture-justify-history '("left"))
> @@ -3003,20 +3036,20 @@
> (defun table-generate-source (language &optional dest-buffer caption)
> "Generate source of the current table in the specified language.
> LANGUAGE is a symbol that specifies the language to describe the
> -structure of the table. It must be either 'html, 'latex or 'cals.
> -The resulted source text is inserted into DEST-BUFFER and the buffer
> -object is returned. When DEST-BUFFER is omitted or nil the default
> -buffer specified in `table-dest-buffer-name' is used. In this case
> -the content of the default buffer is erased prior to the generation.
> -When DEST-BUFFER is non-nil it is expected to be either a destination
> -buffer or a name of the destination buffer. In this case the
> -generated result is inserted at the current point in the destination
> -buffer and the previously existing contents in the buffer are
> -untouched.
> +structure of the table. It must be either 'html, 'xhtml, 'latex
> +or 'cals. The resulted source text is inserted into DEST-BUFFER
> +and the buffer object is returned. When DEST-BUFFER is omitted
> +or nil the default buffer specified in `table-dest-buffer-name'
> +is used. In this case the content of the default buffer is
> +erased prior to the generation. When DEST-BUFFER is non-nil it
> +is expected to be either a destination buffer or a name of the
> +destination buffer. In this case the generated result is
> +inserted at the current point in the destination buffer and the
> +previously existing contents in the buffer are untouched.
>
> References used for this implementation:
>
> -HTML:
> +HTML and XHTML:
> http://www.w3.org
>
> LaTeX:
> @@ -3126,6 +3159,13 @@
> (not (string= caption "")))
> (format " <CAPTION>%s</CAPTION>\n" caption)
> "")))
> + ((eq language 'xhtml)
> + (insert (format "<!-- This XHTML table template is generated by
> emacs %s -->\n" emacs-version)
> + (format "<table %s>\n" table-xhtml-table-attribute)
> + (if (and (stringp caption)
> + (not (string= caption "")))
> + (format " <caption>%s</caption>\n" caption)
> + "")))
> ((eq language 'latex)
> (insert (format "%% This LaTeX table template is generated by
> emacs %s\n" emacs-version)
> "\\begin{tabular}{|" (apply 'concat (make-list (length
> col-list) "l|")) "}\n"
> @@ -3149,6 +3189,8 @@
> (cond
> ((eq language 'html)
> (insert "</TABLE>\n"))
> + ((eq language 'xhtml)
> + (insert "</table>\n"))
> ((eq language 'latex)
> (insert "\\end{tabular}\n"))
> ((eq language 'cals)
> @@ -3170,6 +3212,8 @@
> (cond
> ((eq language 'html)
> (insert " <TR>\n"))
> + ((eq language 'xhtml)
> + (insert " <tr>\n"))
> ((eq language 'cals)
> (insert " <row>\n"))
> ))
> @@ -3178,6 +3222,8 @@
> (cond
> ((eq language 'html)
> (insert " </TR>\n"))
> + ((eq language 'xhtml)
> + (insert " </tr>\n"))
> ((eq language 'cals)
> (insert " </row>\n")
> (unless (/= (table-get-source-info 'current-row)
> table-cals-thead-rows)
> @@ -3232,6 +3278,20 @@
> (insert (format " align=\"%s\"" (if alignment (symbol-name
> alignment) "left")))
> (insert (format " valign=\"%s\"" (if valign (symbol-name
> valign) "top")))
> (insert ">\n"))
> + ((eq language 'xhtml)
> + (insert (format " <%s"
> + (table-put-source-info
> + 'cell-type
> + (if (or (<= (table-get-source-info
> 'current-row) table-xhtml-th-rows)
> + (<= (table-get-source-info
> 'current-column) table-xhtml-th-columns))
> + "th" "td"))))
> + (if (and table-xhtml-cell-attribute (not (string=
> table-xhtml-cell-attribute "")))
> + (insert " " table-xhtml-cell-attribute))
> + (if (> colspan 1) (insert (format " colspan=\"%d\""
> colspan)))
> + (if (> rowspan 1) (insert (format " rowspan=\"%d\""
> rowspan)))
> + (insert (format " align=\"%s\"" (if alignment (symbol-name
> alignment) "left")))
> + (insert (format " valign=\"%s\"" (if valign (symbol-name
> valign) "top")))
> + (insert ">\n"))
> ((eq language 'cals)
> (insert " <entry")
> (if (> colspan 1)
> @@ -3257,6 +3317,8 @@
> (cond
> ((eq language 'html)
> (insert (format" </%s>\n" (table-get-source-info
> 'cell-type))))
> + ((eq language 'xhtml)
> + (insert (format" </%s>\n" (table-get-source-info
> 'cell-type))))
> ((eq language 'cals)
> (insert " </entry>\n"))
> ))
> @@ -3289,6 +3351,23 @@
> (progn
> (goto-char (point-min))
> (looking-at "\\s *\\'")))))
> + ((eq language 'xhtml)
> + (if table-xhtml-delegate-spacing-to-user-agent
> + (progn
> + (table--remove-eol-spaces (point-min) (point-max))
> + (if (re-search-forward "\\s +\\'" nil t)
> + (replace-match "")))
> + (while (search-forward " " nil t)
> + (replace-match " "))
> + (goto-char (point-min))
> + (while (and (re-search-forward "$" nil t)
> + (not (eobp)))
> + (insert "<br />")
> + (forward-char 1)))
> + (unless (and table-html-delegate-spacing-to-user-agent
> + (progn
> + (goto-char (point-min))
> + (looking-at "\\s *\\'")))))
> ((eq language 'cals)
> (table--remove-eol-spaces (point-min) (point-max))
> (if (re-search-forward "\\s +\\'" nil t)
> @@ -3301,6 +3380,7 @@
> (indent-rigidly beg (point)
> (cond
> ((eq language 'html) 6)
> + ((eq language 'xhtml) 6)
> ((eq language 'cals) 10)))
> (insert ?\n)))))
>