diff options
author | Hans de Graaff <graaff@gentoo.org> | 2007-08-04 11:06:18 +0000 |
---|---|---|
committer | Hans de Graaff <graaff@gentoo.org> | 2007-08-04 11:06:18 +0000 |
commit | 19abc50a91da0bad3bd513342ba4edee4e6b8be1 (patch) | |
tree | 1c9a03cb61510c56fb94eb42660db903d85c8e0c | |
parent | ppc stable, bug #184623 (diff) | |
download | gentoo-2-19abc50a91da0bad3bd513342ba4edee4e6b8be1.tar.gz gentoo-2-19abc50a91da0bad3bd513342ba4edee4e6b8be1.tar.bz2 gentoo-2-19abc50a91da0bad3bd513342ba4edee4e6b8be1.zip |
Add font-lock-add-keywords and friends
(Portage version: 2.1.2.11)
-rw-r--r-- | app-editors/xemacs/ChangeLog | 10 | ||||
-rw-r--r-- | app-editors/xemacs/files/digest-xemacs-21.4.20-r5 | 6 | ||||
-rw-r--r-- | app-editors/xemacs/files/font-lock-keywords.patch | 224 | ||||
-rw-r--r-- | app-editors/xemacs/xemacs-21.4.20-r5.ebuild | 248 |
4 files changed, 487 insertions, 1 deletions
diff --git a/app-editors/xemacs/ChangeLog b/app-editors/xemacs/ChangeLog index 996ba8f9b9da..a14f3d653447 100644 --- a/app-editors/xemacs/ChangeLog +++ b/app-editors/xemacs/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for app-editors/xemacs # Copyright 2002-2007 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/ChangeLog,v 1.91 2007/06/23 11:27:18 graaff Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/ChangeLog,v 1.92 2007/08/04 11:06:18 graaff Exp $ + +*xemacs-21.4.20-r5 (04 Aug 2007) + + 04 Aug 2007; Hans de Graaff <graaff@gentoo.org> + +files/font-lock-keywords.patch, +xemacs-21.4.20-r5.ebuild: + Add support for GNU Emacs font-lock-add-keywords and related code. This code + will also be in the next xemacs 21.4.x release and is needed for + gentoo-syntax. *xemacs-21.4.20-r4 (23 Jun 2007) diff --git a/app-editors/xemacs/files/digest-xemacs-21.4.20-r5 b/app-editors/xemacs/files/digest-xemacs-21.4.20-r5 new file mode 100644 index 000000000000..716056cfd79c --- /dev/null +++ b/app-editors/xemacs/files/digest-xemacs-21.4.20-r5 @@ -0,0 +1,6 @@ +MD5 95c531ec2639990a09e92c59a855784e NeXT_XEmacs.tar.gz 39571 +RMD160 3c2cedf75e4ece412031b20a15614a78367393f4 NeXT_XEmacs.tar.gz 39571 +SHA256 35a0d988fd4ee801572639a99798571aa9fad140ddbed1455565ae9d5e0086c7 NeXT_XEmacs.tar.gz 39571 +MD5 faeb21de9da15cc2abd6c3fcdc1b6142 xemacs-21.4.20.tar.gz 8408589 +RMD160 95eb4d5fd9dfcc6575e805434daaf41701c8b5f0 xemacs-21.4.20.tar.gz 8408589 +SHA256 1062a9bfc719054e6873f9280d6ecc51fbed75a104e0582d378b7ee7bcac64f0 xemacs-21.4.20.tar.gz 8408589 diff --git a/app-editors/xemacs/files/font-lock-keywords.patch b/app-editors/xemacs/files/font-lock-keywords.patch new file mode 100644 index 000000000000..15a21f5ecdd0 --- /dev/null +++ b/app-editors/xemacs/files/font-lock-keywords.patch @@ -0,0 +1,224 @@ +--- font-lock.el 2006-06-04 18:05:28.000000000 +0200 ++++ ../../xemacs-21.5/lisp/font-lock.el 2007-06-23 09:13:48.000000000 +0200 +@@ -441,6 +449,32 @@ + Be very careful composing regexps for this list; the wrong pattern can + dramatically slow things down! + ") ++ ++(defvar font-lock-keywords-alist nil ++ "Alist of additional `font-lock-keywords' elements for major modes. ++ ++Each element has the form (MODE KEYWORDS . HOW). ++`font-lock-set-defaults' adds the elements in the list KEYWORDS to ++`font-lock-keywords' when Font Lock is turned on in major mode MODE. ++ ++If HOW is nil, KEYWORDS are added at the beginning of ++`font-lock-keywords'. If it is `set', they are used to replace the ++value of `font-lock-keywords'. If HOW is any other non-nil value, ++they are added at the end. ++ ++This is normally set via `font-lock-add-keywords' and ++`font-lock-remove-keywords'.") ++ ++(defvar font-lock-removed-keywords-alist nil ++ "Alist of `font-lock-keywords' elements to be removed for major modes. ++ ++Each element has the form (MODE . KEYWORDS). `font-lock-set-defaults' ++removes the elements in the list KEYWORDS from `font-lock-keywords' ++when Font Lock is turned on in major mode MODE. ++ ++This is normally set via `font-lock-add-keywords' and ++`font-lock-remove-keywords'.") ++ + ;;;###autoload + (make-variable-buffer-local 'font-lock-keywords) + +@@ -860,6 +899,188 @@ + (setq font-lock-maximum-decoration t) + (font-lock-recompute-variables))) + ++(defun font-lock-add-keywords (mode keywords &optional how) ++ "Add highlighting KEYWORDS for MODE. ++ ++MODE should be a symbol, the major mode command name, such as `c-mode' ++or nil. If nil, highlighting keywords are added for the current buffer. ++KEYWORDS should be a list; see the variable `font-lock-keywords'. ++By default they are added at the beginning of the current highlighting list. ++If optional argument HOW is `set', they are used to replace the current ++highlighting list. If HOW is any other non-nil value, they are added at the ++end of the current highlighting list. ++ ++For example: ++ ++ (font-lock-add-keywords 'c-mode ++ '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend) ++ (\"\\\\\\=<\\\\(and\\\\|or\\\\|not\\\\)\\\\\\=>\" . font-lock-keyword-face))) ++ ++adds two fontification patterns for C mode, to fontify `FIXME:' words, even in ++comments, and to fontify `and', `or' and `not' words as keywords. ++ ++The above procedure will only add the keywords for C mode, not ++for modes derived from C mode. To add them for derived modes too, ++pass nil for MODE and add the call to c-mode-hook. ++ ++For example: ++ ++ (add-hook 'c-mode-hook ++ (lambda () ++ (font-lock-add-keywords nil ++ '((\"\\\\\\=<\\\\(FIXME\\\\):\" 1 font-lock-warning-face prepend) ++ (\"\\\\\\=<\\\\(and\\\\|or\\\\|not\\\\)\\\\\\=>\" . ++ font-lock-keyword-face))))) ++ ++The above procedure may fail to add keywords to derived modes if ++some involved major mode does not follow the standard conventions. ++File a bug report if this happens, so the major mode can be corrected. ++ ++Note that some modes have specialized support for additional patterns, e.g., ++see the variables `c-font-lock-extra-types', `c++-font-lock-extra-types', ++`objc-font-lock-extra-types' and `java-font-lock-extra-types'." ++ (cond (mode ++ ;; If MODE is non-nil, add the KEYWORDS and HOW spec to ++ ;; `font-lock-keywords-alist' so `font-lock-set-defaults' uses them. ++ (let ((spec (cons keywords how)) cell) ++ (if (setq cell (assq mode font-lock-keywords-alist)) ++ (if (eq how 'set) ++ (setcdr cell (list spec)) ++ (setcdr cell (append (cdr cell) (list spec)))) ++ (push (list mode spec) font-lock-keywords-alist))) ++ ;; Make sure that `font-lock-removed-keywords-alist' does not ++ ;; contain the new keywords. ++ (font-lock-update-removed-keyword-alist mode keywords how)) ++ (t ++ ;; Otherwise set or add the keywords now. ++ ;; This is a no-op if it has been done already in this buffer ++ ;; for the correct major mode. ++ (font-lock-set-defaults) ++ (let ((was-compiled (eq (car font-lock-keywords) t))) ++ ;; Bring back the user-level (uncompiled) keywords. ++ (if was-compiled ++ (setq font-lock-keywords (cadr font-lock-keywords))) ++ ;; Now modify or replace them. ++ (if (eq how 'set) ++ (setq font-lock-keywords keywords) ++ (font-lock-remove-keywords nil keywords) ;to avoid duplicates ++ (let ((old (if (eq (car-safe font-lock-keywords) t) ++ (cdr font-lock-keywords) ++ font-lock-keywords))) ++ (setq font-lock-keywords (if how ++ (append old keywords) ++ (append keywords old))))) ++ ;; If the keywords were compiled before, compile them again. ++ (if was-compiled ++ (setq font-lock-keywords ++ (font-lock-compile-keywords font-lock-keywords))))))) ++ ++(defun font-lock-update-removed-keyword-alist (mode keywords how) ++ "Update `font-lock-removed-keywords-alist' when adding new KEYWORDS to MODE." ++ ;; When font-lock is enabled first all keywords in the list ++ ;; `font-lock-keywords-alist' are added, then all keywords in the ++ ;; list `font-lock-removed-keywords-alist' are removed. If a ++ ;; keyword was once added, removed, and then added again it must be ++ ;; removed from the removed-keywords list. Otherwise the second add ++ ;; will not take effect. ++ (let ((cell (assq mode font-lock-removed-keywords-alist))) ++ (if cell ++ (if (eq how 'set) ++ ;; A new set of keywords is defined. Forget all about ++ ;; our old keywords that should be removed. ++ (setq font-lock-removed-keywords-alist ++ (delq cell font-lock-removed-keywords-alist)) ++ ;; Delete all previously removed keywords. ++ (dolist (kword keywords) ++ (setcdr cell (delete kword (cdr cell)))) ++ ;; Delete the mode cell if empty. ++ (if (null (cdr cell)) ++ (setq font-lock-removed-keywords-alist ++ (delq cell font-lock-removed-keywords-alist))))))) ++ ++;; Written by Anders Lindgren <andersl@andersl.com>. ++;; ++;; Case study: ++;; (I) The keywords are removed from a major mode. ++;; In this case the keyword could be local (i.e. added earlier by ++;; `font-lock-add-keywords'), global, or both. ++;; ++;; (a) In the local case we remove the keywords from the variable ++;; `font-lock-keywords-alist'. ++;; ++;; (b) The actual global keywords are not known at this time. ++;; All keywords are added to `font-lock-removed-keywords-alist', ++;; when font-lock is enabled those keywords are removed. ++;; ++;; Note that added keywords are taken out of the list of removed ++;; keywords. This ensure correct operation when the same keyword ++;; is added and removed several times. ++;; ++;; (II) The keywords are removed from the current buffer. ++(defun font-lock-remove-keywords (mode keywords) ++ "Remove highlighting KEYWORDS for MODE. ++ ++MODE should be a symbol, the major mode command name, such as `c-mode' ++or nil. If nil, highlighting keywords are removed for the current buffer. ++ ++To make the removal apply to modes derived from MODE as well, ++pass nil for MODE and add the call to MODE-hook. This may fail ++for some derived modes if some involved major mode does not ++follow the standard conventions. File a bug report if this ++happens, so the major mode can be corrected." ++ (cond (mode ++ ;; Remove one keyword at the time. ++ (dolist (keyword keywords) ++ (let ((top-cell (assq mode font-lock-keywords-alist))) ++ ;; If MODE is non-nil, remove the KEYWORD from ++ ;; `font-lock-keywords-alist'. ++ (when top-cell ++ (dolist (keyword-list-how-pair (cdr top-cell)) ++ ;; `keywords-list-how-pair' is a cons with a list of ++ ;; keywords in the car top-cell and the original how ++ ;; argument in the cdr top-cell. ++ (setcar keyword-list-how-pair ++ (delete keyword (car keyword-list-how-pair)))) ++ ;; Remove keyword list/how pair when the keyword list ++ ;; is empty and how doesn't specify `set'. (If it ++ ;; should be deleted then previously deleted keywords ++ ;; would appear again.) ++ (let ((cell top-cell)) ++ (while (cdr cell) ++ (if (and (null (car (car (cdr cell)))) ++ (not (eq (cdr (car (cdr cell))) 'set))) ++ (setcdr cell (cdr (cdr cell))) ++ (setq cell (cdr cell))))) ++ ;; Final cleanup, remove major mode cell if last keyword ++ ;; was deleted. ++ (if (null (cdr top-cell)) ++ (setq font-lock-keywords-alist ++ (delq top-cell font-lock-keywords-alist)))) ++ ;; Remember the keyword in case it is not local. ++ (let ((cell (assq mode font-lock-removed-keywords-alist))) ++ (if cell ++ (unless (member keyword (cdr cell)) ++ (nconc cell (list keyword))) ++ (push (cons mode (list keyword)) ++ font-lock-removed-keywords-alist)))))) ++ (t ++ ;; Otherwise remove it immediately. ++ (font-lock-set-defaults) ++ (let ((was-compiled (eq (car font-lock-keywords) t))) ++ ;; Bring back the user-level (uncompiled) keywords. ++ (if was-compiled ++ (setq font-lock-keywords (cadr font-lock-keywords))) ++ ++ ;; Edit them. ++ (setq font-lock-keywords (copy-sequence font-lock-keywords)) ++ (dolist (keyword keywords) ++ (setq font-lock-keywords ++ (delete keyword font-lock-keywords))) ++ ++ ;; If the keywords were compiled before, compile them again. ++ (if was-compiled ++ (setq font-lock-keywords ++ (font-lock-compile-keywords font-lock-keywords))))))) + + ;;;;;;;;;;;;;;;;;;;;;; actual code ;;;;;;;;;;;;;;;;;;;;;; + diff --git a/app-editors/xemacs/xemacs-21.4.20-r5.ebuild b/app-editors/xemacs/xemacs-21.4.20-r5.ebuild new file mode 100644 index 000000000000..b6ffc4ef5ab4 --- /dev/null +++ b/app-editors/xemacs/xemacs-21.4.20-r5.ebuild @@ -0,0 +1,248 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-editors/xemacs/xemacs-21.4.20-r5.ebuild,v 1.1 2007/08/04 11:06:18 graaff Exp $ + +# Note: xemacs currently does not work with a hardened profile. If you +# want to use xemacs on a hardened profile then compile with the +# -nopie flag in CFLAGS or help fix bug #75028. + +export WANT_AUTOCONF="2.1" +inherit autotools eutils + +DESCRIPTION="highly customizable open source text editor and application development system" +HOMEPAGE="http://www.xemacs.org/" +SRC_URI="http://ftp.xemacs.org/xemacs-21.4/${P}.tar.gz + http://www.malfunction.de/afterstep/files/NeXT_XEmacs.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86" +IUSE="eolconv esd gif gpm pop postgres ldap xface nas dnd X jpeg tiff png mule motif freewnn canna xim athena neXt Xaw3d gdbm berkdb" + +X_DEPEND="x11-libs/libXt x11-libs/libXmu x11-libs/libXext x11-misc/xbitmaps" + +DEPEND="virtual/libc + !virtual/xemacs + berkdb? ( sys-libs/db ) + gdbm? ( >=sys-libs/gdbm-1.8.3 ) + >=sys-libs/zlib-1.1.4 + >=dev-libs/openssl-0.9.6 + >=media-libs/audiofile-0.2.3 + gpm? ( >=sys-libs/gpm-1.19.6 ) + postgres? ( >=dev-db/postgresql-7.2 ) + ldap? ( net-nds/openldap ) + esd? ( media-sound/esound ) + nas? ( media-libs/nas ) + X? ( $X_DEPEND !Xaw3d? ( !neXt? ( x11-libs/libXaw ) ) ) + dnd? ( x11-libs/dnd ) + motif? ( >=x11-libs/openmotif-2.1.30 ) + athena? ( x11-libs/libXaw ) + Xaw3d? ( x11-libs/Xaw3d ) + neXt? ( x11-libs/neXtaw ) + xface? ( media-libs/compface ) + tiff? ( media-libs/tiff ) + png? ( =media-libs/libpng-1.2* ) + jpeg? ( media-libs/jpeg ) + canna? ( app-i18n/canna ) + !amd64? ( freewnn? ( app-i18n/freewnn ) ) + >=sys-libs/ncurses-5.2 + >=app-admin/eselect-emacs-0.7-r1" + +PDEPEND="app-xemacs/xemacs-base + mule? ( app-xemacs/mule-base )" + +PROVIDE="virtual/xemacs virtual/editor" + +src_unpack() { + unpack ${P}.tar.gz + use neXt && unpack NeXT_XEmacs.tar.gz + + cd "${S}" + epatch ${FILESDIR}/xemacs-21.4.19-texi.patch + + # see bug 58350, 102540 and 143580 + epatch "${FILESDIR}"/xemacs-21.4.19-db.patch + + # Fix constent crashes with the combination native sound,linux,wav + epatch "${FILESDIR}"/xemacs-21.4.20-linuxplay.patch + + # Fix font-lock-warning-face not being exported, needed for + # gentoo-syntax + epatch "${FILESDIR}"/font-lock-warning-face.patch + + # font-lock-keywords is needed for gentoo-syntax and is available + # in 21.5. It has been approved for the next 21.4 release, but not + # yet committed. + epatch "${FILESDIR}"/font-lock-keywords.patch + + # Run autoconf. XEmacs tries to be smart by providing a stub + # configure.ac file for autoconf 2.59 but this throws our + # autotools eclass so it must be removed first. + rm "${S}"/configure.ac + eautoconf + + use neXt && cp "${WORKDIR}"/NeXT.XEmacs/xemacs-icons/* "${S}"/etc/toolbar/ +} + +src_compile() { + local myconf="" + + if use X; then + + myconf="${myconf} --with-widgets=athena" + myconf="${myconf} --with-dialogs=athena" + myconf="${myconf} --with-menubars=lucid" + myconf="${myconf} --with-scrollbars=lucid" + if use motif ; then + myconf="--with-widgets=motif" + myconf="${myconf} --with-dialogs=motif" + myconf="${myconf} --with-scrollbars=motif" + myconf="${myconf} --with-menubars=lucid" + fi + if use athena ; then + myconf="--with-scrollbars=athena" + fi + + if use Xaw3d; then + myconf="${myconf} --with-athena=3d" + elif use neXt; then + myconf="${myconf} --with-athena=next" + else + myconf="${myconf} --with-athena=xaw" + fi + + use dnd && myconf="${myconf} --with-dragndrop --with-offix" + + use tiff && myconf="${myconf} --with-tiff" || + myconf="${myconf} --without-tiff" + use png && myconf="${myconf} --with-png" || + myconf="${myconf} --without-png" + use jpeg && myconf="${myconf} --with-jpeg" || + myconf="${myconf} --without-jpeg" + use xface && myconf="${myconf} --with-xface" || + myconf="${myconf} --without-xface" + + else + myconf="${myconf} + --without-x + --without-xpm + --without-dragndrop + --with-gif=no" + fi + + if use mule ; then + myconf="${myconf} --with-mule" + + if use xim ; then + if use motif ; then + myconf="${myconf} --with-xim=motif" + else + myconf="${myconf} --with-xim=xlib" + fi + else + myconf="${myconf} --with-xim=no" + fi + + use canna && myconf="${myconf} --with-canna" || + myconf="${myconf} --without-canna" + use freewnn && myconf="${myconf} --with-wnn" || + myconf="${myconf} --without-wnn" + fi + + # This determines the type of sounds we are playing + local soundconf="native" + + # This determines how these sounds should be played + use nas && soundconf="${soundconf},nas" + use esd && soundconf="${soundconf},esd" + + myconf="${myconf} --with-sound=${soundconf}" + + if use gdbm || use berkdb ; then + use gdbm && mydb="gdbm" + + use berkdb && mydb="${mydb},berkdb" + + myconf="${myconf} --with-database=${mydb}" + else + myconf="${myconf} --without-database" + fi + + # fixes #21264, this should be fixed in 21.4.21 and has been fixed + # in 21.5 for sure. + use alpha && myconf="${myconf} --with-system-malloc" + use ppc64 && myconf="${myconf} --with-system-malloc" + use ia64 && myconf="${myconf} --with-system-malloc" + + # Don't use econf because it uses options which this configure + # script does not understand (like --host). + ./configure ${myconf} ${EXTRA_ECONF} \ + $(use_with gif ) \ + $(use_with gpm ) \ + $(use_with postgres postgresql ) \ + $(use_with ldap ) \ + $(use_with eolconv file-coding ) \ + $(use_with pop ) \ + --prefix=/usr \ + --with-ncurses \ + --with-msw=no \ + --mail-locking=flock \ + --with-site-lisp=yes \ + --with-site-modules=yes \ + || die + + emake || die +} + +src_install() { + make prefix="${D}"/usr \ + mandir="${D}"/usr/share/man/man1 \ + infodir="${D}"/usr/share/info \ + install gzip-el || die + + # Rename some applications installed in bin so that it is clear + # which application installed them and so that conflicting + # packages (emacs) can't clobber the actual applications. + # Addresses bug #62991. + for i in b2m ctags etags rcs-checkin ; do + mv "${D}"/usr/bin/${i} "${D}"/usr/bin/${i}-xemacs || die "mv ${i} failed" + done + + # rename man pages + for i in ctags etags; do + mv "${D}"/usr/share/man/man1/${i}{,-xemacs}.1 || die "mv ${i}.1 failed" + done + + # install base packages directories + dodir /usr/lib/xemacs/xemacs-packages/ + dodir /usr/lib/xemacs/site-packages/ + dodir /usr/lib/xemacs/site-modules/ + dodir /usr/lib/xemacs/site-lisp/ + + if use mule; + then + dodir /usr/lib/xemacs/mule-packages + fi + + # remove extraneous info files + cd "${D}"/usr/share/info + rm -f dir info.info texinfo* termcap* standards* + + cd "${S}" + dodoc BUGS CHANGES-* ChangeLog GETTING* INSTALL PROBLEMS README* + dodoc "${FILESDIR}"/README.Gentoo + + insinto /usr/share/pixmaps + newins "${S}"/etc/${PN}-icon.xpm ${PN}.xpm + + insinto /usr/share/applications + doins "${FILESDIR}"/${PN}.desktop +} + +pkg_postinst() { + eselect emacs update --if-unset +} + +pkg_postrm() { + eselect emacs update --if-unset +} |