XMLPars.h

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|