* bitmaps/README:
[bpt/emacs.git] / src / print.c
index 5a1d579..90b4649 100644 (file)
@@ -5,10 +5,10 @@
 
 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 <http://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
@@ -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 <math.h>
 
 #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-spec", -1, -1, printcharfun, 0);
+             else
+               strout ("#<font-entity", -1, -1, printcharfun, 0);
+             for (i = 0; i < FONT_SPEC_MAX; i++)
+               {
+                 PRINTCHAR (' ');
+                 if (i < FONT_WEIGHT_INDEX || i > FONT_WIDTH_INDEX)
+                   print_object (AREF (obj, i), printcharfun, escapeflag);
+                 else
+                   print_object (font_style_symbolic (obj, i, 0),
+                                 printcharfun, escapeflag);
+               }
+           }
+         else
+           {
+             strout ("#<font-object ", -1, -1, printcharfun, 0);
+             print_object (AREF (obj, FONT_NAME_INDEX), printcharfun,
+                           escapeflag);
+           }
+         PRINTCHAR ('>');
+       }
       else
        {
          EMACS_INT size = XVECTOR (obj)->size;