Mercurial > hg > xemacs-beta
comparison lisp/specifier.el @ 3926:74b10360eef9
[xemacs-hg @ 2007-04-29 11:15:01 by aidan]
Don't try to manipulate XFT fonts on a mswindows device.
author | aidan |
---|---|
date | Sun, 29 Apr 2007 11:15:04 +0000 |
parents | fd1acd2f457a |
children | 4f2243a0dc04 |
comparison
equal
deleted
inserted
replaced
3925:1cc024bd0b7b | 3926:74b10360eef9 |
---|---|
737 ;; Return DEVTYPE (a devtype) if it matches DEVTYPE-SPEC, else nil. | 737 ;; Return DEVTYPE (a devtype) if it matches DEVTYPE-SPEC, else nil. |
738 ;; DEVTYPE-SPEC can be nil (all types OK), a device type (only that type | 738 ;; DEVTYPE-SPEC can be nil (all types OK), a device type (only that type |
739 ;; OK), or `window-system' -- window system device types OK. | 739 ;; OK), or `window-system' -- window system device types OK. |
740 (cond ((not devtype-spec) devtype) | 740 (cond ((not devtype-spec) devtype) |
741 ((eq devtype-spec 'window-system) | 741 ((eq devtype-spec 'window-system) |
742 (and (not (memq devtype '(tty stream))) devtype)) | 742 (and (not (memq devtype '(msprinter tty stream))) devtype)) |
743 (t (and (eq devtype devtype-spec) devtype)))) | 743 (t (and (eq devtype devtype-spec) devtype)))) |
744 | 744 |
745 (defun add-tag-to-inst-list (inst-list tag-set) | 745 (defun add-tag-to-inst-list (inst-list tag-set) |
746 "Add TAG-SET (tag or tag-set) to all tags in INST-LIST." | 746 "Add TAG-SET (tag or tag-set) to all tags in INST-LIST." |
747 ;; Ah, all is sweetness and light with `loop' | 747 ;; Ah, all is sweetness and light with `loop' |
813 | 813 |
814 (defun derive-device-type-from-tag-set (tag-set &optional try-stages | 814 (defun derive-device-type-from-tag-set (tag-set &optional try-stages |
815 devtype-spec current-device) | 815 devtype-spec current-device) |
816 "Given a tag set, try (heuristically) to get a device type from it. | 816 "Given a tag set, try (heuristically) to get a device type from it. |
817 | 817 |
818 There are three stages that this function proceeds through, each one trying | 818 If CURRENT-DEVICE is supplied, then this function either returns its type, |
819 in the event that it matches TAG-SET, or nil. | |
820 | |
821 Otherwise, there are three stages that it proceeds through, each one trying | |
819 harder than the previous to get a value. TRY-STAGES controls how many | 822 harder than the previous to get a value. TRY-STAGES controls how many |
820 stages to try. If nil or 1, only stage 1 is done; if 2; stages 1 and 2 are | 823 stages to try. If nil or 1, only stage 1 is done; if 2; stages 1 and 2 are |
821 done; if 3, stages 1-3 are done; if t, all stages are done (currently 1-3). | 824 done; if 3, stages 1-3 are done; if t, all stages are done (currently 1-3). |
822 | 825 |
823 Stage 1 looks at the tags themselves to see if any of them are device-type | 826 Stage 1 looks at the tags themselves to see if any of them are device-type |
845 DEVTYPE-SPEC flag; thus, it may return nil." | 848 DEVTYPE-SPEC flag; thus, it may return nil." |
846 (or try-stages (setq try-stages 1)) | 849 (or try-stages (setq try-stages 1)) |
847 (if (eq try-stages t) (setq try-stages 3)) | 850 (if (eq try-stages t) (setq try-stages 3)) |
848 (check-argument-range try-stages 1 3) | 851 (check-argument-range try-stages 1 3) |
849 (flet ((delete-wrong-type (x) | 852 (flet ((delete-wrong-type (x) |
850 (delete-if-not | 853 (delete-if-not |
851 #'(lambda (y) | 854 #'(lambda (y) |
852 (device-type-matches-spec y devtype-spec)) | 855 (device-type-matches-spec y devtype-spec)) |
853 x))) | 856 x))) |
854 (let ((both (intersection (device-type-list) | 857 (let ((both (intersection |
855 (canonicalize-tag-set tag-set)))) | 858 (if current-device |
859 (list (device-type current-device)) | |
860 (device-type-list)) | |
861 (canonicalize-tag-set tag-set)))) | |
856 ;; shouldn't be more than one (will fail), but whatever | 862 ;; shouldn't be more than one (will fail), but whatever |
857 (if both (first (delete-wrong-type both)) | 863 (if both (first (delete-wrong-type both)) |
858 (and (>= try-stages 2) | 864 (and (>= try-stages 2) |
859 ;; no device types mentioned. try the hard way, | 865 ;; no device types mentioned. try the hard way, |
860 ;; i.e. check each existing device to see if it will | 866 ;; i.e. check each existing device (or the |
861 ;; pass muster. | 867 ;; supplied device) to see if it will pass muster. |
862 (let ((okdevs | 868 ;; |
863 (delete-wrong-type | 869 ;; Further checking is not relevant if current-device was |
864 (delete-duplicates | 870 ;; supplied. |
865 (mapcan | 871 (not current-device) |
866 #'(lambda (dev) | 872 (let ((okdevs |
867 (and (device-matches-specifier-tag-set-p | 873 (delete-wrong-type |
868 dev tag-set) | 874 (delete-duplicates |
869 (list (device-type dev)))) | 875 (mapcan |
870 (device-list))))) | 876 #'(lambda (dev) |
871 (devtype (cond ((or (null devtype-spec) | 877 (and (device-matches-specifier-tag-set-p |
872 (eq devtype-spec 'window-system)) | 878 dev tag-set) |
873 (let ((dev (derive-domain-from-locale | 879 (list (device-type dev)))) |
874 'global devtype-spec | 880 (if current-device |
875 current-device))) | 881 (list current-device) |
876 (and dev (device-type dev)))) | 882 (device-list)))))) |
877 (t devtype-spec)))) | 883 (devtype (cond ((or (null devtype-spec) |
878 (cond ((= 1 (length okdevs)) (car okdevs)) | 884 (eq devtype-spec 'window-system)) |
879 ((< try-stages 3) nil) | 885 (let ((dev (derive-domain-from-locale |
880 ((null okdevs) devtype) | 886 'global devtype-spec |
881 ((memq devtype okdevs) devtype) | 887 current-device))) |
882 (t (car okdevs))))))))) | 888 (and dev (device-type dev)))) |
889 (t devtype-spec)))) | |
890 (cond ((= 1 (length okdevs)) (car okdevs)) | |
891 ((< try-stages 3) nil) | |
892 ((null okdevs) devtype) | |
893 ((memq devtype okdevs) devtype) | |
894 (t (car okdevs))))))))) | |
883 | 895 |
884 ;; Sheesh, the things you do to get "intuitive" behavior. | 896 ;; Sheesh, the things you do to get "intuitive" behavior. |
885 (defun derive-device-type-from-locale-and-tag-set (locale tag-set | 897 (defun derive-device-type-from-locale-and-tag-set (locale tag-set |
886 &optional devtype-spec | 898 &optional devtype-spec |
887 current-device) | 899 current-device) |
893 Finally, go back to the tag set and \"try harder\" -- if the selected | 905 Finally, go back to the tag set and \"try harder\" -- if the selected |
894 device matches the tag set, use its device type, else use some valid device | 906 device matches the tag set, use its device type, else use some valid device |
895 type from the tag set. | 907 type from the tag set. |
896 | 908 |
897 DEVTYPE-SPEC and CURRENT-DEVICE as in `derive-domain-from-locale'." | 909 DEVTYPE-SPEC and CURRENT-DEVICE as in `derive-domain-from-locale'." |
898 | |
899 (cond ((valid-specifier-domain-p locale) | 910 (cond ((valid-specifier-domain-p locale) |
900 ;; if locale is a domain, then it must match DEVTYPE-SPEC, | 911 ;; if locale is a domain, then it must match DEVTYPE-SPEC, |
901 ;; or we exit immediately with nil. | 912 ;; or we exit immediately with nil. |
902 (device-type-matches-spec (device-type (dfw-device locale)) | 913 (device-type-matches-spec (device-type (dfw-device locale)) |
903 devtype-spec)) | 914 devtype-spec)) |