summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/NEWS3
-rw-r--r--lisp/ChangeLog23
-rw-r--r--lisp/nxml/nxml-mode.el10
-rw-r--r--lisp/textmodes/sgml-mode.el9
-rw-r--r--lisp/textmodes/tex-mode.el4
-rw-r--r--lisp/textmodes/tildify.el38
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/tildify-tests.el4
8 files changed, 81 insertions, 15 deletions
diff --git a/etc/NEWS b/etc/NEWS
index ecbbf747713..d03ce7cc873 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -301,6 +301,9 @@ use PDF instead of DVI.
By default, 32 spaces and four TABs are considered to be too much but
`whitespace-big-indent-regexp' can be configured to change that.
+** tildify: `tildify-space-string' variable has been added making
+`tildify-string-alist' obsolete.
+
** Obsolete packages
---
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 696b384c3f9..33d341f8351 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,26 @@
+2014-11-17 Michal Nazarewicz <mina86@mina86.com>
+
+ * textmodes/tildify.el (tildify-space-string): New variable for
+ specifying representation of a hard space -- a no-break space by
+ default. Being a buffer-local variable it is much easier to
+ handle than `tildify-string-alist' that has been used so far. It
+ also works better with derived modes.
+ (tildify-string-alist): Mark as obsolete.
+
+ * textmodes/tex-mode.el (tex-common-initialization): Set
+ `tildify-space-string' variable in all variants of TeX mode since
+ `tildify-string-alist' is now empty by default.
+
+ * nxml/nxml-mode.el (nxml-mode): Ditto in `nxml-mode'. If
+ encoding supports it use no-break space instead of character
+ entity; this changes previous default which used a numeric
+ reference.
+
+ * textmodes/sgml-mode.el (sgml-mode): ditto in `sgml-mode'. If
+ encoding does not support no-break space, use numeric reference;
+ this changes previous default which used named entity (?&nbsp;?)
+ in HTML mode.
+
2014-11-17 Ulf Jasper <ulf.jasper@web.de>
Fix bug#5433.
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 4859bbc7a77..47f806693df 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -449,6 +449,8 @@ reference.")
(when rng-validate-mode
(rng-validate-while-idle (current-buffer)))))
+(defvar tildify-space-string)
+
;;;###autoload
(define-derived-mode nxml-mode text-mode "nXML"
;; We use C-c C-i instead of \\[nxml-balanced-close-start-tag-inline]
@@ -505,6 +507,14 @@ be treated as a single markup item, set the variable
Many aspects this mode can be customized using
\\[customize-group] nxml RET."
;; (kill-all-local-variables)
+ ;; If encoding does not allow non-break space character, use reference.
+ ;; FIXME: This duplicates code from sgml-mode, perhaps derive from it?
+ ;; FIXME: Perhaps use &nbsp; if possible (e.g. XHTML)?
+ (setq-local tildify-space-string
+ (if (equal (decode-coding-string
+ (encode-coding-string " " buffer-file-coding-system)
+ buffer-file-coding-system) " ")
+ " " "&#160;"))
(set (make-local-variable 'mode-line-process) '((nxml-degraded "/degraded")))
;; We'll determine the fill prefix ourselves
(make-local-variable 'adaptive-fill-mode)
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 39ac0621733..9d1cb0373fa 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -456,6 +456,8 @@ This function is designed for use in `fill-nobreak-predicate'.
(skip-chars-backward "/?!")
(eq (char-before) ?<))))
+(defvar tildify-space-string)
+
;;;###autoload
(define-derived-mode sgml-mode text-mode '(sgml-xml-mode "XML" "SGML")
"Major mode for editing SGML documents.
@@ -477,6 +479,13 @@ Do \\[describe-key] on the following bindings to discover what they do.
\\{sgml-mode-map}"
(make-local-variable 'sgml-saved-validate-command)
(make-local-variable 'facemenu-end-add-face)
+ ;; If encoding does not allow non-break space character, use reference.
+ ;; FIXME: Perhaps use &nbsp; if possible (e.g. when we know its HTML)?
+ (setq-local tildify-space-string
+ (if (equal (decode-coding-string
+ (encode-coding-string " " buffer-file-coding-system)
+ buffer-file-coding-system) " ")
+ " " "&#160;"))
;;(make-local-variable 'facemenu-remove-face-function)
;; A start or end tag by itself on a line separates a paragraph.
;; This is desirable because SGML discards a newline that appears
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index bc10eab0498..0cfc0cfe3dc 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1203,9 +1203,13 @@ Entering SliTeX mode runs the hook `text-mode-hook', then the hook
(setq tex-command slitex-run-command)
(setq tex-start-of-header "\\\\documentstyle{slides}\\|\\\\documentclass{slides}"))
+(defvar tildify-space-string)
+
(defun tex-common-initialization ()
;; Regexp isearch should accept newline and formfeed as whitespace.
(setq-local search-whitespace-regexp "[ \t\r\n\f]+")
+ ;; Use tilde as hard-space character in tildify package.
+ (setq-local tildify-space-string "~")
;; A line containing just $$ is treated as a paragraph separator.
(setq-local paragraph-start "[ \t]*$\\|[\f\\\\%]\\|[ \t]*\\$\\$")
;; A line starting with $$ starts a paragraph,
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 91f5a38ce0b..865dcecbecc 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -4,7 +4,7 @@
;; Author: Milan Zamazal <pdm@zamazal.org>
;; Michal Nazarewicz <mina86@mina86.com>
-;; Version: 4.5.4
+;; Version: 4.5.5
;; Keywords: text, TeX, SGML, wp
;; This file is part of GNU Emacs.
@@ -86,15 +86,24 @@ mode, the item for the mode SYMBOL is looked up in the alist instead."
(integer :tag "Group "))
(symbol :tag "Like other")))))
-(defcustom tildify-string-alist
- '((latex-mode . "~")
- (tex-mode . latex-mode)
- (plain-tex-mode . latex-mode)
- (sgml-mode . "&nbsp;")
- (html-mode . sgml-mode)
- (xml-mode . "&#160;") ; XML does not define &nbsp; use numeric reference
- (nxml-mode . xml-mode)
- (t . " "))
+(defcustom tildify-space-string "\u00A0"
+ "Representation of a hard (a.k.a. no-break) space in current major mode.
+
+Used by `tildify-buffer' in places where space is required but line
+cannot be broken. For example \"~\" for TeX or \"&#160;\" for SGML,
+HTML and XML modes. A no-break space Unicode character (\"\\u00A0\")
+might be used for other modes if compatible encoding is used.
+
+If nil, current major mode has no way to represent a hard space."
+ :version "25.1"
+ :group 'tildify
+ :type '(choice (const :tag "Space character (no hard-space representation)"
+ " ")
+ (const :tag "No-break space (U+00A0)" "\u00A0")
+ (string :tag "Custom string"))
+ :safe t)
+
+(defcustom tildify-string-alist ()
"Alist specifying what is a hard space in the current major mode.
Each alist item is of the form (MAJOR-MODE . STRING) or
@@ -118,6 +127,8 @@ mode, the item for the mode SYMBOL is looked up in the alist instead."
(choice (const :tag "No-break space (U+00A0)" "\u00A0")
(string :tag "String ")
(symbol :tag "Like other")))))
+(make-obsolete-variable 'tildify-string-alist
+ 'tildify-space-string "25.1")
(defcustom tildify-ignored-environments-alist
`((latex-mode
@@ -193,7 +204,7 @@ END-REGEX defines end of the corresponding text part and can be either:
;;;###autoload
(defun tildify-region (beg end &optional dont-ask)
"Add hard spaces in the region between BEG and END.
-See variables `tildify-pattern-alist', `tildify-string-alist', and
+See variables `tildify-pattern-alist', `tildify-space-string', and
`tildify-ignored-environments-alist' for information about configuration
parameters.
This function performs no refilling of the changed text.
@@ -214,7 +225,7 @@ won't be prompted for confirmation of each substitution."
;;;###autoload
(defun tildify-buffer (&optional dont-ask)
"Add hard spaces in the current buffer.
-See variables `tildify-pattern-alist', `tildify-string-alist', and
+See variables `tildify-pattern-alist', `tildify-space-string', and
`tildify-ignored-environments-alist' for information about configuration
parameters.
This function performs no refilling of the changed text.
@@ -303,7 +314,8 @@ replacements done and response is one of symbols: t (all right), nil
(let* ((alist (tildify--pick-alist-entry tildify-pattern-alist))
(regexp (car alist))
(match-number (cadr alist))
- (tilde (tildify--pick-alist-entry tildify-string-alist))
+ (tilde (or (tildify--pick-alist-entry tildify-string-alist)
+ tildify-space-string))
(end-marker (copy-marker end))
answer
bad-answer
diff --git a/test/ChangeLog b/test/ChangeLog
index 2dfd5151f09..1c739d456ac 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2014-11-17 Michal Nazarewicz <mina86@mina86.com>
+
+ * automated/tildify-tests.el (tildify-test-html, tildify-test-xml):
+ HTML and XML now use no-break space as hard space. Update tests.
+
2014-11-17 Glenn Morris <rgm@gnu.org>
* automated/occur-tests.el (occur-test-case, occur-test-create):
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index 53c2e620195..e532cf00686 100644
--- a/test/automated/tildify-tests.el
+++ b/test/automated/tildify-tests.el
@@ -73,7 +73,7 @@ after `tildify-buffer' is run."
(ert-deftest tildify-test-html ()
"Tests tildification in an HTML document"
(let* ((sentence (tildify-test--example-sentence " "))
- (with-nbsp (tildify-test--example-sentence "&nbsp;")))
+ (with-nbsp (tildify-test--example-sentence " ")))
(tildify-test--test '(html-mode sgml-mode)
(tildify-test--example-html sentence sentence)
(tildify-test--example-html sentence with-nbsp))))
@@ -81,7 +81,7 @@ after `tildify-buffer' is run."
(ert-deftest tildify-test-xml ()
"Tests tildification in an XML document"
(let* ((sentence (tildify-test--example-sentence " "))
- (with-nbsp (tildify-test--example-sentence "&#160;")))
+ (with-nbsp (tildify-test--example-sentence " ")))
(tildify-test--test '(nxml-mode)
(tildify-test--example-html sentence sentence t)
(tildify-test--example-html sentence with-nbsp t))))