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