[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/engrave-faces 4ef39b1 10/36: Improve handling of face i
From: |
ELPA Syncer |
Subject: |
[elpa] externals/engrave-faces 4ef39b1 10/36: Improve handling of face inheritance. |
Date: |
Tue, 31 Aug 2021 01:57:25 -0400 (EDT) |
branch: externals/engrave-faces
commit 4ef39b1a06d96695e6824b14517eadb67fbce462
Author: TEC <tec@tecosaur.com>
Commit: TEC <tec@tecosaur.com>
Improve handling of face inheritance.
Now if a face inherits from a face with explicit styling, that explicit
styling is used instead of the current styling of the inherited face.
---
engrave-faces.el | 40 ++++++++++++++++++++++++++++------------
1 file changed, 28 insertions(+), 12 deletions(-)
diff --git a/engrave-faces.el b/engrave-faces.el
index f64d81c..e51f079 100644
--- a/engrave-faces.el
+++ b/engrave-faces.el
@@ -121,20 +121,36 @@ output.")
(run-hooks (intern (concat "engrave-faces-" backend "-after-hook"))))
engraved-buf))))
-(defun engrave-faces-merge-attributes (faces)
+(defun engrave-faces-merge-attributes (faces &optional attributes)
+ "Find the final ATTRIBUTES for text with FACES."
+ (setq faces (engrave-faces-explicit-inheritance faces))
(apply #'append
(mapcar (lambda (attr)
- (list attr
- (car
- (delq nil
- (delq 'unspecified
- (mapcar (lambda (face)
- (or (plist-get (cdr (assoc
face engrave-faces-preset-styles)) attr)
- (cond
- ((symbolp face)
(face-attribute face attr nil t))
- ((listp face) (plist-get
face attr)))))
- (delq 'default (if (listp faces)
faces (list faces)))))))))
- engrave-faces-attributes-of-interest)))
+ (list attr (car (engrave-faces-attribute-values faces
attr))))
+ (or attributes engrave-faces-attributes-of-interest))))
+
+(defun engrave-faces-explicit-inheritance (faces)
+ "Expand :inherit for each face in FACES.
+I.e. ([facea :inherit faceb] facec) results in (facea faceb facec)"
+ (apply #'append (mapcar
+ (lambda (face)
+ (cons face
+ (let ((inherit (face-attribute face :inherit nil
nil)))
+ (when (and inherit (not (eq inherit
'unspecified)))
+ (engrave-faces-explicit-inheritance (list
inherit))))))
+ faces)))
+
+(defun engrave-faces-attribute-values (faces attribute)
+ "Fetch all specified instances of ATTRIBUTE for FACES, ignoring inheritence.
+To consider inheritence, use `engrave-faces-explicit-inheritance' first."
+ (delq nil (delq 'unspecified
+ (mapcar
+ (lambda (face)
+ (or (plist-get (cdr (assoc face
engrave-faces-preset-styles)) attribute)
+ (cond
+ ((symbolp face) (face-attribute face attribute nil
nil))
+ ((listp face) (plist-get face attribute)))))
+ (delq 'default (if (listp faces) faces (list faces)))))))
(defun engrave-faces-next-face-change (pos &optional limit)
;; (engrave-faces-next-change pos 'face limit) would skip over entire
- [elpa] branch externals/engrave-faces created (now 95d25d4), ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 8fe5dec 01/36: Initial commit, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces d12687f 02/36: Add autoloading, fix typo, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 757ba80 05/36: Improve attribute-plist face handling, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 19da183 06/36: Add strikethrough support, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces c2ad032 11/36: Allow .-merge-attributes to work with single face, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 93fc726 03/36: Check preset faces when merging, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces c5c83ef 08/36: Fix invalid docstring in macro, remove unused func, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 4ef39b1 10/36: Improve handling of face inheritance.,
ELPA Syncer <=
- [elpa] externals/engrave-faces 3f7c5d5 04/36: Fix homepage url, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces aaa030a 07/36: Add licence, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 59bfd13 09/36: Fix single-face text being unstyled, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 52ab6fb 15/36: LaTeX export: fix edge case with braces across \n, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 3b3dda6 19/36: Improve docstrings and add some defcustoms, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces b6d31d8 14/36: Account for multiple inherited faces, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 0cc9159 12/36: No longer set default face information separately, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 14eddbe 13/36: LaTeX: Don't set colour at the start of a block, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces 7fc664a 20/36: Add interactive commands for backends, ELPA Syncer, 2021/08/31
- [elpa] externals/engrave-faces ccebbdd 18/36: Add the org-block face to the preset, improve doc, ELPA Syncer, 2021/08/31