Annotation of libwww/Library/src/HTPlain.c, revision 2.6
2.1 timbl 1: /* Plain text object HTWrite.c
2: ** =================
3: **
4: ** This version of the stream object just writes to a socket.
5: ** The socket is assumed open and left open.
6: **
7: ** Bugs:
8: ** strings written must be less than buffer size.
9: */
10: #include "HTPlain.h"
11:
12: #define BUFFER_SIZE 4096; /* Tradeoff */
13:
14: #include "HTUtils.h"
15: #include "HText.h"
16: #include "HTStyle.h"
17:
18: extern HTStyleSheet * styleSheet;
19:
20:
21:
22: /* HTML Object
23: ** -----------
24: */
25:
26: struct _HTStream {
27: CONST HTStreamClass * isa;
28:
29: HText * text;
30: };
31:
32: /* Write the buffer out to the socket
33: ** ----------------------------------
34: */
35:
36:
37: /*_________________________________________________________________________
38: **
39: ** A C T I O N R O U T I N E S
40: */
41:
42: /* Character handling
43: ** ------------------
44: */
45:
2.2 timbl 46: PRIVATE void HTPlain_put_character ARGS2(HTStream *, me, char, c)
2.1 timbl 47: {
2.2 timbl 48: HText_appendCharacter(me->text, c);
2.1 timbl 49: }
50:
51:
52:
53: /* String handling
54: ** ---------------
55: **
56: */
2.2 timbl 57: PRIVATE void HTPlain_put_string ARGS2(HTStream *, me, CONST char*, s)
2.1 timbl 58: {
2.2 timbl 59: HText_appendText(me->text, s);
2.1 timbl 60: }
61:
62:
2.2 timbl 63: PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
2.1 timbl 64: {
65: CONST char* p;
66: CONST char* e = s+l;
2.4 timbl 67: for (p=s; p<e; p++) HText_appendCharacter(me->text, *p);
2.1 timbl 68: }
69:
70:
71:
72: /* Free an HTML object
73: ** -------------------
74: **
75: ** Note that the SGML parsing context is freed, but the created object is not,
76: ** as it takes on an existence of its own unless explicitly freed.
77: */
2.2 timbl 78: PRIVATE void HTPlain_free ARGS1(HTStream *, me)
2.1 timbl 79: {
2.2 timbl 80: free(me);
2.1 timbl 81: }
82:
83: /* End writing
84: */
85:
2.5 timbl 86: PRIVATE void HTPlain_abort ARGS2(HTStream *, me, HTError, e)
2.1 timbl 87: {
2.5 timbl 88: HTPlain_free(me);
2.1 timbl 89: }
90:
91:
92:
93: /* Structured Object Class
94: ** -----------------------
95: */
96: PUBLIC CONST HTStreamClass HTPlain =
97: {
98: "SocketWriter",
99: HTPlain_free,
2.5 timbl 100: HTPlain_abort,
2.1 timbl 101: HTPlain_put_character, HTPlain_put_string, HTPlain_write,
102: };
103:
104:
105: /* New object
106: ** ----------
107: */
2.6 ! timbl 108: PUBLIC HTStream* HTPlainPresent ARGS5(
! 109: HTRequest *, request,
! 110: void *, param,
! 111: HTFormat, input_format,
! 112: HTFormat, output_format,
! 113: HTStream *, output_stream)
2.1 timbl 114: {
115:
2.3 timbl 116: HTStream* me = (HTStream*)malloc(sizeof(*me));
2.2 timbl 117: if (me == NULL) outofmem(__FILE__, "HTPlain_new");
118: me->isa = &HTPlain;
119:
2.6 ! timbl 120: me->text = HText_new(request->anchor);
2.2 timbl 121: HText_setStyle(me->text, HTStyleNamed(styleSheet, "Example"));
122: HText_beginAppend(me->text);
2.1 timbl 123:
2.2 timbl 124: return (HTStream*) me;
2.1 timbl 125: }
126:
127:
Webmaster