Annotation of embedaddon/expat/examples/outline.c, revision 1.1
1.1 ! misho 1: /*****************************************************************
! 2: * outline.c
! 3: *
! 4: * Copyright 1999, Clark Cooper
! 5: * All rights reserved.
! 6: *
! 7: * This program is free software; you can redistribute it and/or
! 8: * modify it under the terms of the license contained in the
! 9: * COPYING file that comes with the expat distribution.
! 10: *
! 11: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
! 12: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
! 13: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
! 14: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
! 15: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
! 16: * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
! 17: * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
! 18: *
! 19: * Read an XML document from standard input and print an element
! 20: * outline on standard output.
! 21: * Must be used with Expat compiled for UTF-8 output.
! 22: */
! 23:
! 24:
! 25: #include <stdio.h>
! 26: #include <expat.h>
! 27:
! 28: #if defined(__amigaos__) && defined(__USE_INLINE__)
! 29: #include <proto/expat.h>
! 30: #endif
! 31:
! 32: #ifdef XML_LARGE_SIZE
! 33: #if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400
! 34: #define XML_FMT_INT_MOD "I64"
! 35: #else
! 36: #define XML_FMT_INT_MOD "ll"
! 37: #endif
! 38: #else
! 39: #define XML_FMT_INT_MOD "l"
! 40: #endif
! 41:
! 42: #define BUFFSIZE 8192
! 43:
! 44: char Buff[BUFFSIZE];
! 45:
! 46: int Depth;
! 47:
! 48: static void XMLCALL
! 49: start(void *data, const char *el, const char **attr)
! 50: {
! 51: int i;
! 52:
! 53: for (i = 0; i < Depth; i++)
! 54: printf(" ");
! 55:
! 56: printf("%s", el);
! 57:
! 58: for (i = 0; attr[i]; i += 2) {
! 59: printf(" %s='%s'", attr[i], attr[i + 1]);
! 60: }
! 61:
! 62: printf("\n");
! 63: Depth++;
! 64: }
! 65:
! 66: static void XMLCALL
! 67: end(void *data, const char *el)
! 68: {
! 69: Depth--;
! 70: }
! 71:
! 72: int
! 73: main(int argc, char *argv[])
! 74: {
! 75: XML_Parser p = XML_ParserCreate(NULL);
! 76: if (! p) {
! 77: fprintf(stderr, "Couldn't allocate memory for parser\n");
! 78: exit(-1);
! 79: }
! 80:
! 81: XML_SetElementHandler(p, start, end);
! 82:
! 83: for (;;) {
! 84: int done;
! 85: int len;
! 86:
! 87: len = (int)fread(Buff, 1, BUFFSIZE, stdin);
! 88: if (ferror(stdin)) {
! 89: fprintf(stderr, "Read error\n");
! 90: exit(-1);
! 91: }
! 92: done = feof(stdin);
! 93:
! 94: if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) {
! 95: fprintf(stderr, "Parse error at line %" XML_FMT_INT_MOD "u:\n%s\n",
! 96: XML_GetCurrentLineNumber(p),
! 97: XML_ErrorString(XML_GetErrorCode(p)));
! 98: exit(-1);
! 99: }
! 100:
! 101: if (done)
! 102: break;
! 103: }
! 104: XML_ParserFree(p);
! 105: return 0;
! 106: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>