summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Graaff <graaff@gentoo.org>2007-08-04 11:06:18 +0000
committerHans de Graaff <graaff@gentoo.org>2007-08-04 11:06:18 +0000
commit19abc50a91da0bad3bd513342ba4edee4e6b8be1 (patch)
tree1c9a03cb61510c56fb94eb42660db903d85c8e0c /app-editors/xemacs
parentppc stable, bug #184623 (diff)
downloadgentoo-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)
Diffstat (limited to 'app-editors/xemacs')
-rw-r--r--app-editors/xemacs/ChangeLog10
-rw-r--r--app-editors/xemacs/files/digest-xemacs-21.4.20-r56
-rw-r--r--app-editors/xemacs/files/font-lock-keywords.patch224
-rw-r--r--app-editors/xemacs/xemacs-21.4.20-r5.ebuild248
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
+}