C:\home\SVGCats_src\src\XMLPars.h
1|/************************************************************************** 2| 1. <<< XMLパーサ (XMLPars) >>> 3|***************************************************************************/ 4| 5|#ifndef __XMLPARS_H 6|#define __XMLPARS_H 7| 8| 9| 10|/************************************************************************* 11| 2. <<< モジュール設定・優先ヘッダ >>> 12|**************************************************************************/ 13|#ifndef USES_PRIORITY_HEADER 14|/*[START_OF_PRIORITY_HEADER]*/ 15| 16|#ifndef USES_XMLPARS 17|#define USES_XMLPARS 18| 19|typedef struct _XMLPars XMLPars; 20| 21|#endif 22| 23|/*[END_OF_PRIORITY_HEADER]*/ 24|#endif 25| 26|/* 派生属性の設定 */ 27|#if defined(XMLPARS_SOME) 28| #define XMLPARS_OTHER 29|#endif 30| 31|/************************************************************************* 32| 3. <<< エラーコード, リターンコード >>> 33|**************************************************************************/ 34| 35|#define XMLPars_Err_Some 0 36| 37| 38|/*--------------------------------------------------------------*/ 39|/*4. <<< Interface Area -------------------------------------- >>> */ 40|/*--------------------------------------------------------------*/ 41| 42|#ifdef __cplusplus 43|extern "C" { 44|#endif 45| 46| 47|/************************************************************************** 48| 5. <<< [XMLPars] XML基本パーサ >>> 49|【補足】 50|・BLex3 と協調することはできません。その代わり簡単に扱えます。 51|・開始タグ、開始兼終了タグ、終了タグ、テキストで止まります。 52|【例】 53| XMLPars xmlp; 54| char xmlp_buf[3072]; 55| 56| XMLPars_init( &xmlp, "a.xml", xmlp_buf, sizeof(xmlp_buf) ); 57| while ( XMLPars_parse( &xmlp ) ) { 58| if ( XMLPars_getTokenType( &xmlp ) == XMLPars_StartAndEndTag ) { 59| if ( stricmp( XMLPars_getTagName( &xmlp ), "TagName" ) == 0 ) { 60| printf( "%s\n", XMLPars_getValue( &xmlp, "AttrName" ) ); 61| } 62| } 63| } 64| XMLPars_finish( &xmlp ); 65|***************************************************************************/ 66|struct _XMLPars { 67| BLex3_EngineU engU; 68| LineCnt lineCnt; 69| HtmlPars htmlPars; 70| bool bText; /* 現在位置は、タグ間のテキストかどうか */ 71| char spaceTagName[80]; /* xml:space="preserve" を持つタグ, ""=ブロック外 */ 72| 73| ERRORS_INITCHK_VAR 74|}; 75| 76|void XMLPars_init( XMLPars*, const char* path, void* buf, int buf_size ); 77|void XMLPars_finish( XMLPars* ); 78|bool XMLPars_parse( XMLPars* ); 79|int XMLPars_getTokenType( XMLPars* ); 80|char* XMLPars_getTagName( XMLPars* ); 81|char* XMLPars_getValue( XMLPars*, const char* name ); 82|int XMLPars_getText( XMLPars*, int offset, char* s, int s_size ); 83|void XMLPars_getPos( XMLPars*, BLex3_Pos* ); 84|void XMLPars_setPos1( XMLPars*, int ); 85|int XMLPars_getLineNum( XMLPars* ); 86|void XMLPars_print( XMLPars*, const char* title ); 87| 88|/* 以下は内部用 */ 89|void XMLPars_init_imp( XMLPars* ); 90| 91| 92|/*********************************************************************** 93| 6. <<< [XMLトークンタイプ] >>> 94|************************************************************************/ 95|#define XMLPars_StartTag 1 /* 開始タグ <A> */ 96|#define XMLPars_EndTag 2 /* 終了タグ </A> */ 97|#define XMLPars_StartAndEndTag 3 /* 開始兼終了タグ <A/> */ 98|#define XMLPars_TextBetweenTags 4 /* タグの間のテキスト */ 99| 100| 101|/************************************************************************** 102| 7. <<< [XMLPars_Ex] XML拡張パーサ >>> 103|【補足】 104|・(未対応) 105|・未対応のタグや属性を保持しながら、タグや一部の属性を修正できます。 106|・XMLPats_Tag を内部で malloc しています。 107|***************************************************************************/ 108| 109|#ifdef __cplusplus 110|} 111|#endif 112| 113|/*--------------------------------------------------------------*/ 114|/*8. <<< Mapping Area ---------------------------------------- >>> */ 115|/*--------------------------------------------------------------*/ 116| 117| 118|#endif /* __XMLPARS_H */ 119| 120|