Mercurial > emacs
view lib-src/yow.c @ 61126:c0aa521e0ca7
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-220
Merge from gnus--rel--5.10
Patches applied:
* gnus--rel--5.10 (patch 45-52)
- Update from CVS
- Update from CVS: texi Makefile.in CVS keyw cruft
- Update from CVS: ChangeLog tweaks
2005-03-29 Reiner Steib <Reiner.Steib@gmx.de>
* etc/gnus-refcard.tex, etc/gnus-logo.eps: New files.
2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
* lisp/gnus/message.el (message-resend): Bind rfc2047-encode-encoded-words.
* lisp/gnus/mm-util.el (mm-replace-in-string): New function.
(mm-xemacs-find-mime-charset-1): Ignore errors while loading
latin-unity, which cannot be used with XEmacs 21.1.
* lisp/gnus/rfc2047.el (rfc2047-encode-function-alist): Rename from
rfc2047-encoding-function-alist in order to avoid conflicting with
the old version.
(rfc2047-encode-message-header): Remove useless goto-char.
(rfc2047-encodable-p): Don't move point.
(rfc2047-syntax-table): Treat `(' and `)' as is.
(rfc2047-encode-region): Concatenate words containing non-ASCII
characters in structured fields; don't encode space-delimited
ASCII words even in unstructured fields; don't break words at
char-category boundaries; encode encoded words in structured
fields; treat text within parentheses as special; show the
original text when error has occurred; move point to the end of
the region after encoding, suggested by IRIE Tetsuya
<irie@t.email.ne.jp>; treat backslash-quoted characters as
non-special; check carefully whether to encode special characters;
fix some kind of misconfigured headers; signal a real error if
debug-on-quit or debug-on-error is non-nil; don't infloop,
suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume
the close parenthesis may be included in the encoded word; encode
bogus delimiters.
(rfc2047-encode-string): Use mm-with-multibyte-buffer.
(rfc2047-encode-max-chars): New variable.
(rfc2047-encode-1): New function.
(rfc2047-encode): Use it; encode text so that it occupies the
maximum width within 76-column; work correctly on Q encoding for
iso-2022-* charsets; fold the line before encoding; don't append a
space if the encoded word includes close parenthesis.
(rfc2047-fold-region): Use existing whitespace for LWSP; make it
sure not to break a line just after the header name.
(rfc2047-b-encode-region): Remove.
(rfc2047-b-encode-string): New function.
(rfc2047-q-encode-region): Remove.
(rfc2047-q-encode-string): New function.
(rfc2047-encode-parameter): New function.
(rfc2047-encoded-word-regexp): Don't use shy group.
(rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
(rfc2047-parse-and-decode): Ditto.
(rfc2047-decode): Treat the ascii coding-system as raw-text by
default.
2005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
* lisp/gnus/rfc2047.el (rfc2047-encode-encoded-words): New variable.
(rfc2047-field-value): Strip props.
(rfc2047-encode-message-header): Disabled header folding -- not
all headers can be folded, and this should be done by the message
composition mode. Probably. I think.
(rfc2047-encodable-p): Say that =? needs encoding.
(rfc2047-encode-region): Encode =? strings.
2005-03-25 Jesper Harder <harder@ifa.au.dk>
* lisp/gnus/rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
language tags; remove unnecessary '+'. Reported by Stefan Wiens
<s.wi@gmx.net>.
(rfc2047-decode-string): Don't cons a string unnecessarily.
(rfc2047-parse-and-decode, rfc2047-decode): Use a character for
the encoding to avoid consing a string.
(rfc2047-decode): Use mm-subst-char-in-string instead of
mm-replace-chars-in-string.
2005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
* lisp/gnus/rfc2047.el (rfc2047-encode): Use uppercase letters to specify
encodings of MIME-encoded words, in order to improve
interoperability with several broken MUAs.
2005-03-21 Reiner Steib <Reiner.Steib@gmx.de>
* lisp/gnus/gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and
pass it to `gnus-browse-read-group'.
(gnus-browse-read-group): Add NUMBER argument and pass it to
`gnus-group-read-ephemeral-group'.
* lisp/gnus/gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER
argument and pass it to `gnus-group-read-group'.
2005-03-19 Aidan Kehoe <kehoea@parhasard.net>
* lisp/gnus/mm-util.el (mm-xemacs-find-mime-charset): Only call
mm-xemacs-find-mime-charset-1 if we have the mule feature
available at runtime.
2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
* man/emacs-mime.texi (Display Customization): Markup fixes.
(rfc2047): Update.
2005-03-23 Reiner Steib <Reiner.Steib@gmx.de>
* man/gnus-faq.texi: Replaced with auto-generated version.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Wed, 30 Mar 2005 08:14:32 +0000 |
parents | a47704955f8d |
children | 00adf45090ee 4c90ffeb71c5 |
line wrap: on
line source
/* * yow.c * * Print a quotation from Zippy the Pinhead. * Qux <Kaufman-David@Yale> March 6, 1986 * * This file is in the public domain because the author published it * with no copyright notice before the US signed the Bern Convention. * * With dynamic memory allocation. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <stdio.h> #include <ctype.h> #ifdef TIME_WITH_SYS_TIME #include <sys/time.h> #include <time.h> #else #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #else #include <time.h> #endif #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #include "epaths.h" /* For PATH_DATA. */ #define BUFSIZE 80 #define SEP '\0' #ifndef YOW_FILE #define YOW_FILE "yow.lines" #endif #ifdef MSDOS #define rootrelativepath(rel) \ ({\ static char res[BUFSIZE], *p;\ strcpy (res, argv[0]);\ p = res + strlen (res);\ while (p != res && *p != '/' && *p != '\\' && *p != ':') p--;\ strcpy (p + 1, "../");\ strcpy (p + 4, rel);\ &res;}) #endif void yow(); void setup_yow(); int main (argc, argv) int argc; char *argv[]; { FILE *fp; char file[BUFSIZ]; if (argc > 2 && !strcmp (argv[1], "-f")) strcpy (file, argv[2]); else #ifdef vms sprintf (file, "%s%s", PATH_DATA, YOW_FILE); #else sprintf (file, "%s/%s", PATH_DATA, YOW_FILE); #endif if ((fp = fopen(file, "r")) == NULL) { fprintf(stderr, "yow: "); perror(file); exit(EXIT_FAILURE); } /* initialize random seed */ srand((int) (getpid() + time((time_t *) 0))); setup_yow(fp); yow(fp); fclose(fp); return EXIT_SUCCESS; } static long len = -1; static long header_len; #define AVG_LEN 40 /* average length of a quotation */ /* Sets len and header_len */ void setup_yow(fp) FILE *fp; { int c; /* Get length of file */ /* Because the header (stuff before the first SEP) can be very long, * thus biasing our search in favor of the first quotation in the file, * we explicitly skip that. */ while ((c = getc(fp)) != SEP) { if (c == EOF) { fprintf(stderr, "yow: file contains no separators\n"); exit(2); } } header_len = ftell(fp); if (header_len > AVG_LEN) header_len -= AVG_LEN; /* allow the first quotation to appear */ if (fseek(fp, 0L, 2) == -1) { perror("yow"); exit(EXIT_FAILURE); } len = ftell(fp) - header_len; } /* go to a random place in the file and print the quotation there */ void yow (fp) FILE *fp; { long offset; int c, i = 0; char *buf; unsigned int bufsize; offset = rand() % len + header_len; if (fseek(fp, offset, 0) == -1) { perror("yow"); exit(EXIT_FAILURE); } /* Read until SEP, read next line, print it. (Note that we will never print anything before the first separator.) If we hit EOF looking for the first SEP, just recurse. */ while ((c = getc(fp)) != SEP) if (c == EOF) { yow(fp); return; } /* Skip leading whitespace, then read in a quotation. If we hit EOF before we find a non-whitespace char, recurse. */ while (isspace(c = getc(fp))) ; if (c == EOF) { yow(fp); return; } bufsize = BUFSIZE; buf = (char *) malloc(bufsize); if (buf == (char *)0) { fprintf(stderr, "yow: virtual memory exhausted\n"); exit (3); } buf[i++] = c; while ((c = getc(fp)) != SEP && c != EOF) { buf[i++] = c; if (i == bufsize-1) { /* Yow! Is this quotation too long yet? */ bufsize *= 2; buf = (char *) realloc(buf, bufsize); if (buf == (char *)0) { fprintf(stderr, "yow: virtual memory exhausted\n"); exit (3); } } } buf[i++] = 0; printf("%s\n", buf); } /* arch-tag: e40fc0df-bafb-4001-af24-5c883d1c685e (do not change this comment) */ /* yow.c ends here */