From c58220701ada0ccca85cd290a57b3e2277537b75 Mon Sep 17 00:00:00 2001 From: "Hoa V. DINH" Date: Tue, 21 Oct 2014 20:50:13 -0700 Subject: Implement unit tests for message builder and message parsers --- unittest/data/parser/input/mbox/jwz/101 | 1996 +++++++++++++++++++++++++++++++ 1 file changed, 1996 insertions(+) create mode 100644 unittest/data/parser/input/mbox/jwz/101 (limited to 'unittest/data/parser/input/mbox/jwz/101') diff --git a/unittest/data/parser/input/mbox/jwz/101 b/unittest/data/parser/input/mbox/jwz/101 new file mode 100644 index 00000000..e7442f00 --- /dev/null +++ b/unittest/data/parser/input/mbox/jwz/101 @@ -0,0 +1,1996 @@ +Return-Path: +Received: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7) + id for nsb; Thu, 18 Jun 92 07:05:20 EDT +Received: from etlpost.etl.go.jp ([192.31.197.33]) by thumper.bellcore.com (4.1/4.7) + id for nsb@greenbush; Thu, 18 Jun 92 07:04:45 EDT +Received: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W) + id AA29286; Thu, 18 Jun 92 20:04:04 JST +Received: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER) + id AA17361; Thu, 18 Jun 92 20:03:55 JST +Received: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE) + id AA29968; Thu, 18 Jun 92 20:03:47 JST +Date: Thu, 18 Jun 92 20:03:47 JST +Return-Path: +Mime-Version: 1.0 +Content-Type: multipart/mixed; boundary="==" +To: nsb@thumper.bellcore.com +Cc: rhys@cs.uq.oz.au +Subject: Re: multi-bytes richtext +From: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=) +Organization: Electrotechnical Laboratory, Tsukuba Science City +Message-Id: +References: + <1451@‾/Mail/drafts> + + +--== + +I'm sending a copy of this message to the author of richlex.c, +wishing my small change to richlex.c may be adopted. + +In message on 06/18/92(00:32:43) +you Nathaniel Borenstein wrote: + |Can you + |possibly send me an example of multibyte richtext that works with your + |modified code (as well as one that doesn't) so that I can try it out and + |see? + +Ok, I enclosed a picture which shows how the old and new version of +richtext process a sample data in Japanese (JIS). + +--== +Content-Type: image/gif +Content-Transfer-Encoding: base64 +Content-Description: richtext for multibyte charset text + +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 +--== + + |In particular, I notice that you call "extended_command" only in the + |"default" case of a switch statement that sorts on first letters, so I + |can tell that it only happens for keywords that start with other + |letters, but I can't tell which keywords -- in other words, at a quick + |glance it isn't obvious what your code expects in its datastream. I'd + |be very interested in seeing that! + +My code expects the input is a stream of multi national character +set switched by ISO-2022, that is "ESC $ X" for switch to two byte +characterset and "ESC $ X" for switch to one byte character set. + + |Note that MIME defines things like + | some text + |but doesn't say anything similar about non-8859 character sets. In + |particular, people were worried about the implications of multibyte + |character sets + +Even if multibyte character sets are ignored by them, column calculation +which is able to cope with propotional fonts could be necessary. +If richtext cope with propotional fonts, it makes easier to handle +multibyte character sets... + + |-- what if one of the octets corresponds to the ascii + |"<"? I'd like to know how you handle this! -- Nathaniel + +ISO-2022-JP is a implication of US-ASCII and JISx208, so "<"s is +passed to richtext as is when the context is US-ASCII, but +translated to "" when the context is JISx208. This switching +is found in ISO2022Getc(). + +As I found some problems in richtext.c I send yesterday, I enclose a +refined richtext.c. Also I inserted a hook into RICHLEX.c to +treat extended SINGLETONs. + + +In message on 06/18/92(00:13:50) I wrote: + |In message on 06/02/92(06:33:20) I wrote: + | |That is I want to use your richtext.c for the ISO-2022-JP. + | |I need several extensions for richtext.c to do this. + | | + | |First, I need a way to extended command. For example, by defininng + | |a variable like int (*RichtextCommand)(); + | | + | |Second, I need a way to avoid two-bytes codes (like ISO-2022-JP) + | |to be splitted at a odd position on the end of line. + | | + | |Lastly, I wish to catch all of output characters from richtext.c + | |by hooking a single function, for example by defining a variable + | |like int (*RichtextPutc)(); + | | + | |With this functions, I can smoothly make richtext for ISO-2022. + | |I will be very happy if you would think about my above requirements. + | + |I did this extension tonight. Outline of changes are: + | + | - extended the element of OutputBuf from CHAR to INT. + | - inserted hooks into richtext.c at initialization, getc, command, and putc + | - outputc() assembles a multi-bytes character and puts it to realoutputc() + | - multi-bytes character is treated in realoutputc() + +and today, + - inserted a hook into richtext.c to find a extra folding point + - inserted a hook into richtext.c to calculate line position + - inserted a hook into richlex.c at SINGLETON checking. + + |Based on these extention, I wrote a richtext driver for ISO-2022-JP. + |It seems work well on the whole, except in some special caces. + |The problem seems originated from a strange behavior of richtext + |which will try strange justification on some input patterns. + +This is caused because FlushOut() function does not try to find +alternative folding point when it cannot find any space character. +Since languages like Japanese does not explicitly separate words +with space character, such a situation is very ordinary. +A sentence can folded at any places, except that some characters +(like phrase or sentence delimiter) should not be at the top of line. +I inserted a hook at FlushOut() to find user defined extra folding point. + +-- +Yutaka Sato +Information Base Section +ELECTROTECHNICAL LABORATORY +1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan + +--== +Content-Type: application/octet-stream +Content-Transfer-Encoding: quoted-printable +Content-Description: experimental richtext.c with multibyte extension + +/* +Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore) + +Permission to use, copy, modify, and distribute this material = + +for any purpose and without fee is hereby granted, provided = + +that the above copyright notice and this permission notice = + +appear in all copies, and that the name of Bellcore not be = + +used in advertising or publicity pertaining to this = + +material without the specific, prior written permission = + +of an authorized representative of Bellcore. BELLCORE = + +MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY = + +OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS", = + +WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. +*/ + +#include +#include +#include +#include "richlex.h" + +extern char *getenv(); +#ifdef AMIGA +extern char *strchr(); +#endif + +int (*RichtextGetc)(); +int (*RichtextPutc)(); +int (*RichtextCommand)(); +int (*RichtextInitialize)(); +int (*RichtextLineposition)(); +int (*RichtextFoldingpoint)(); + +int linepos =3D 0, inspace =3D 0, leftmargin =3D 0, rightmargin, biggerte= +xt=3D0; +int workingleft =3D 0, workingright, inexcerpt =3D 0, insignature =3D 0; +int termcolumns=3D80, termrows=3D23; +int controlputc(); + +/* A common problem, in justifying text, is figuring out how to format a = + + line when part of it wants to be left-justified, part right-justified,= + = + + and part centered, or some combination thereof. There is no perfect = + + solution to this problem, so this program takes an incredibly cheesy = + + but simple way out: voting. For each character on the line, a point + is added to the "center" score if it is supposed to be centered, and = + + so on. If it is inside TWO "center" environments, two points are adde= +d. + This may be the world's first implementation of justification by votin= +g... +*/ + +int centerenv=3D0, leftjustenv=3D0, rightjustenv=3D0; +int centerct=3D0, leftjustct=3D0, rightjustct=3D0; +int UsePager =3D 0; +int linesused =3D 0; +int JustSawCmd=3D0; +int JustCorrect =3D 0; /* Non-zero to just correct and not format */ +static char MoveRight[10]; +static char standoutbuf[50], standendbuf[50], StartUnderline[50], StopUnd= +erline[50]; +static char KS[50], KE[50], BoldOn[50], BoldOff[50]; + +#ifndef AMIGA +#ifndef __MSDOS__ +#define TPUTS_OK +#endif +#endif +#ifndef TPUTS_OK +tputs(char *s, int n, int ((*func)(char))); +#endif + +void +cleanup(signum) +int signum; +{ + FinalizeTerminal(); +#if defined(AMIGA) || defined(__MSDOS__) + exit(signum); +#else + signal(signum, SIG_DFL); + kill(getpid(), signum); +#endif +} + +InitSignals() { + signal(SIGINT, cleanup); +#if !defined(AMIGA) +#if !defined(__MSDOS__) + signal(SIGILL, cleanup); + signal(SIGTRAP, cleanup); + signal(SIGIOT, cleanup); + signal(SIGEMT, cleanup); + signal(SIGFPE, cleanup); + signal(SIGBUS, cleanup); + signal(SIGSEGV, cleanup); + signal(SIGTERM, cleanup); +#ifdef SIGXCPU + signal(SIGXCPU, cleanup); +#endif +#endif +#endif +} + +nomemabort() { + fprintf(stderr, "richtext: Out of memory¥n"); + FinalizeTerminal(); +#ifdef AMIGA + exit(20); +#else + exit(-1); +#endif +} + +main(argc, argv) +int argc; +char **argv; +{ + int c, i, standout=3D0, underline=3D0, bold=3D0, atstart, negated, + ForceTermcap=3D0, ForcePlain=3D0, NotTtyEnv =3D 0, FakeTerminal; + char token[MAX_TOKEN_SIZE], *tok, *nottty; + char tbuf[1024], *term, *dum; + FILE *InputFP =3D stdin, *tmpfp; +#ifdef __MSDOS__ + int ansi =3D 0; +#endif + + if( RichtextInitialize ) + (*RichtextInitialize)(); + InitSignals(); + dum =3D (char *) getenv("MM_USEPAGER"); + if (dum && atoi(dum)) ++UsePager; + for (i=3D1; i< argc; ++i) { + if (!strcmp(argv[i], "-p")) { + ++UsePager; + } else if (!strcmp(argv[i],"-c")) { + /* Only perform correction: don't format */ + JustCorrect =3D 1; + } else if (!strcmp(argv[i], "-f")) { + /* Force termcap usage */ + ForceTermcap =3D 1; + } else if (!strcmp(argv[i], "-t")) { + /* Force plain text */ + ForcePlain =3D 1; + } else if (!strcmp(argv[i],"-n")) { + /* Disable the richtext correction routines */ + CorrectionEnabled =3D 0; +#ifdef __MSDOS__ + } else if (!strcmp(argv[i], "-a")) { + ansi =3D !ansi; +#endif + } else { + /* open for input */ + tmpfp =3D fopen(argv[i], "r"); + if (tmpfp) InputFP =3D tmpfp; + } + } +#ifdef AMIGA + /* THIS IS THE AMIGA TERMINAL INITIALIZATION CODE */ + nottty =3D (char *) getenv("MM_NOTTTY"); + if (nottty) NotTtyEnv =3D atoi(nottty); + if (!isatty(0) || !isatty(1) || NotTtyEnv) { + UsePager =3D 0; /* Disable pager if I/O has been redirected or = +we're under a window-oriented mail reader */ + } + KS[0] =3D 0; + KE[0] =3D 0; + if ((!ForcePlain && isatty(1)) || ForceTermcap) { + FakeTerminal =3D 0; + strcpy(standoutbuf, "¥x9b¥x37m"); /* Enter standout (highlighte= +d) mode */ + strcpy(standendbuf, "¥x9b¥x30m"); /* Exit standout mode */ + strcpy(BoldOn, "¥x9b¥x31m"); /* Enter bold mode */ + strcpy(BoldOff, "¥x9b¥x30m"); /* Exit bold mode */ + strcpy(StartUnderline,"¥x9b¥x34m"); /* Enter underline mode */ + strcpy(StopUnderline,"¥x9b¥x30m"); /* Exit underline mode */ + strcpy(MoveRight, " "); + } else { + FakeTerminal =3D 1; + strcpy(BoldOn, "*"); + strcpy(BoldOff, "*"); + strcpy(standoutbuf, "_"); + strcpy(standendbuf, "_"); + strcpy(StartUnderline, "_"); + strcpy(StopUnderline, "_"); + strcpy(MoveRight, " "); + } +#else +#ifdef __MSDOS__ + /* THIS IS THE DOS TERMINAL INITIALIZATION CODE */ + FakeTerminal =3D 1; + termcolumns =3D 80; + termrows =3D 23; + strcpy(MoveRight, " "); + if (!ansi) { + KS[0] =3D NULL; + KE[0] =3D NULL; + strcpy(BoldOn, "*"); + strcpy(BoldOff, "*"); + strcpy(standoutbuf, "_"); + strcpy(standendbuf, "_"); + strcpy(StartUnderline, "_"); + strcpy(StopUnderline, "_"); + } else { + strcpy(KS, "¥x01B[37m"); /* White text (reset) */ + strcpy(KE, "¥x01B[37m"); /* White text (reset) */ + strcpy(BoldOn, "¥x01B[1m"); /* Bold text */ + strcpy(BoldOff, "¥x01B[0m"); /* End bold text (normal) */ + strcpy(StartUnderline, "¥x01B[31m"); /* Underline (red text) */ + strcpy(StopUnderline, "¥x01B[37m"); /* Underline end (white) */= + + /* The following should probably be something else, for italic */= + + strcpy(standoutbuf, "¥x01B[31m"); = + + strcpy(standendbuf, "¥x01B[37m"); = + + } +#else + /* THIS IS THE UNIX TERMINAL INITIALIZATION CODE */ + nottty =3D (char *) getenv("MM_NOTTTY"); + if (nottty) NotTtyEnv =3D atoi(nottty); + if (!isatty(0) || !isatty(1) || NotTtyEnv) { + UsePager =3D 0; /* Disable pager if I/O has been redirected or = +we're under a window-oriented mail reader */ + } + if ((!ForcePlain && (isatty(1) || isatty(0))) || ForceTermcap) { + term =3D (char *) getenv("TERM"); + } else { + term =3D NULL; + } + if (term && tgetent(tbuf, term) !=3D 1) { + term =3D NULL; + } + if (term) { + dum =3D KS; + if (tgetstr("ks", &dum)) *dum =3D NULL; else KS[0] =3D '¥0'; + dum =3D KE; + if (tgetstr("ke", &dum)) *dum =3D NULL; else KE[0] =3D '¥0'; + dum =3D standoutbuf; + if (tgetstr("so", &dum)) *dum =3D NULL; else standoutbuf[0] =3D '= +¥0'; + dum =3D standendbuf; + if (tgetstr("se", &dum)) *dum =3D NULL; else standendbuf[0] =3D '= +¥0'; + dum =3D BoldOn; + if (tgetstr("md", &dum)) *dum =3D NULL; else strcpy(BoldOn, stand= +outbuf); + dum =3D BoldOff; + if (tgetstr("me", &dum)) *dum =3D NULL; else strcpy(BoldOff, stan= +dendbuf); + dum =3D StartUnderline; + if (tgetstr("us", &dum)) *dum =3D NULL; else StartUnderline[0] =3D= + '¥0'; + dum =3D StopUnderline; + if (tgetstr("ue", &dum)) *dum =3D NULL; else StopUnderline[0] =3D= + '¥0'; + dum =3D MoveRight; + if (tgetstr("nd", &dum)) *dum =3D NULL; else { + MoveRight[0] =3D ' '; + MoveRight[1] =3D '¥0'; + } + /* Some TERMCAP entries have REALLY screwed up "nd" fields, sigh.= +=2E. */ + if (!strcmp(MoveRight, "¥014")) strcpy(MoveRight, " "); + termcolumns =3D tgetnum("co"); + if (termcolumns <=3D 0) termcolumns =3D 80; + termrows =3D tgetnum("li"); + if (termrows <=3D 0) termrows =3D 23; + FakeTerminal=3D0; + } else { + KS[0] =3D NULL; + KE[0] =3D NULL; + FakeTerminal =3D 1; + strcpy(BoldOn, "*"); + strcpy(BoldOff, "*"); + strcpy(standoutbuf, "_"); + strcpy(standendbuf, "_"); + strcpy(StartUnderline, "_"); + strcpy(StopUnderline, "_"); + strcpy(MoveRight, " "); + termcolumns =3D 80; + termrows =3D 23; + } +#endif +#endif + /* Check for the LINES & COLUMNS hack */ + dum =3D getenv("LINES"); + if (dum && ((i=3Datoi(dum)) > 0)) termrows =3D i; + dum =3D getenv("COLUMNS"); + if (dum && ((i=3Datoi(dum)) > 0)) termcolumns =3D i; + richtextreset(); + if (JustCorrect) { + richtextcorrect(InputFP,stdout); + exit(0); + } + FPUTS(KS, stdout); + rightmargin =3D workingright =3D termcolumns - 1; + while((c =3D richtextlex(InputFP,token)) !=3D EOF) { + if (c =3D=3D RICHTEXT_COMMAND || c =3D=3D RICHTEXT_NEG_COMMAND) {= + = + + negated =3D (c =3D=3D RICHTEXT_NEG_COMMAND); + tok =3D token; + switch(tok[0]) { + case 'b': + if (!strcmp(tok, "bold")) { + if (negated) { + --bold; + if (bold <=3D 0) controloutput(BoldOff, 0); + } else { + ++bold; + } + ResetTerminalCodes(FakeTerminal, standout, underl= +ine, + bold, standoutbuf, standendbu= +f, 0, + StartUnderline, StopUnderline= +, 0, BoldOn, + BoldOff, 1); + } else if (!strcmp(tok, "bigger")) { + if (negated) --biggertext; else ++biggertext; + } + break; + case 'c': + if (!strcmp(tok, "center")) { + if (negated) --centerenv; else ++centerenv; + } else if (!strcmp(tok, "comment")) { + int commct=3D1; + while (commct > 0) { + while ((c =3D getc(InputFP)) !=3D '<' = + + && c !=3D EOF) ; + if (c =3D=3D EOF) break; + for (i=3D0; (c =3D getc(InputFP)) !=3D '>' = + + && c !=3D EOF; ++i) { + token[i] =3D isupper(c) ? = + + tolower(c) : c; + } + if (c=3D=3D EOF) break; + token[i] =3D 0; + if (!strcmp(token, "/comment")) --commct; + if (!strcmp(token, "comment")) ++commct; + } + } + break; + case 'e': + if (!strcmp(tok, "excerpt")) { + atstart =3D !(linepos > workingleft); + if (negated) { + leftmargin -=3D 4; + rightmargin +=3D 4; + --inexcerpt; + } else { + leftmargin +=3D 4; + rightmargin -=3D 4; + ++inexcerpt; + } + MakeWorkingMargins(); + if (!atstart) outputc('¥n'); + } + break; + case 'f': + if (!strcmp(tok, "flushleft")) { + if (negated) --leftjustenv; else ++leftjustenv; + } else if (!strcmp(tok, "flushright")) { + if (negated) --rightjustenv; else ++rightjustenv;= + + } + break; + case 'i': + if (!strcmp(tok, "italic")) { + if (negated) { + --standout; + if (standout <=3D 0) controloutput(standendbu= +f, 0); + } else { + ++standout; + } + ResetTerminalCodes(FakeTerminal, standout, underl= +ine, bold, + standoutbuf, standendbuf, 1, = +StartUnderline, + StopUnderline, 0, BoldOn, Bol= +dOff, 0); + } else if (!strcmp(tok, "indent")) { + if (negated) { + leftmargin -=3D 4; + } else { + leftmargin +=3D 4; + } + } else if (!strcmp(tok, "indentright")) { + if (negated) { + rightmargin +=3D 4; + } else { + rightmargin -=3D 4; + } + } + MakeWorkingMargins(); + break; + case 'l': + if (!strcmp(tok, "lt")) { + outputc('<'); + } + break; + case 'n': + if (!strcmp(tok, "nl")) { + outputc('¥n'); + } else if (!strcmp(tok, "np")) { + outputc('¥n'); + outputc('¥014'); + } + break; + case 'u': + if (!strcmp(tok, "underline")) { + if (negated) { + --underline; + if (underline <=3D 0) controloutput(StopUnder= +line,0); + } else { + ++underline; + } + ResetTerminalCodes(FakeTerminal, standout, underl= +ine, bold, + standoutbuf, standendbuf, 0, = +StartUnderline, + StopUnderline, 1, BoldOn, Bol= +dOff, 0); + } + break; + case 'o': + if (!strcmp(tok, "outdent")) { + if (negated) { + leftmargin +=3D 4; + } else { + leftmargin -=3D 4; + } + } else if (!strcmp(tok, "outdentright")) { + if (negated) { + rightmargin -=3D 4; + } else { + rightmargin +=3D 4; + } + } + MakeWorkingMargins(); + break; = + + case 'p': + if (!strcmp(tok, "paragraph")) { + if (negated) outputc('¥n'); + outputc('¥n'); + } + break; + case 's': + if (!strcmp(tok, "signature")) { + atstart =3D !(linepos > workingleft); + if (negated) { + leftmargin -=3D 4; + rightmargin +=3D 4; + --insignature; + } else { + leftmargin +=3D 4; + rightmargin -=3D 4; + ++insignature; + } + MakeWorkingMargins(); + if (!atstart) outputc('¥n'); + } + break; + default: + extended_command(tok,negated); + break; + } + JustSawCmd =3D 1; + } else if (c =3D=3D '¥n') { + if (linepos > 0 && !inspace) { + outputc(' '); + } + JustSawCmd =3D 0; + } else { + outputc(c); + JustSawCmd =3D 0; + } + } + if (term) { /* cleanup a bit for insurance */ + controloutput(standendbuf, 0); + controloutput(StopUnderline, 0); + } + outputc('¥n'); /* for good measure */ + FPUTS(KE, stdout); + fflush(stdout); + if (UsePager) { + Pause(); + } + exit(0); +} + +static int OutputBuf[1000] =3D {0}; +static int PendingOutput =3D 0, PendingControls =3D 0; +static int IsControlOutput[1000]; + +controlputc(c) +char c; +{ + IsControlOutput[PendingOutput] =3D 1; + OutputBuf[PendingOutput++] =3D c; + ++PendingControls; +} + +immediate_controlputc(c) +char c; +{ + (*RichtextPutc)(c, stdout); +} + +controloutput(s, immediate) +char *s; +int immediate; +{ + tputs(s, 1, immediate ? immediate_controlputc : controlputc); +} + +FlushOut() { + int i, j, x; + int NewOutputBuf[1000], *s; + int NewPendingControls=3D0, *NewIsControlOutput, NewPendingOutput =3D= + 0; + + NewIsControlOutput =3D (int *)malloc(1000*sizeof(int)); + if (!NewIsControlOutput) nomemabort(); + OutputBuf[PendingOutput] =3D 0; + if (linepos >=3D workingright) { + for (i=3D0, j=3D0; j workingleft + 4) { + if (!IsControlOutput[i] + && isspace((unsigned char) OutputBuf[i])) { + break; + } + --i; + } + for (j=3D0; i leftjustct) + && (rightjustct > centerct) + && (rightjustct > 0)) { + /* right justified */ + i =3D termcolumns - calc_column(OutputBuf,PendingOutput) - 1 + + PendingControls; + for (j=3D0; j centerct) + && (leftjustct > 0)) { + /* left justified */ + for (s=3DOutputBuf; *s && isspace((unsigned char) *s); ++s) {;} + fputsmovingright(s, stdout); + ++linesused; + } else if (centerct > 0) { + /* centered */ + i =3D (termcolumns - calc_column(OutputBuf,PendingOutput) - 1 + + PendingControls) / 2; + for (j=3D0; j=3D termrows && UsePager) Pause(); + rightjustct =3D leftjustct =3D centerct =3D 0; /* not quite right for= + wrapping, sigh... */ + PendingOutput =3D PendingControls =3D linepos =3D 0; + inspace =3D 1; + j =3D (isspace((unsigned char) NewOutputBuf[0])) ? 1 : 0; + for ( ; j=3D workingright) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D '¥n'; + FlushOut(); + } else { + int spaces =3D (8*tabpos) - linepos; + while (spaces-->0) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D ' '; + ++linepos; + } + } + } else { + newinspace =3D isspace((unsigned char) c); + if (!inspace || !newinspace || !JustSawCmd) { + if (linepos =3D=3D 0) { + int i =3D workingleft; + if (inexcerpt) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D '>'; + --i; + } + if (insignature) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D '+'; + --i; + } + while (i-->0) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D ' '; + } + linepos =3D workingleft; + } + if (!alreadyformatted && biggertext && !(inspace && newinspac= +e)) { + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D '_'; + ++linepos; + } + inspace =3D newinspace; + linepos +=3D charlen(c); + IsControlOutput[PendingOutput] =3D 0; + OutputBuf[PendingOutput++] =3D c; + leftjustct +=3D leftjustenv; + rightjustct +=3D rightjustenv; + centerct +=3D centerenv; + if (c =3D=3D '¥014') inspace =3D 1; + if (linepos >=3D workingright) FlushOut(); + } + } +} + +MakeWorkingMargins() { + int oldworkingleft=3Dworkingleft, i; + + workingleft =3D leftmargin; + workingright =3D rightmargin; + if (workingleft < 0) workingleft =3D 0; + if (workingright < 0) workingright =3D 0; + if (workingright > (termcolumns - 1)) workingright =3D (termcolumns -= + 1); + if (workingleft > (workingright - 8)) workingleft =3D workingright -8= +; + if (linepos =3D=3D oldworkingleft) { + for (i=3Dworkingleft-oldworkingleft; i > 0; --i) outputc(' '); + } +} + +Pause() +{ + int c; + + (void) fputs("Press RETURN to continue (or 'q' to quit): ", stdout); + c =3D getc(stdin); + if (c =3D=3D 'q' || c =3D=3D 'Q') exit(); + linesused =3D 0; +} + +/* Leading spaces should be output as MoveRight, to avoid = + + having margins that are underlined or reverse video */ + +fputsmovingright(s, fp) +int *s; +FILE *fp; +{ + int inmargin=3D1; + if (!s) return; + while (*s) { + if (inmargin && *s =3D=3D ' ') { + controloutput(MoveRight, 1); + } else { + if (inmargin) inmargin =3D 0; + (*RichtextPutc)(*s,fp); + } + ++s; + } +} + +ResetTerminalCodes(FakeTerminal, standout, underline, bold, standoutbuf, = +standendbuf, + modifiedstandout, StartUnderline, StopUnderline, modi= +fiedunderline, + BoldOn, BoldOff, modifiedbold) +char *standoutbuf, *standendbuf, *StartUnderline, *StopUnderline, + *BoldOn, *BoldOff; +{ + /* We always turn back on the appropriate terminal modes, because + on some terminals one thing turns off all of them */ + if (standout >=3D 1) { + if (FakeTerminal) { + if (modifiedstandout && standout =3D=3D 1) outputstr(standout= +buf); + } else controloutput(standoutbuf, 0); + } + if (bold >=3D 1) { + if (FakeTerminal) { + if (modifiedbold && bold =3D=3D 1) outputstr(BoldOn); + } else controloutput(BoldOn, 0); + } + if (underline >=3D 1) { + if (FakeTerminal) { + if (modifiedunderline && underline =3D=3D 1) outputstr(StartU= +nderline); + } else controloutput(StartUnderline, 0); + } +} + +FinalizeTerminal() { + tputs(standendbuf, 1, immediate_controlputc); + tputs(BoldOff, 1, immediate_controlputc); + tputs(StopUnderline, 1, immediate_controlputc); + fputs(KE, stdout); +} + +outputstr(s) +char *s; +{ + while (*s) outputc(*s++); +} + +#ifndef TPUTS_OK +tputs(s, n, func) +char *s; +int n; +int (*func)(); +{ + if (s) { + while (*s) { + func(*s); + ++s; + } + } + return (0); +} +#endif + +/*#######################################################################= +#### + * Experimental extention to handle multibyte character sets. + * 92-06-18 Yutaka Sato + */ + +static extended_command(tok,negated) +char *tok; +int negated; +{ + if( RichtextCommand ) + (*RichtextCommand)(tok,negated); +} + +static folding_point(line,ctls,i) +int *line,*ctls,i; +{ + if( RichtextFoldingpoint ) + return (*RichtextFoldingpoint)(line,ctls,i); + return 0; +} + +static charlen(ch) +int ch; +{ + if(ch & 0xFF000000) return 4; + if(ch & 0xFF0000) return 3; + if(ch & 0xFF00 ) return 2; + else return 1; +} + = + +static int PendingCharacter =3D 0; +static int PendingLength =3D 0; +static multibyte_realoutputc(c) +{ + PendingCharacter =3D (PendingCharacter << 8) | c; + if( ++PendingLength =3D=3D RichtextCharcodeLength ){ + realoutputc(PendingCharacter, 0); + PendingCharacter =3D 0; + PendingLength =3D 0; + } +} + +static calc_column(buf,pos) +int *buf,pos; +{ int *s,col; + + if( RichtextLineposition ) + return (*RichtextLineposition)(buf,pos); + return pos; +} + +static FPUTS(s,fp) +unsigned char *s; +FILE *fp; +{ + while(*s) (*RichtextPutc)(*s++,fp); +} + +/*#######################################################################= +#### + * + * Richtext driver for ISO-2022 + * 92-06-18 Yutaka Sato + * + * This is lodging in richtext.c for easy experiment. + */ + +extern int (*RichtextInitialize)(); +extern int (*RichtextGetc)(); +extern int (*RichtextSingleton)(); +extern int (*RichtextCommand)(); +extern int (*RichtextLineposition)(); +extern int (*RichtextFoldingpoint)(); +extern int (*RichtextPutc)(); + +extern int ISO2022Getc(); +extern int ISO2022Singleton(); +extern int ISO2022Command(); +extern int ISO2022Lineposition(); +extern int ISO2022Foldingpoint(); +extern int ISO2022Putc(); + +static int OutCharlen =3D 1; +static int OutPrevChar; +static int DoLiteralize =3D 0; +static char pushback_buff[20]; +static int swto1B =3D 'B'; +static int swto2B =3D 'B'; + +static ISO2022Initialize(){ + RichtextGetc =3D ISO2022Getc; + RichtextSingleton =3D ISO2022Singleton; + RichtextCommand =3D ISO2022Command; + RichtextLineposition =3D ISO2022Lineposition; + RichtextFoldingpoint =3D ISO2022Foldingpoint; + RichtextPutc =3D ISO2022Putc; + DoLiteralize =3D 0; +} +int (*RichtextInitialize)() =3D ISO2022Initialize; + +static char xcharsw_prefix[] =3D "xiso2022-"; +static int xcharsw_leng =3D sizeof(xcharsw_prefix) - 1; + +static ISO2022Command(token,negated) + char *token; +{ int len,swchar; + + if( strncmp(token,xcharsw_prefix,xcharsw_leng) =3D=3D 0 ){ + if( token[xcharsw_leng] && token[xcharsw_leng+1]=3D=3D'-' ){ + sscanf(token+xcharsw_leng+2,"%x",&swchar); + if( swchar <=3D ' ' || 0x7F <=3Dswchar ) + return; + switch( token[xcharsw_leng] ){ + case '2': + controloutput("¥033$",0); + controlputc(swchar); + swto2B =3D swchar; + RichtextCharcodeLength =3D 2; + break; + case '1': + RichtextCharcodeLength =3D 1; + controloutput("¥033(",0); + controlputc(swchar); + swto1B =3D swchar; + break; + } + } + } +} + +ISO2022Singleton(token) + char *token; +{ + return !strncmp(token,xcharsw_prefix,xcharsw_leng); +} +ISO2022Getc(in) + FILE *in; +{ int ch,nch; + +GETCH: + if( ch =3D *pushback_buff ) + strcpy(pushback_buff,pushback_buff+1); + else{ + ch =3D fgetc(in); + if(ch =3D=3D '<' && DoLiteralize ) + strcat(pushback_buff,"lt>"); + else + if(ch =3D=3D 033){ + ch =3D fgetc(in); + if(ch =3D=3D '$' || ch =3D=3D '('){ + nch =3D fgetc(in); + if( ch =3D=3D '$' ){ + sprintf(pushback_buff,"<%s2-%x>", + xcharsw_prefix,nch); + DoLiteralize =3D 1; + }else{ + sprintf(pushback_buff,"<%s1-%x>", + xcharsw_prefix,nch); + DoLiteralize =3D 0; + } + goto GETCH; + }else{ + ungetc(ch,in); + ch =3D 033; + } + } + } + return ch; +} + +ISO2022Putc( ch, fp ) + int ch; + FILE *fp; +{ + if( ch & 0xFF00 ){ + putc(ch >> 8, fp); + putc(ch & 0xFF, fp); + }else{ + if( OutPrevChar =3D=3D 033 ){ + if( ch =3D=3D '$' ) OutCharlen =3D 2; else + if( ch =3D=3D '(' ) OutCharlen =3D 1; + } + if( ch =3D=3D '¥n' && OutCharlen =3D=3D 2 ) + fprintf(fp,"¥033(%c¥n¥033$%c",swto1B,swto2B); + else putc(ch, fp); + } + OutPrevChar =3D ch; +} + +ISO2022Foldingpoint(line,ctls,pos) + int *line,*ctls,pos; +{ int i; + + for( i =3D pos; 0 < i; i-- ) + if( ctls[i] =3D=3D 0 ) + if( line[i] & 0xFF00 ) + return i; + return 0; +} + +ISO2022Lineposition(line,pos) + int *line,pos; +{ int *s,col; + + col =3D 0; + for(s =3D line; *s; s++) + col +=3D *s & 0xFF00 ? 2 : 1; + return col; +} +--== +Content-Type: application/octet-stream +Content-Description: richlex.c with a hook to extended SINGLETONs + +*** richlex.c.orig Thu Jun 18 17:32:24 1992 +--- richlex.c Thu Jun 18 17:33:30 1992 +*************** +*** 46,51 **** +--- 46,52 ---- + + int (*RichtextGetc) () = fgetc; /* Function to call to get characters */ + int (*RichtextPutc) () = fputc; /* Function to call to put characters */ ++ int (*RichtextSingleton)()=0; /* Function to check extended singletons */ + + #define RGET(f) ((*RichtextGetc)(f)) + #define RPUT(c,f) ((*RichtextPutc)(c,f)) +*************** +*** 92,97 **** +--- 93,101 ---- + */ + static richtextsingle() + { ++ if( RichtextSingleton && (*RichtextSingleton)(NextToken) ) ++ return 1; ++ + return (!strcmp(NextToken,"nl") || + !strcmp(NextToken,"lt") || + !strcmp(NextToken,"np")); + +--== +Content-Type: application/octet-stream; charset=ISO-2022-JP +Content-Description: sample data for multibyte richtext + +The followings is a sentence written in Roman characters in JIS-X0208 + which could not be properly processed with original richtext. + + +
This is a sentence written in +Roman characters in JIS−X202. +
+ +Original version of richtext destroy + the sentence.この文章はJISコード中のローマ字記号で書か +れています。古いrichtextではこれを正しく処理できません。Even in ASCII +sentences, a long word will cause a strange folding like this. +This-is-an-example-which-causes-a-strange-folding-in-richtext.================================= + +
+This is an example of bold and underline + represented in the +richtext format of MIME. + +これは、MIMErichtext +形式を使って、 +このような下線太字を表現した例です。 + +
+--Yutaka +--==-- + -- cgit v1.2.3