else if (!nsCRT::strcasecmp(obj->encoding, ENCODING_YENCODE)) fn = &MimeYDecoderInit;
static PRBool MimeLeaf_displayable_inline_p (MimeObjectClass *clazz,											  MimeHeaders *hdrs);static intMimeLeafClassInitialize(MimeLeafClass *clazz){  MimeObjectClass *oclass = (MimeObjectClass *) clazz;  NS_ASSERTION(!oclass->class_initialized, "1.1 <rhp@netscape.com> 19 Mar 1999 12:00");  oclass->initialize   = MimeLeaf_initialize;  oclass->finalize     = MimeLeaf_finalize;  oclass->parse_begin  = MimeLeaf_parse_begin;  oclass->parse_buffer = MimeLeaf_parse_buffer;  oclass->parse_line   = MimeLeaf_parse_line;  oclass->parse_eof    = MimeLeaf_parse_eof;  oclass->displayable_inline_p = MimeLeaf_displayable_inline_p;  /* Default `parse_buffer' method is one which line-buffers the now-decoded	 data and passes it on to `parse_line'.  (We snarf the implementation of	 this method from our superclass's implementation of `parse_buffer', which	 inherited it from MimeObject.)   */  clazz->parse_decoded_buffer =	((MimeObjectClass*)&MIME_SUPERCLASS)->parse_buffer;  return 0;}static intMimeLeaf_initialize (MimeObject *obj){  /* This is an abstract class; it shouldn't be directly instanciated. */  NS_ASSERTION(obj->clazz != (MimeObjectClass *) &mimeLeafClass, "1.1 <rhp@netscape.com> 19 Mar 1999 12:00");  return ((MimeObjectClass*)&MIME_SUPERCLASS)->initialize(obj);}static voidMimeLeaf_finalize (MimeObject *object){  MimeLeaf *leaf = (MimeLeaf *)object;  object->clazz->parse_eof (object, PR_FALSE);  /* Free the decoder data, if it's still around.  It was probably freed	 in MimeLeaf_parse_eof(), but just in case... */  if (leaf->decoder_data)	{	  MimeDecoderDestroy(leaf->decoder_data, PR_TRUE);	  leaf->decoder_data = 0;	}  ((MimeObjectClass*)&MIME_SUPERCLASS)->finalize (object);}static intMimeLeaf_parse_begin (MimeObject *obj){  MimeLeaf *leaf = (MimeLeaf *) obj;  MimeDecoderData *(*fn) (nsresult (*) (const char*, PRInt32, void*), void*) = 0;  /* Initialize a decoder if necessary.   */  if (!obj->encoding)	;  else if (!nsCRT::strcasecmp(obj->encoding, ENCODING_BASE64))	fn = &MimeB64DecoderInit;  else if (!nsCRT::strcasecmp(obj->encoding, ENCODING_QUOTED_PRINTABLE))	fn = &MimeQPDecoderInit;  else if (!nsCRT::strcasecmp(obj->encoding, ENCODING_UUENCODE) ||		   !nsCRT::strcasecmp(obj->encoding, ENCODING_UUENCODE2) ||		   !nsCRT::strcasecmp(obj->encoding, ENCODING_UUENCODE3) ||		   !nsCRT::strcasecmp(obj->encoding, ENCODING_UUENCODE4))	fn = &MimeUUDecoderInit;  if (fn)	{	  leaf->decoder_data =		fn (/* The (nsresult (*) ...) cast is to turn the `void' argument			   into `MimeObject'. */			((nsresult (*) (const char *, PRInt32, void *))			 ((MimeLeafClass *)obj->clazz)->parse_decoded_buffer),			obj);	  if (!leaf->decoder_data)		return MIME_OUT_OF_MEMORY;	}  return ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_begin(obj);}static intMimeLeaf_parse_buffer (char *buffer, PRInt32 size, MimeObject *obj){  MimeLeaf *leaf = (MimeLeaf *) obj;  NS_ASSERTION(!obj->closed_p, "1.1 <rhp@netscape.com> 19 Mar 1999 12:00");  if (obj->closed_p) return -1;  /* If we're not supposed to write this object, bug out now.   */  if (!obj->output_p ||	  !obj->options ||	  !obj->options->output_fn)	return 0;  if (leaf->decoder_data &&      obj->options &&       obj->options->format_out != nsMimeOutput::nsMimeMessageDecrypt)	return MimeDecoderWrite (leaf->decoder_data, buffer, size);  else	return ((MimeLeafClass *)obj->clazz)->parse_decoded_buffer (buffer, size,																obj);}static intMimeLeaf_parse_line (char *line, PRInt32 length, MimeObject *obj){  NS_ASSERTION(0, "1.1 <rhp@netscape.com> 19 Mar 1999 12:00");  /* This method shouldn't ever be called. */  return -1;}static intMimeLeaf_parse_eof (MimeObject *obj, PRBool abort_p){  MimeLeaf *leaf = (MimeLeaf *) obj;  if (obj->closed_p) return 0;  /* Close off the decoder, to cause it to give up any buffered data that	 it is still holding.   */  if (leaf->decoder_data)	{	  int status = MimeDecoderDestroy(leaf->decoder_data, PR_FALSE);	  leaf->decoder_data = 0;	  if (status < 0) return status;	}  /* Now run the superclass's parse_eof, which will force out the line	 buffer (which we may have just repopulated, above.)   */  return ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_eof (obj, abort_p);}static PRBoolMimeLeaf_displayable_inline_p (MimeObjectClass *clazz, MimeHeaders *hdrs){  return PR_TRUE;}