[BACK]Return to xml.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Annotation of mandoc/xml.c, Revision 1.10

1.10    ! kristaps    1: /* $Id: xml.c,v 1.9 2008/12/02 18:26:57 kristaps Exp $ */
1.1       kristaps    2: /*
                      3:  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
                      4:  *
                      5:  * Permission to use, copy, modify, and distribute this software for any
                      6:  * purpose with or without fee is hereby granted, provided that the
                      7:  * above copyright notice and this permission notice appear in all
                      8:  * copies.
                      9:  *
                     10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
                     11:  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
                     12:  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
                     13:  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
                     14:  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
                     15:  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
                     16:  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
                     17:  * PERFORMANCE OF THIS SOFTWARE.
                     18:  */
                     19: #include <stdlib.h>
                     20: #include <string.h>
                     21:
                     22: #include "libmdocml.h"
                     23: #include "private.h"
1.10    ! kristaps   24: #include "ml.h"
1.9       kristaps   25:
1.6       kristaps   26:
1.10    ! kristaps   27: static ssize_t         xml_endtag(struct md_mbuf *,
        !            28:                                const struct md_args *,
        !            29:                                enum md_ns, int);
        !            30: static ssize_t         xml_begintag(struct md_mbuf *,
        !            31:                                const struct md_args *,
        !            32:                                enum md_ns, int,
        !            33:                                const int *, const char **);
        !            34:
        !            35: static ssize_t
        !            36: xml_begintag(struct md_mbuf *mbuf, const struct md_args *args,
        !            37:                enum md_ns ns, int tok,
        !            38:                const int *argc, const char **argv)
1.8       kristaps   39: {
1.10    ! kristaps   40:        size_t           res;
1.8       kristaps   41:
1.10    ! kristaps   42:        res = 0;
1.6       kristaps   43:
                     44:        switch (ns) {
1.9       kristaps   45:        case (MD_NS_BLOCK):
1.10    ! kristaps   46:                if ( ! ml_nputs(mbuf, "block:", 6, &res))
        !            47:                        return(-1);
1.9       kristaps   48:                break;
                     49:        case (MD_NS_INLINE):
1.10    ! kristaps   50:                if ( ! ml_nputs(mbuf, "inline:", 7, &res))
        !            51:                        return(-1);
1.9       kristaps   52:                break;
                     53:        default:
1.10    ! kristaps   54:                if ( ! ml_nputs(mbuf, "mbuf", 4, &res))
        !            55:                        return(-1);
        !            56:                return((ssize_t)res);
1.6       kristaps   57:        }
                     58:
1.10    ! kristaps   59:        if ( ! ml_nputs(mbuf, toknames[tok],
        !            60:                                strlen(toknames[tok]), &res))
        !            61:                return(-1);
1.6       kristaps   62:
1.10    ! kristaps   63:        return((ssize_t)res);
1.6       kristaps   64: }
                     65:
                     66:
1.10    ! kristaps   67: static ssize_t
        !            68: xml_endtag(struct md_mbuf *mbuf, const struct md_args *args,
        !            69:                enum md_ns ns, int tok)
1.6       kristaps   70: {
1.9       kristaps   71:        size_t           res;
1.6       kristaps   72:
1.10    ! kristaps   73:        res = 0;
        !            74:
1.6       kristaps   75:        switch (ns) {
1.9       kristaps   76:        case (MD_NS_BLOCK):
1.10    ! kristaps   77:                if ( ! ml_nputs(mbuf, "block:", 6, &res))
        !            78:                        return(-1);
1.9       kristaps   79:                break;
                     80:        case (MD_NS_INLINE):
1.10    ! kristaps   81:                if ( ! ml_nputs(mbuf, "inline:", 7, &res))
        !            82:                        return(-1);
1.9       kristaps   83:                break;
                     84:        default:
1.10    ! kristaps   85:                if ( ! ml_nputs(mbuf, "mbuf", 4, &res))
        !            86:                        return(-1);
        !            87:                return((ssize_t)res);
1.6       kristaps   88:        }
                     89:
1.10    ! kristaps   90:        if ( ! ml_nputs(mbuf, toknames[tok],
        !            91:                                strlen(toknames[tok]), &res))
        !            92:                return(-1);
1.1       kristaps   93:
1.10    ! kristaps   94:        return((ssize_t)res);
1.1       kristaps   95: }
                     96:
                     97:
                     98: int
1.10    ! kristaps   99: md_line_xml(void *data, char *buf)
1.1       kristaps  100: {
                    101:
1.10    ! kristaps  102:        return(mlg_line((struct md_mlg *)data, buf));
1.1       kristaps  103: }
                    104:
                    105:
                    106: int
                    107: md_exit_xml(void *data, int flush)
                    108: {
                    109:
1.10    ! kristaps  110:        return(mlg_exit((struct md_mlg *)data, flush));
1.1       kristaps  111: }
                    112:
                    113:
                    114: void *
                    115: md_init_xml(const struct md_args *args,
                    116:                struct md_mbuf *mbuf, const struct md_rbuf *rbuf)
                    117: {
1.9       kristaps  118:
1.10    ! kristaps  119:        return(mlg_alloc(args, rbuf, mbuf, xml_begintag, xml_endtag));
1.9       kristaps  120: }
                    121:

CVSweb