emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 52c3946: Make translation of quotes to curly in doc


From: Alan Mackenzie
Subject: [Emacs-diffs] master 52c3946: Make translation of quotes to curly in doc strings optional.
Date: Thu, 18 Jun 2015 21:09:18 +0000

branch: master
commit 52c3946c872c8bd96508f74cdda5cbb90c664306
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    Make translation of quotes to curly in doc strings optional.
    
    src/doc.c (traditional, prefer-unicode): new symbols.
    (help-quote-translation): new variable.
    (Fsubstitute_command_keys): make translation of quotes dependent on
    `help-quote-translation'; also translate curly quotes back to ASCII
    ones.
    
    lisp/cus-start.el (top-level): Add a customization entry for
    `help-quote-translation'.
---
 lisp/cus-start.el |    9 ++++++++-
 src/doc.c         |   34 ++++++++++++++++++++++++++++++++--
 2 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 8740f07..5dd3681 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -220,7 +220,14 @@ Leaving \"Default\" unchecked is equivalent with 
specifying a default of
             (visible-bell display boolean)
             (no-redraw-on-reenter display boolean)
 
-            ;; dosfns.c
+            ;; doc.c
+             (help-quote-translation help
+                                     (choice
+                                      (const :tag "No translation" nil)
+                                      (const :tag "Translate curly single 
quotes to ASCII" traditional)
+                                      (const :tag "Translate ASCII single 
quotes to curly" prefer-unicode)))
+
+             ;; dosfns.c
             (dos-display-scancodes display boolean)
             (dos-hyper-key keyboard integer)
             (dos-super-key keyboard integer)
diff --git a/src/doc.c b/src/doc.c
index f1ba643..6794ec7 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -932,7 +932,8 @@ Otherwise, return a new string.  */)
            strp = SDATA (string) + idx;
          }
        }
-      else if (strp[0] == '`')
+      else if ((Vhelp_quote_translation == Qprefer_unicode)
+               && (strp[0] == '`'))
        {
          in_quote = true;
          start = (unsigned char *) "\xE2\x80\x98"; /* ‘ */
@@ -942,12 +943,27 @@ Otherwise, return a new string.  */)
          idx = strp - SDATA (string) + 1;
          goto subst;
        }
-      else if (strp[0] == '\'' && in_quote)
+      else if ((Vhelp_quote_translation == Qprefer_unicode)
+               && (strp[0] == '\'' && in_quote))
        {
          in_quote = false;
          start = (unsigned char *) "\xE2\x80\x99"; /* ’ */
          goto subst_quote;
        }
+
+      else if ((Vhelp_quote_translation == Qtraditional)
+               && (strp[0] == 0xE2)
+               && (strp[1] == 0x80)
+               && ((strp[2] == 0x98)      /* curly opening quote */
+                   || (strp[2] == 0x99))) /* curly closing quote */
+        {
+          start = (strp[2] == 0x98) ? "`" : "'";
+          length = 1;
+          length_byte = 1;
+          idx = strp - SDATA (string) + 3;
+          goto subst;
+        }
+
       else if (! multibyte)            /* just copy other chars */
        *bufp++ = *strp++, nchars++;
       else
@@ -977,6 +993,8 @@ void
 syms_of_doc (void)
 {
   DEFSYM (Qfunction_documentation, "function-documentation");
+  DEFSYM (Qtraditional, "traditional");
+  DEFSYM (Qprefer_unicode, "prefer-unicode");
 
   DEFVAR_LISP ("internal-doc-file-name", Vdoc_file_name,
               doc: /* Name of file containing documentation strings of 
built-in symbols.  */);
@@ -986,6 +1004,18 @@ syms_of_doc (void)
                doc: /* A list of files used to build this Emacs binary.  */);
   Vbuild_files = Qnil;
 
+  DEFVAR_LISP ("help-quote-translation", Vhelp_quote_translation,
+               doc: /* How to translate quotes for display in *Help*.
+If the value is nil (default), no translation is done.
+If it's the symbol `traditional', any occurrences of the curly quotes
+are translated to their ASCII "equivalents", GRAVE and APOSTROPHE.
+If it's the symbol `prefer-unicode', any matched pairs of GRAVE and
+APOSTROPHE will get translated into the "equivalent" curly quotes.
+
+Note that any translation done is done in a fresh copy of the doc
+string, and doesn't overwrite the original characters. */);
+  Vhelp_quote_translation = Qnil;
+
   defsubr (&Sdocumentation);
   defsubr (&Sdocumentation_property);
   defsubr (&Ssnarf_documentation);



reply via email to

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