bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#18730: [PATCH] tildify.el: introduce a `tildify-space-string' variab


From: Michal Nazarewicz
Subject: bug#18730: [PATCH] tildify.el: introduce a `tildify-space-string' variable
Date: Tue, 28 Oct 2014 23:01:53 +0100
User-agent: Notmuch/0.17+15~gb65ca8e (http://notmuchmail.org) Emacs/25.0.50.1 (x86_64-unknown-linux-gnu)

Deprecate `tildify-string-alist' variable and instead introduce
a new `tildify-space-string' variable.  The alist was somehow
complicated to use, both for users and in code, and did not work
correctly with derived modes.  Instead of trying to make its
handling even more complicated to fix the latter problem, replace
it with `tildify-space-string' buffer-local variable.
---
 etc/NEWS                        |  3 +++
 lisp/nxml/nxml-mode.el          |  9 +++++++++
 lisp/textmodes/sgml-mode.el     |  9 +++++++++
 lisp/textmodes/tex-mode.el      |  4 ++++
 lisp/textmodes/tildify.el       | 38 ++++++++++++++++++++++++++------------
 test/automated/tildify-tests.el |  2 +-
 6 files changed, 52 insertions(+), 13 deletions(-)

On Fri, Oct 24 2014, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> --- a/lisp/textmodes/tildify.el
>> +++ b/lisp/textmodes/tildify.el
>> @@ -86,17 +86,29 @@ mode, the item for the mode SYMBOL is looked up in the 
>> alist instead."
>>                                         (integer :tag "Group "))
>>                                 (symbol :tag "Like other")))))
>> 
>> +(defcustom hard-space-string nil
>
> As long as it's in tildify.el it should have a "tildify-" prefix.

Yeah, I was hoping I could find some more generic place for the variable
to live in, but couldn't in the end.  Renamed to tildify-space-string.

>> but now compilation fails with:
>
>> textmodes/tex-mode.el:1210:15:Warning: assignment to free variable
>>     `hard-space-string'
>
> That's not a failure, just a warning.

Ah, yes, I missed an unrelated compilation error.

diff --git a/etc/NEWS b/etc/NEWS
index 8bb4f41..02f2085 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -263,6 +263,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/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 4859bbc..a1472b5 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]
@@ -504,6 +506,13 @@ be treated as a single markup item, set the variable
 
 Many aspects this mode can be customized using
 \\[customize-group] nxml RET."
+  ;; If encoding allows use non-break space character as hard space, otherwise
+  ;; use numeric entity (since XML does not define &nbsp;).
+  (setq-local tildify-space-string
+              (if (memq (coding-system-change-eol-conversion
+                         buffer-file-coding-system nil)
+                        (find-coding-systems-string " "))
+                  " " "&#160;"))
   ;; (kill-all-local-variables)
   (set (make-local-variable 'mode-line-process) '((nxml-degraded "/degraded")))
   ;; We'll determine the fill prefix ourselves
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 39ac062..d7d82a8 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 allows use non-break space character as hard space, otherwise
+  ;; use numeric entity (so we don't depend on &nbsp; being defined).
+  (setq-local tildify-space-string
+              (if (memq (coding-system-change-eol-conversion
+                         buffer-file-coding-system nil)
+                        (find-coding-systems-string " "))
+                  " " "&#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 bc10eab..0cfc0cf 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 91f5a38..0c092b3 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,17 +86,29 @@ mode, the item for the mode SYMBOL is looked up in the 
alist instead."
                                        (integer :tag "Group "))
                                (symbol :tag "Like other")))))
 
+(defcustom tildify-space-string nil
+  "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 "No hard-space representation")
+                 (const  :tag "No-break space (U+00A0)" "\u00A0")
+                 (string :tag "Custom string"))
+  :safe t)
+
 (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 . " "))
+  '()
   "Alist specifying what is a hard space in the current major mode.
 
+This variable is deprecated in favour of `tildify-space-string'
+variable and takes effect only if `tildify-space-string' is not set.
+
 Each alist item is of the form (MAJOR-MODE . STRING) or
 \(MAJOR-MODE . SYMBOL).
 
@@ -193,7 +205,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 +226,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 +315,9 @@ 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-space-string
+                     (tildify--pick-alist-entry tildify-string-alist)
+                     " "))
           (end-marker (copy-marker end))
           answer
           bad-answer
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index 53c2e62..e532cf0 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))))
-- 
2.1.0.rc2.206.gedb03e5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]