home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / MosaicSRC / libwww2 / HTMosaicHTML.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-03-13  |  2.8 KB  |  145 lines

  1. /*        Mosaic HTML text object
  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 "HTMosaicHTML.h"
  11.  
  12. #define BUFFER_SIZE 4096;    /* Tradeoff */
  13.  
  14. #include "HTUtils.h"
  15. #include "HText.h"
  16. #include "HTFile.h"
  17. #include "HTCompressed.h"
  18.  
  19. /* #define TRACE 1 */
  20.  
  21. /*        HTML Object
  22. **        -----------
  23. */
  24.  
  25. struct _HTStream {
  26.     CONST HTStreamClass *    isa;
  27.  
  28.     HText *         text;
  29.         int interrupted;
  30.         int compressed;
  31. };
  32.  
  33. /*    Write the buffer out to the socket
  34. **    ----------------------------------
  35. */
  36.  
  37.  
  38. /*_________________________________________________________________________
  39. **
  40. **            A C T I O N     R O U T I N E S
  41. */
  42.  
  43. /*    Character handling
  44. **    ------------------
  45. */
  46.  
  47. PRIVATE void HTMosaicHTML_put_character ARGS2(HTStream *, me, char, c)
  48. {
  49.     HText_appendCharacter(me->text, c);
  50. }
  51.  
  52.  
  53.  
  54. /*    String handling
  55. **    ---------------
  56. **
  57. */
  58. PRIVATE void HTMosaicHTML_put_string ARGS2(HTStream *, me, CONST char*, s)
  59. {
  60.     HText_appendText(me->text, s);
  61. }
  62.  
  63.  
  64. PRIVATE void HTMosaicHTML_write ARGS3(HTStream *, me, CONST char*, s, int, l)
  65. {
  66.     HText_appendBlock (me->text, s, l);
  67. }
  68.  
  69.  
  70.  
  71. /*    Free an HTML object
  72. **    -------------------
  73. **
  74. **    Note that the SGML parsing context is freed, but the created object is not,
  75. **    as it takes on an existence of its own unless explicitly freed.
  76. */
  77. PRIVATE void HTMosaicHTML_free ARGS1(HTStream *, me)
  78. {
  79.   if (me->compressed != COMPRESSED_NOT)
  80.     {
  81.       if (TRACE)
  82.         fprintf 
  83.           (stderr, 
  84.            "[HTMosaicHTMLFree] OK, we're going to decompress HText\n");
  85.       HTCompressedHText (me->text, me->compressed, 0);
  86.     }
  87.  
  88.   free(me);
  89. }
  90.  
  91. /*    End writing
  92. */
  93.  
  94. PRIVATE void HTMosaicHTML_end_document ARGS1(HTStream *, me)
  95. {
  96.     HText_endAppend(me->text);
  97. }
  98.  
  99. PRIVATE void HTMosaicHTML_handle_interrupt ARGS1(HTStream *, me)
  100. {
  101.   me->interrupted = 1;
  102.   HText_doAbort(me->text);
  103. }
  104.  
  105.  
  106.  
  107. /*        Structured Object Class
  108. **        -----------------------
  109. */
  110. PUBLIC CONST HTStreamClass HTMosaicHTML =
  111. {        
  112.     "SocketWriter",
  113.     HTMosaicHTML_free,
  114.     HTMosaicHTML_end_document,
  115.     HTMosaicHTML_put_character,     HTMosaicHTML_put_string, 
  116.         HTMosaicHTML_write,
  117.         HTMosaicHTML_handle_interrupt
  118. }; 
  119.  
  120.  
  121. /*        New object
  122. **        ----------
  123. */
  124. PUBLIC HTStream* HTMosaicHTMLPresent ARGS5(
  125.     HTPresentation *,    pres,
  126.     HTParentAnchor *,    anchor,    
  127.     HTStream *,        sink,
  128.         HTFormat,               format_in,
  129.         int,                    compressed)
  130. {
  131.   HTStream* me = (HTStream*)malloc(sizeof(*me));
  132.  
  133.   if (TRACE)
  134.     fprintf (stderr, "[HTMosaicHTMLPresent] Hi there!  Compressed is %d\n", 
  135.              compressed);
  136.  
  137.   me->isa = &HTMosaicHTML;       
  138.   me->text = HText_new();
  139.   me->interrupted = 0;
  140.   me->compressed = compressed;
  141.   HText_beginAppend(me->text);
  142.   
  143.   return (HTStream*) me;
  144. }
  145.