Function: startup--setup-quote-display

startup--setup-quote-display is a byte-compiled function defined in startup.el.gz.

Signature

(startup--setup-quote-display &optional STYLE)

Documentation

If needed, display ASCII approximations to curved quotes.

Do this by modifying standard-display-table. Optional STYLE specifies the desired quoting style, as in text-quoting-style(var)/text-quoting-style(fun). If STYLE is nil, display appropriately for the terminal.

Source Code

;; Defined in /usr/src/emacs/lisp/startup.el.gz
(defun startup--setup-quote-display (&optional style)
  "If needed, display ASCII approximations to curved quotes.
Do this by modifying `standard-display-table'.  Optional STYLE
specifies the desired quoting style, as in `text-quoting-style'.
If STYLE is nil, display appropriately for the terminal."
  (let ((repls (let ((style-repls (assq style '((grave . "`'\"\"")
                                                (straight . "''\"\"")))))
                 (if style-repls (cdr style-repls) (make-vector 4 nil))))
        glyph-count)
    ;; REPLS is a sequence of the four replacements for "‘’“”", respectively.
    ;; If STYLE is nil, infer REPLS from terminal characteristics.
    (unless style
      ;; On a terminal that supports glyph codes,
      ;; GLYPH-COUNT[i] is the number of times that glyph code I
      ;; represents either an ASCII character or one of the 4
      ;; quote characters.  This assumes glyph codes are valid
      ;; Elisp characters, which is a safe assumption in practice.
      (when (integerp (internal-char-font nil (max-char)))
        (setq glyph-count (make-char-table nil 0))
        (dotimes (i 132)
          (let ((glyph (internal-char-font
                        nil (if (< i 128) i (aref "‘’“”" (- i 128))))))
            (when (<= 0 glyph)
              (aset glyph-count glyph (1+ (aref glyph-count glyph)))))))
      (dotimes (i 2)
        (let ((lq (aref "‘“" i)) (rq (aref "’”" i))
              (lr (aref "`\"" i)) (rr (aref "'\"" i))
              (i2 (* i 2)))
          (unless (if glyph-count
                      ;; On a terminal that supports glyph codes, use
                      ;; ASCII replacements unless both quotes are displayable.
                      ;; If not using ASCII replacements, highlight
                      ;; quotes unless they are both unique among the
                      ;; 128 + 4 characters of concern.
                      (let ((lglyph (internal-char-font nil lq))
                            (rglyph (internal-char-font nil rq)))
                        (when (and (<= 0 lglyph) (<= 0 rglyph))
                          (setq lr lq rr rq)
                          (and (= 1 (aref glyph-count lglyph))
                               (= 1 (aref glyph-count rglyph)))))
                    ;; On a terminal that does not support glyph codes, use
                    ;; ASCII replacements unless both quotes are displayable.
                    (and (char-displayable-p lq)
                         (char-displayable-p rq)))
            (aset repls i2 lr)
            (aset repls (1+ i2) rr)))))
    (dotimes (i 4)
      (let ((char (aref "‘’“”" i))
            (repl (aref repls i)))
        (if repl
            (aset (or standard-display-table
                      (setq standard-display-table (make-display-table)))
                  char (vector (make-glyph-code repl 'homoglyph)))
          (when standard-display-table
            (aset standard-display-table char nil)))))))