Annotation of libwww/Library/src/HText.c, revision 2.1

2.1     ! frystyk     1: /*
        !             2: **     HYPERTEXT OBJECT BUILDER
        !             3: **
        !             4: **     (c) COPYRIGHT MIT 1999.
        !             5: **     Please first read the full copyright statement in the file COPYRIGH.
        !             6: **     @(#) $Id: HTML.c,v 1.74 1998/10/15 20:07:55 frystyk Exp $
        !             7: **
        !             8: **     This generates of a hypertext object and calls the application
        !             9: **     via callbacks.
        !            10: */
        !            11: 
        !            12: /* Library include files */
        !            13: #include "wwwsys.h"
        !            14: #include "WWWUtil.h"
        !            15: #include "WWWCore.h"
        !            16: #include "HText.h"
        !            17: #include "HTextImp.h"
        !            18: 
        !            19: /* Default callbacks that the application can register */
        !            20: PRIVATE HText_new *                    text_new;
        !            21: PRIVATE HText_delete *                 text_delete;
        !            22: PRIVATE HText_build *                  text_build;
        !            23: PRIVATE HText_addText *                        text_addText;
        !            24: PRIVATE HText_foundLink *              text_foundLink;
        !            25: PRIVATE HText_beginElement *           text_beginElement;
        !            26: PRIVATE HText_endElement *             text_endElement;
        !            27: PRIVATE HText_unparsedBeginElement *   text_unparsedBeginElement;
        !            28: PRIVATE HText_unparsedEndElement *     text_unparsedEndElement;
        !            29: PRIVATE HText_unparsedEntity *         text_unparsedEntity;
        !            30: 
        !            31: /* HText handler instance */
        !            32: struct _HTextImp {
        !            33:     HText *                    app;
        !            34:     HText_new *                text_new;
        !            35:     HText_delete *             text_delete;
        !            36:     HText_build *              text_build;
        !            37:     HText_addText *            text_addText;
        !            38:     HText_foundLink *          text_foundLink;
        !            39:     HText_beginElement *       text_beginElement;
        !            40:     HText_endElement *         text_endElement;
        !            41:     HText_unparsedBeginElement *text_unparsedBeginElement;
        !            42:     HText_unparsedEndElement * text_unparsedEndElement;
        !            43:     HText_unparsedEntity *     text_unparsedEntity;
        !            44: };
        !            45: 
        !            46: /* --------------------------------------------------------------------------- */
        !            47: 
        !            48: PUBLIC HTextImp * HTextImp_new (HTRequest *     request,
        !            49:                                HTParentAnchor * anchor,
        !            50:                                HTStream *       output_stream)
        !            51: {
        !            52:     HTextImp * me = NULL;
        !            53:     if ((me = (HTextImp *) HT_CALLOC(1, sizeof (HTextImp))) == NULL)
        !            54:        HT_OUTOFMEM("HTextImp_new");
        !            55:     if (me->text_new) me->app = (*me->text_new)(request, anchor, output_stream);
        !            56:     me->text_new = text_new;    
        !            57:     me->text_delete = text_delete; 
        !            58:     me->text_build = text_build;  
        !            59:     me->text_addText = text_addText;
        !            60:     me->text_foundLink = text_foundLink;
        !            61:     me->text_beginElement = text_beginElement;
        !            62:     me->text_endElement = text_endElement;
        !            63:     me->text_unparsedBeginElement = text_unparsedBeginElement;
        !            64:     me->text_unparsedEndElement = text_unparsedEndElement;
        !            65:     me->text_unparsedEntity = text_unparsedEntity;
        !            66:     return me;
        !            67: }
        !            68: 
        !            69: PUBLIC BOOL HTextImp_delete (HTextImp * me)
        !            70: {
        !            71:     if (me) {
        !            72:        HText * app = me->app;
        !            73:        HT_FREE(me);
        !            74:        return (me->app && me->text_delete) ? (*me->text_delete)(app) : NO;
        !            75:     }
        !            76:     return NO;
        !            77: }
        !            78: 
        !            79: PUBLIC void HTextImp_build (HTextImp * me, HTextStatus status)
        !            80: {
        !            81:     if (me && me->text_build) 
        !            82:        (*me->text_build)(me->app, status);
        !            83: }
        !            84: 
        !            85: PUBLIC void HTextImp_addText (HTextImp *       me,
        !            86:                              const char *      buffer,
        !            87:                              int               length)
        !            88: {
        !            89:     if (me && me->text_addText) 
        !            90:        (*me->text_addText)(me->app, buffer, length);
        !            91: }
        !            92: 
        !            93: PUBLIC void HTextImp_foundLink (HTextImp *     me,
        !            94:                                int             element_number,
        !            95:                                int             attribute_number,
        !            96:                                HTChildAnchor *anchor,
        !            97:                                const BOOL *    present,
        !            98:                                const char **   value)
        !            99: {
        !           100:     if (me && me->text_foundLink) 
        !           101:        (*me->text_foundLink)(me->app, element_number, attribute_number,
        !           102:                           anchor, present, value);
        !           103: }
        !           104: 
        !           105: PUBLIC void HTextImp_beginElement (HTextImp *  me,
        !           106:                                   int          element_number,
        !           107:                                   const BOOL * present,
        !           108:                                   const char **value)
        !           109: {
        !           110:     if (me && me->text_beginElement) 
        !           111:        (*me->text_beginElement)(me->app, element_number, present, value);
        !           112: }
        !           113: 
        !           114: PUBLIC void HTextImp_endElement (HTextImp *    me,
        !           115:                                 int            element_number)
        !           116: {
        !           117:     if (me && me->text_endElement) 
        !           118:        (*me->text_endElement)(me->app, element_number);
        !           119: }
        !           120: 
        !           121: PUBLIC void HTextImp_unparsedBeginElement (HTextImp *  me,
        !           122:                                           const char * buffer,
        !           123:                                           int          length)
        !           124: {
        !           125:     if (me && me->text_unparsedBeginElement) 
        !           126:        (*me->text_unparsedBeginElement)(me->app, buffer, length);
        !           127: }
        !           128: 
        !           129: PUBLIC void HTextImp_unparsedEndElement (HTextImp *    me,
        !           130:                                         const char * buffer,
        !           131:                                         int            length)
        !           132: {
        !           133:     if (me && me->text_unparsedEndElement) 
        !           134:        (*me->text_unparsedEndElement)(me->app, buffer, length);
        !           135: }
        !           136: 
        !           137: PUBLIC void HTextImp_unparsedEntity (HTextImp *        me,
        !           138:                                     const char *       buffer,
        !           139:                                     int                length)
        !           140: {
        !           141:     if (me && me->text_unparsedEntity) 
        !           142:        (*me->text_unparsedEntity)(me->app, buffer, length);
        !           143: }
        !           144: 
        !           145: /* --------------------------------------------------------------------------- */
        !           146: 
        !           147: PUBLIC BOOL HText_registerCDCallback (HText_new * ncb,
        !           148:                                          HText_delete * dcb)
        !           149: {
        !           150:     if (ncb && dcb) {
        !           151:        text_new = ncb;
        !           152:        text_delete = dcb;
        !           153:        return YES;
        !           154:     }
        !           155:     return NO;
        !           156: }
        !           157: 
        !           158: PUBLIC BOOL HText_unregisterCDCallback (void)
        !           159: {
        !           160:     text_new = NULL;
        !           161:     text_delete = NULL;
        !           162:     return YES;
        !           163: }
        !           164: 
        !           165: PUBLIC BOOL HText_registerTextCallback (HText_addText * tcb)
        !           166: {
        !           167:     text_addText = tcb;
        !           168:     return YES;
        !           169: }
        !           170: 
        !           171: PUBLIC BOOL HText_unregisterTextCallback (void)
        !           172: {
        !           173:     text_addText = NULL;
        !           174:     return YES;
        !           175: }
        !           176: 
        !           177: PUBLIC BOOL HText_registerLinkCallback (HText_foundLink * lcb)
        !           178: {
        !           179:     text_foundLink = lcb;
        !           180:     return YES;
        !           181: }
        !           182: 
        !           183: PUBLIC BOOL HText_unregisterLinkCallback (void)
        !           184: {
        !           185:     text_foundLink = NULL;
        !           186:     return YES;
        !           187: }
        !           188: 
        !           189: PUBLIC BOOL HText_registerElementCallback (HText_beginElement * bcb,
        !           190:                                               HText_endElement * ecb)
        !           191: {
        !           192:     text_beginElement = bcb;
        !           193:     text_endElement = ecb;
        !           194:     return YES;
        !           195: }
        !           196: 
        !           197: PUBLIC BOOL HText_unregisterElementCallback (void)
        !           198: {
        !           199:     text_beginElement = NULL;
        !           200:     return YES;
        !           201: }
        !           202: 
        !           203: PUBLIC BOOL HText_registerUnparsedElementCallback (HText_unparsedBeginElement * ubcb,
        !           204:                                                   HText_unparsedBeginElement * uecb)
        !           205: {
        !           206:     text_unparsedBeginElement = ubcb;
        !           207:     text_unparsedEndElement = uecb;
        !           208:     return YES;
        !           209: }
        !           210: 
        !           211: PUBLIC BOOL HText_unregisterUnparsedElementCallback (void)
        !           212: {
        !           213:     text_unparsedBeginElement = NULL;
        !           214:     text_unparsedEndElement = NULL;
        !           215:     return YES;
        !           216: }
        !           217: 
        !           218: PUBLIC BOOL HText_registerUnparsedEntityCallback (HText_unparsedEntity * tcb)
        !           219: {
        !           220:     text_unparsedEntity = tcb;
        !           221:     return YES;
        !           222: }
        !           223: 
        !           224: PUBLIC BOOL HText_unregisterUnparsedEntityCallback (void)
        !           225: {
        !           226:     text_unparsedEntity = NULL;
        !           227:     return YES;
        !           228: }

Webmaster