emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/auctex 4c42f7a 25/57: Revert "Remove multi-level/invisi


From: Tassilo Horn
Subject: [elpa] externals/auctex 4c42f7a 25/57: Revert "Remove multi-level/invisible feature of font-latex-fontify-script"
Date: Wed, 11 Jan 2017 18:01:39 +0000 (UTC)

branch: externals/auctex
commit 4c42f7a54dc7ab1e405a23c964eccc67cc49f359
Author: Tassilo Horn <address@hidden>
Commit: Tassilo Horn <address@hidden>

    Revert "Remove multi-level/invisible feature of font-latex-fontify-script"
    
    This reverts commit ccec8501960a448dd8faccaae54dfd9839a37c30.
---
 doc/auctex.texi |   15 ++++++++++++---
 font-latex.el   |   57 +++++++++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/doc/auctex.texi b/doc/auctex.texi
index 3c3c293..e371899 100644
--- a/doc/auctex.texi
+++ b/doc/auctex.texi
@@ -2196,9 +2196,18 @@ variables @code{font-latex-fontify-script} and
 If non-nil, fontify subscript and superscript strings.  Concretely, this
 means that the scripts are raised or lowered.
 
-Note that this feature is not available on XEmacs, for which it is
-disabled per default.  In GNU Emacs raising and lowering is not enabled
-for versions 21.3 and before due to it working not properly.
+Another possiblity is setting this variable to the symbol
address@hidden  In this case, in a formula @code{x^y^z}, y is
+raised above x, and z is raised above y.  With many script levels, the
+text might become too small to be readable.
+
+Lastly, you can set this variable to @code{invisible} whose behavior is
+like @code{multi-level}, and in addition the super-/subscript characters
address@hidden and @code{_} are not displayed.
+
+Note that this feature is not available on XEmacs, for which
+it is disabled per default.  In GNU Emacs raising and lowering is not
+enabled for versions 21.3 and before due to it working not properly.
 @end defopt
 
 @defopt font-latex-script-display
diff --git a/font-latex.el b/font-latex.el
index 1e96c00..896c6af 100644
--- a/font-latex.el
+++ b/font-latex.el
@@ -810,7 +810,7 @@ Generated by `font-latex-make-user-keywords'.")))
     (add-to-list 'font-latex-keywords-1 item)
     (add-to-list 'font-latex-keywords-2 item))
   (dolist (item
-          '((font-latex-match-math-env
+          `((font-latex-match-math-env
              (0 'font-latex-warning-face t t)
              (1 'font-latex-math-face append t))
             (font-latex-match-math-envII
@@ -818,7 +818,9 @@ Generated by `font-latex-make-user-keywords'.")))
             (font-latex-match-simple-command
              (0 'font-latex-sedate-face append))
             (font-latex-match-script
-             (1 (font-latex-script (match-beginning 0)) append))))
+             (1 (font-latex-script (match-beginning 0)) append))
+            (font-latex-match-script-chars
+             (0 '(face font-latex-math-face invisible t)))))
     (add-to-list 'font-latex-keywords-2 item t)))
 (font-latex-make-user-keywords)
 
@@ -850,10 +852,28 @@ locking machinery will be triggered."
 
 (defcustom font-latex-fontify-script (not (featurep 'xemacs))
   "If non-nil, fontify subscript and superscript strings.
-This feature does not work in XEmacs."
-  :type 'boolean
+This feature does not work in XEmacs.
+
+By default, super/subscripts are raised/lowered if this variable
+is non-nil.  This fontification only affects one level of
+scripts, e.g., in x^{y^z}, the y and the z have the same size and
+are equally raised over x.
+
+If this variable is set to the symbol `multi-level', then y is
+raised above x, and z is raised above y.  With many script
+levels, the text might become too small to be readable.
+
+If this variable is set to the symbol `invisible', then the
+effect is essentially like `multi-level' but additionally the
+script operators ^ and _ are not displayed."
+  :type '(choice (boolean :tag "Enabled")
+                (const :tag "Multiple levels" multi-level)
+                (const :tag "Hide ^ and _" invisible))
   :group 'font-latex)
-(put 'font-latex-fontify-script 'safe-local-variable #'booleanp)
+(put 'font-latex-fontify-script 'safe-local-variable
+     (lambda (val)
+       (or (TeX-booleanp val)
+          (memq val '(multi-level invisible)))))
 
 (defcustom font-latex-script-display '((raise -0.3) . (raise 0.3))
   "Display specification for subscript and superscript content.
@@ -1895,11 +1915,12 @@ END marks boundaries for searching for quotation ends."
   (when (and font-latex-fontify-script
             (re-search-forward "[_^] *\\([^\n\\{}]\\|\
 \\\\\\(address@hidden|[^ \t\n]\\)\\|\\({\\)\\)" limit t))
-    (if (font-latex-faces-present-p '(font-latex-subscript-face
-                                     font-latex-superscript-face))
-       ;; Apply subscript and superscript highlighting only once in order to
-       ;; prevent the font size becoming too small.  We set an empty match to
-       ;; do that.
+    (if (and (not (memq font-latex-fontify-script '(multi-level invisible)))
+            (font-latex-faces-present-p '(font-latex-subscript-face
+                                          font-latex-superscript-face)))
+       ;; Apply subscript and superscript highlighting only once (in case
+       ;; font-latex-fontify-script is not 'multi-level) in order to prevent
+       ;; the font size becoming too small.  We set an empty match to do that.
        (let ((point (point)))
          (store-match-data (list point point point point)))
       (when (match-end 3)
@@ -1914,6 +1935,22 @@ END marks boundaries for searching for quotation ends."
                              (list beg beg beg beg))))))
     t))
 
+(defun font-latex-match-script-chars (limit)
+  (and (eq font-latex-fontify-script 'invisible)
+       (re-search-forward "[_^]" limit t)
+       (let ((pos (match-beginning 0)))
+        (and (font-latex-faces-present-p 'font-latex-math-face pos)
+             (not (font-latex-faces-present-p '(font-lock-constant-face
+                                                font-lock-builtin-face
+                                                font-lock-comment-face
+                                                font-latex-verbatim-face) pos))
+             ;; Check for backslash quoting
+             (not (let ((odd nil)
+                        (pos pos))
+                    (while (eq (char-before pos) ?\\)
+                      (setq pos (1- pos) odd (not odd)))
+                    odd))))))
+
 ;; Copy and adaption of `tex-font-lock-suscript' from tex-mode.el in
 ;; GNU Emacs on 2004-07-07.
 (defun font-latex-script (pos)



reply via email to

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