Mercurial > hg > xemacs-beta
diff src/mule.c @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | |
children | 538048ae2ab8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mule.c Mon Aug 13 09:02:59 2007 +0200 @@ -0,0 +1,127 @@ +/* Copyright (C) 1995 Free Software Foundation. + +This file is part of XEmacs. + +XEmacs is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +XEmacs is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Mule 2.3. Not in FSF. */ + +#include <config.h> +#include "lisp.h" + +#include "regex.h" + +#ifdef MULE_REGEXP + +Lisp_Object Vre_word; + +int re_short_flag; + + +DEFUN ("define-word-pattern", Fdefine_word_pattern, 1, 1, 0, /* +Don't call this function directly, instead use 'define-word' which +accept a pattern compiled by 'regexp-compile' with word-option t. +*/ + (pattern)) +{ + int i, len; + char *p; + Lisp_Object temp; + struct Lisp_String *s; + + CHECK_CONS (pattern); + len = XINT (Flength (pattern)); + if (len > MAXWORDBUF) + error ("Too complicated regular expression for word!"); + for (i = 0; i < len; i++) + { + temp =XCONS (pattern)->car; + CHECK_VECTOR (temp); + CHECK_STRING (XVECTOR (temp)->contents[0]); + s = XSTRING (XVECTOR (temp)->contents[0]); + if (!wordbuf[i]) + wordbuf[i] = (struct re_pattern_buffer *) + xmalloc (sizeof (struct re_pattern_buffer)); + else + if (wordbuf[i]->buffer) xfree (wordbuf[i]->buffer); + wordbuf[i]->buffer = (char *) xmalloc (s->size + 1); + wordbuf[i]->used = s->size; + memcpy (wordbuf[i]->buffer, s->data, s->size + 1); +#ifdef EMACS19_REGEXP + wordbuf[i]->translate = 0; + wordbuf[i]->fastmap_accurate = 0; + wordbuf[i]->fastmap = 0; + wordbuf[i]->can_be_null = 1; + + wordbuf[i]->mc_flag = 1; + wordbuf[i]->short_flag = 0; + wordbuf[i]->no_empty = 0; + + wordbuf[i]->syntax_version = 0; + wordbuf[i]->category_version = 0; + + wordbuf[i]->regs_allocated = REGS_UNALLOCATED; + wordbuf[i]->re_nsub = 0; + wordbuf[i]->no_sub = 0; + wordbuf[i]->newline_anchor = 1; + + wordbuf[i]->syntax = 0; + wordbuf[i]->not_bol = wordbuf[i]->not_eol = 0; +#endif /* EMACS19_REGEXP */ + pattern = XCONS (pattern)->cdr; + } + for (; i < MAXWORDBUF && wordbuf[i]; i++) + { + if (wordbuf[i]->buffer) xfree (wordbuf[i]->buffer); + xfree (wordbuf[i]); + wordbuf[i] = (struct re_pattern_buffer *) 0; + } + return Qnil; +} + +#endif /* MULE_REGEXP */ + + +void +syms_of_mule (void) +{ +#ifdef MULE_REGEXP + DEFSUBR (Fdefine_word_pattern); +#endif +} + +void +vars_of_mule (void) +{ +#ifdef MULE_REGEXP + DEFVAR_BOOL ("re-short-flag", &re_short_flag /* +*T means regexp search success when the shortest match is found. +*/ ); + re_short_flag = 0; +#endif /* MULE_REGEXP */ + + Vfeatures = Fcons (intern ("mule"), Vfeatures); + +#ifdef HAVE_EGG + Vfeatures = Fcons (intern ("egg"), Vfeatures); +#endif +#ifdef HAVE_WNN + Vfeatures = Fcons (intern ("wnn"), Vfeatures); +#endif +#ifdef HAVE_SJ3 + Vfeatures = Fcons (intern "sj3"), Vfeatures); +#endif +}