X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/0bd508417142ff377f34aec8dcec9438d9175c2c..7c2fb837ec2f0e0a509f22ccc35f9b43476a6119:/src/print.c diff --git a/src/print.c b/src/print.c index a88404cb52..90b46496ef 100644 --- a/src/print.c +++ b/src/print.c @@ -1,14 +1,14 @@ /* Lisp object printing and output streams. Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs 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 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,9 +16,7 @@ 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 GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ #include @@ -36,6 +34,7 @@ Boston, MA 02110-1301, USA. */ #include "intervals.h" #include "blockinput.h" #include "termhooks.h" /* For struct terminal. */ +#include "font.h" Lisp_Object Vstandard_output, Qstandard_output; @@ -46,16 +45,6 @@ extern Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction; Lisp_Object Vfloat_output_format, Qfloat_output_format; -/* Work around a problem that happens because math.h on hpux 7 - defines two static variables--which, in Emacs, are not really static, - because `static' is defined as nothing. The problem is that they are - defined both here and in lread.c. - These macros prevent the name conflict. */ -#if defined (HPUX) && !defined (HPUX8) -#define _MAXLDBL print_maxldbl -#define _NMAXLDBL print_nmaxldbl -#endif - #include #if STDC_HEADERS @@ -178,11 +167,6 @@ extern int noninteractive_need_newline; extern int minibuffer_auto_raise; -#ifdef MAX_PRINT_CHARS -static int print_chars; -static int max_print; -#endif /* MAX_PRINT_CHARS */ - void print_interval (); /* GDB resets this to zero on W32 to disable OutputDebugString calls. */ @@ -320,11 +304,6 @@ printchar (ch, fun) unsigned int ch; Lisp_Object fun; { -#ifdef MAX_PRINT_CHARS - if (max_print) - print_chars++; -#endif /* MAX_PRINT_CHARS */ - if (!NILP (fun) && !EQ (fun, Qt)) call1 (fun, make_number (ch)); else @@ -393,11 +372,6 @@ strout (ptr, size, size_byte, printcharfun, multibyte) bcopy (ptr, print_buffer + print_buffer_pos_byte, size_byte); print_buffer_pos += size; print_buffer_pos_byte += size_byte; - -#ifdef MAX_PRINT_CHARS - if (max_print) - print_chars += size; -#endif /* MAX_PRINT_CHARS */ } else if (noninteractive && EQ (printcharfun, Qt)) { @@ -430,11 +404,6 @@ strout (ptr, size, size_byte, printcharfun, multibyte) insert_char (ch); } } - -#ifdef MAX_PRINT_CHARS - if (max_print) - print_chars += size; -#endif /* MAX_PRINT_CHARS */ } else { @@ -775,9 +744,6 @@ is used instead. */) { PRINTDECLARE; -#ifdef MAX_PRINT_CHARS - max_print = 0; -#endif /* MAX_PRINT_CHARS */ if (NILP (printcharfun)) printcharfun = Vstandard_output; PRINTPREPARE; @@ -911,10 +877,6 @@ is used instead. */) PRINTDECLARE; struct gcpro gcpro1; -#ifdef MAX_PRINT_CHARS - print_chars = 0; - max_print = MAX_PRINT_CHARS; -#endif /* MAX_PRINT_CHARS */ if (NILP (printcharfun)) printcharfun = Vstandard_output; GCPRO1 (object); @@ -923,10 +885,6 @@ is used instead. */) print (object, printcharfun, 1); PRINTCHAR ('\n'); PRINTFINISH; -#ifdef MAX_PRINT_CHARS - max_print = 0; - print_chars = 0; -#endif /* MAX_PRINT_CHARS */ UNGCPRO; return object; } @@ -1382,7 +1340,7 @@ print_preprocess (obj) loop: if (STRINGP (obj) || CONSP (obj) || VECTORP (obj) - || COMPILEDP (obj) || CHAR_TABLE_P (obj) + || COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj) || (! NILP (Vprint_gensym) && SYMBOLP (obj) && !SYMBOL_INTERNED_P (obj))) @@ -1571,6 +1529,10 @@ print_object (obj, printcharfun, escapeflag) QUIT; + /* See similar code in print_preprocess. */ + if (print_depth >= PRINT_CIRCLE) + error ("Apparently circular structure being printed"); + /* Detect circularities and truncate them. */ if (STRINGP (obj) || CONSP (obj) || VECTORP (obj) || COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj) @@ -1621,17 +1583,6 @@ print_object (obj, printcharfun, escapeflag) print_depth++; - /* See similar code in print_preprocess. */ - if (print_depth > PRINT_CIRCLE) - error ("Apparently circular structure being printed"); -#ifdef MAX_PRINT_CHARS - if (max_print && print_chars > max_print) - { - PRINTCHAR ('\n'); - print_chars = 0; - } -#endif /* MAX_PRINT_CHARS */ - switch (XTYPE (obj)) { case Lisp_Int: @@ -2129,6 +2080,34 @@ print_object (obj, printcharfun, escapeflag) strout (buf, -1, -1, printcharfun, 0); PRINTCHAR ('>'); } + else if (FONTP (obj)) + { + EMACS_INT i; + + if (! FONT_OBJECT_P (obj)) + { + if (FONT_SPEC_P (obj)) + strout ("# FONT_WIDTH_INDEX) + print_object (AREF (obj, i), printcharfun, escapeflag); + else + print_object (font_style_symbolic (obj, i, 0), + printcharfun, escapeflag); + } + } + else + { + strout ("#'); + } else { EMACS_INT size = XVECTOR (obj)->size; @@ -2404,8 +2383,7 @@ This affects only `prin1'. */); DEFVAR_BOOL ("print-quoted", &print_quoted, doc: /* Non-nil means print quoted forms with reader syntax. -I.e., (quote foo) prints as 'foo, (function foo) as #'foo, and backquoted -forms print as in the new syntax. */); +I.e., (quote foo) prints as 'foo, (function foo) as #'foo. */); print_quoted = 0; DEFVAR_LISP ("print-gensym", &Vprint_gensym,