60    if (node->state<0) 
return xml;
 
   71    if (xml->next!=NULL) {
 
 
  155    if (xml!=node) 
return xml;
 
  158    else                          xml->state = node->state;
 
  160    if (xml->next!=NULL) {
 
 
  192    char* node_name = NULL;
 
  193    char* node_attr = NULL;
 
  196    if (pp ==NULL) 
return xml;
 
  197    if (xml==NULL) 
return NULL;
 
  199    if (skip) 
while (*pp!=
'\0' && *pp!=
'<') pp++;
 
  210                        if (node_name!=NULL && xml->ldat.key.buf!=NULL) {
 
  211                            if (!strcmp((
const char*)node_name, (
const char*)(xml->ldat.key.buf))) {
 
  212                                if (xml->next!=NULL) {
 
  219                                if (xml->prev!=NULL) xml = xml->prev;
 
  232            else if (!strncmp(pp+1, 
"!--", 3)) {
 
  237                    if (xml->prev!=NULL) xml = xml->prev;
 
  243            else if (*(pp+1)==
'!') {
 
  248                    if (xml->prev!=NULL) xml = xml->prev;
 
  254            else if (*(pp+1)==
'?') {
 
  266                    if (xml->prev!=NULL) xml = xml->prev;
 
  282                        if (xml->prev!=NULL) xml = xml->prev;
 
  295                                if (xml->prev!=NULL) {
 
  302                        else n = xml->state = m;                    
 
  320                        if (xml->prev!=NULL) {
 
  334        if (n<=0) 
return xml;
 
 
  376    if (node_name==NULL || node_attr==NULL || node_end==NULL) 
return JBXL_ARGS_ERROR;
 
  386    nn = mm = (int)(pt - pp);
 
  390    *node_name = (
char*)malloc((
size_t)(mm + 1));
 
  392    memcpy(*node_name, pp, mm);
 
  393    (*node_name)[mm] = 
'\0';
 
  397        freeNull(*node_name);
 
  404            freeNull(*node_name);
 
  416        nn += (int)(pt - pp) + 1;
 
  421            freeNull(*node_name);
 
  427            *node_attr = (
char*)malloc((
size_t)(mm + 1));
 
  428            if (*node_attr==NULL) {
 
  429                freeNull(*node_name);
 
  432            memcpy(*node_attr, pp, mm);
 
  433            (*node_attr)[mm] = 
'\0';
 
  440                freeNull(*node_name);
 
  441                freeNull(*node_attr);
 
 
  483    nn = mm = (int)(pt - pp);
 
  487    work = (
char*)malloc((
size_t)(mm+1));
 
  489    memcpy(work, pp, mm);
 
 
  526    if (*pp==
'<') 
return nn;            
 
  529    while (*pt!=
'<' && *pt!=
'\0') pt++;
 
  532    if (mm==0) 
return nn;
 
  535    work = (
char*)malloc((
size_t)(mm+1));
 
  537    memcpy(work, pp, mm);
 
 
  570    if (pp==NULL) 
return NULL;
 
  571    sz = (int)strlen((
const char*)pp) + 1;
 
  572    nm = (
char*)malloc(sz);
 
  573    if (nm==NULL) 
return NULL;
 
  576    vl = (
char*)malloc(sz);
 
  584    while (*pp==
' ' && *pp!=
'\0') pp++;
 
  587        while (*pt!=
'=' && *pt!=
'\0') pt++;
 
  594        memcpy(nm, pp, (
size_t)sz);
 
  598        if (*pt!=
'"' && *pt!=
'\'') {
 
  606        while(*pt!=qt && *pt!=
'\0') pt++;
 
  613        memcpy(vl+1, pp, (
size_t)sz);
 
  619        if (lt==NULL) lt = lp;
 
  622        if (*pp!=
' ' && *pp!=
'\0') {
 
  626        while (*pp==
' ' && *pp!=
'\0') pp++;
 
 
  669    nn = mm = (int)(pt - pp);
 
  673    *node_name = (
char*)malloc((
size_t)(mm + 1));
 
  675    memcpy(*node_name, pp, mm);
 
  676    (*node_name)[mm] = 
'\0';
 
  684        nn += (int)(pt - pp) + 1;
 
  689            freeNull(*node_name);
 
  695            *node_attr = (
char*)malloc((
size_t)(mm + 1));
 
  696            if (*node_attr==NULL) {
 
  697                freeNull(*node_name);
 
  700            memcpy(*node_attr, pp, mm);
 
  701            (*node_attr)[mm] = 
'\0';
 
  707    if (strncmp(pt, 
"?>", 2)) {
 
  708        freeNull(*node_name);
 
  709        freeNull(*node_attr);
 
 
  746    nn = mm = (int)(pt - pp);
 
  750    *comment = (
char*)malloc((
size_t)(mm+1));
 
  752    memcpy(*comment, pp, mm);
 
  753    (*comment)[mm] = 
'\0';
 
 
  786    nn = mm = (int)(pt - pp);
 
  790    *data = (
char*)malloc((
size_t)(mm+1));
 
  792    memcpy(*data, pp, mm);
 
 
  812    if (pp==NULL)  
return TRUE;
 
  813    if (*pp==
'\0') 
return TRUE;
 
  816        if (*pp<=0x2c) 
return TRUE;                 
 
  817        if (*pp==0x2f) 
return TRUE;                 
 
  818        if (*pp>=0x3b && *pp<=0x40) 
return TRUE;    
 
  819        if (*pp>=0x5b && *pp<=0x5e) 
return TRUE;    
 
  820        if (*pp==0x60) 
return TRUE;                 
 
  821        if (*pp>=0x7b && *pp<=0x7f) 
return TRUE;    
 
 
  844            if (pp->next!=NULL) {
 
  852        while(pp->esis!=NULL) pp = pp->esis;
 
 
  897    if (pp==NULL) 
return buf;
 
  899    if (pp==NULL) 
return buf;
 
  903    if (buf.
buf==NULL) 
return buf;
 
  905    while (pp->esis!=NULL) pp = pp->esis;
 
 
  932        if (pp->next!=NULL) {
 
 
  980        if (pp->ldat.lst!=NULL) {
 
  983        if (pp->next==NULL) {
 
 1003        if (buf->
buf[buf->
vldsz-1]==
'\n') {
 
 1008        if (pp->esis!=NULL || pp->ysis!=NULL) {
 
 1010            char* tabs = (
char*)malloc(pp->depth-indent+1);
 
 1012                for (i=indent; i<pp->depth; i++) tabs[i-indent] = 
'\t';
 
 1013                tabs[pp->depth-indent] = 
'\0';
 
 1037        if (pp->ldat.key.buf!=NULL) {
 
 1040        if (pp->ldat.lst!=NULL) {
 
 1065        if (pp->ldat.val.buf!=NULL) {
 
 1090        if (pp->ldat.val.buf!=NULL) {
 
 1115        if (pp->ldat.key.buf!=NULL) {
 
 1118        if (pp->ldat.lst!=NULL) {
 
 
 1147        if (pp->next!=NULL) {
 
 
 1184        if (pp->ldat.val.buf!=NULL) {
 
 
 1205    tXML* xml = 
xml_parse((
char*)
"<?xml version=\"1.0\" encoding=\"utf-8\"?>");
 
 
 1223    if (name==NULL) 
return NULL;
 
 1227    if (pp->prev!=NULL) pp->prev->ldat.lv++;
 
 
 1246    if (xml==NULL || name==NULL) 
return NULL;
 
 1250    if (pp->prev!=NULL) pp->prev->ldat.lv++;
 
 
 1291    if (xml==NULL || content==NULL) 
return NULL;
 
 1296    if (pp->prev!=NULL) pp->prev->ldat.lv++;
 
 
 1317    if (xml==NULL || content==NULL) 
return NULL;
 
 1327        if (pp->ldat.key.vldsz!=0) 
cat_s2Buffer(
" ", &(pp->ldat.key));
 
 
 1350    if (xml==NULL || content==NULL) 
return NULL;
 
 
 1378    if (xml==NULL || len<=0) 
return FALSE;
 
 1380    char* area = (
char*)malloc(len);
 
 1381    if (area==NULL) 
return FALSE;
 
 1382    memset(area, (
int)
' ', len-1);
 
 1387        pp->ldat.key.buf[0] = 
'\0';
 
 1388        pp->ldat.key.vldsz  = 0;
 
 
 1403    if (xml==NULL || attr==NULL) 
return NULL;
 
 1408    if (xml->ldat.lst==NULL) xml->ldat.lst = lp;
 
 
 1422    if (xml==NULL || name==NULL) 
return NULL;
 
 
 1439    if (xml==NULL || name==NULL) 
return NULL;
 
 
 1456    if (xml==NULL || name==NULL) 
return NULL;
 
 
 1473    if (xml==NULL || name==NULL) 
return NULL;
 
 
 1493    char* nodename = NULL;
 
 1495    if (xml==NULL) 
return NULL;
 
 1501            if (lp->ldat.key.buf!=NULL) {
 
 1502                nodename = (
char*)lp->ldat.key.buf;
 
 
 1592    if (node==NULL || node->next==NULL) 
return NULL;
 
 1595        if (node->next->ldat.id==
XML_CONTENT_NODE) 
return (
char*)(node->next->ldat.key.buf);
 
 
 1608    if (node==NULL) 
return NULL;
 
 1611        tList* lt = node->ldat.lst;
 
 1613            if (!strcmp((
const char*)lt->ldat.key.buf, attr)) 
return (
char*)(lt->ldat.val.buf);
 
 
 1634    if (tp==NULL) 
return pp;
 
 1637        if (tp->next!=NULL) tp = tp->next;
 
 
 1693    if (fp==NULL) fp = stderr;
 
 1699        if (buf.
buf!=NULL) {
 
 1700            fprintf(fp, 
"%s", buf.
buf);
 
 1703        else fprintf(fp, 
"(XML is NULL)\n");
 
 1706        fprintf(fp, 
"(XML is NULL)\n");
 
 
 1721    if (fp==NULL) fp = stderr;
 
 1729            fprintf(fp, 
"%d: %d [%d] %s (%d)\n", pp->depth, pp->ldat.id, pp->state, pp->ldat.key.buf, num);
 
 1730            if (pp->altp!=NULL) {
 
 1731                fprintf(fp, 
" altp -> %s, %s\n", pp->altp->ldat.key.buf, pp->altp->ldat.val.buf);
 
 1735            fprintf(fp, 
"(XML is ANCHOR only)\n");
 
 1739        fprintf(fp, 
"(XML is NULL)\n");
 
 
 1762    if (fp==NULL) fp = stderr;
 
 1769            for(i=0; i<pp->depth; i++)   fprintf(fp, 
"%s", space);
 
 1770            for(i=0; i<pp->depth-1; i++) fprintf(fp, 
"%s", 
"   ");       
 
 1775            fprintf(fp, 
"(XML is ANCHOR only)\n");
 
 1779        fprintf(fp, 
"(XML is NULL)\n");
 
 
 1800    if (fp==NULL) fp = stderr;
 
 1804            if (pp->next!=NULL) pp = pp->next;
 
 1807        while(pp->esis!=NULL) pp = pp->esis;
 
 1814                if (pp->esis!=NULL || pp->depth>=0) fprintf(fp, 
"\n");
 
 1816                    for(i=0; i<pp->depth; i++) fprintf(fp, 
"%s", space);
 
 1822            fprintf(fp, 
"%d: %d [%d] %s (%d)", pp->depth, ld.id, pp->state, ld.key.buf, num);
 
 1824                tList* lst = ld.lst;
 
 1825                fprintf(fp, 
"  attr -->");
 
 1827                    fprintf(fp, 
" %s=%s", lst->ldat.key.buf, lst->ldat.val.buf);
 
 1838        fprintf(fp, 
"(XML is NULL)\n");
 
 
 1880    if (pp==NULL || pt==NULL) 
return NULL;
 
 1884        if (pp->next!=NULL) pp = pp->next;
 
 1888        if (pt->next!=NULL) pt = pt->next;
 
 1893    if (tt==NULL) 
return FALSE;
 
 1895    while(pp->esis!=NULL) pp = pp->esis;
 
 1897    if (fnd) tt = tt->altp;
 
 
 1925    if (pp==NULL || pt==NULL || name==NULL) 
return FALSE;
 
 1928    if (tt==NULL) 
return FALSE;
 
 
 1963    if (pp==NULL || pt==NULL) 
return FALSE;
 
 1967        if (pp->next!=NULL) pp = pp->next;
 
 1971        if (pt->next!=NULL) pt = pt->next;
 
 1976    if (tt==NULL) 
return FALSE;
 
 1979    while(pp->esis!=NULL) pp = pp->esis;
 
 
 2009    if (pp==NULL || (key==NULL && val==NULL) ) 
return NULL;
 
 2012        if (pp->next!=NULL) pp = pp->next;
 
 2015    while(pp->esis!=NULL) pp = pp->esis;
 
 2018        if (pp->ldat.lst!=NULL) {
 
 2019            tList* lst = pp->ldat.lst;
 
 2022                    if (
ex_strncasecmp(val, (
const char*)lst->ldat.val.buf, 0)) 
return pp;
 
 2028        if (pp->next!=NULL) {
 
 2030            if (pm!=NULL) 
return pm;
 
 
 2071    if (pp==NULL || pt==NULL) 
return NULL;
 
 2075        if (pp->next!=NULL) pp = pp->next;
 
 2079        if (pt->next!=NULL) pt = pt->next;
 
 2084    if (tt==NULL) 
return NULL;
 
 2086    if (dm==NULL) 
return NULL;
 
 2089    while(pp->esis!=NULL) pp = pp->esis;
 
 2092    if (fnd) tt = dm->altp;
 
 
 2123    if (pp==NULL || pt==NULL || content==NULL) 
return FALSE;
 
 2126    if (tt==NULL) 
return FALSE;
 
 
 2143    if (node!=NULL) ret = atoi((
char*)(node->ldat.key.buf));
 
 
 2158    if (node!=NULL) ret = (float)atof((
char*)(node->ldat.key.buf));
 
 
 2173    if (node!=NULL) ret = atof((
char*)(node->ldat.key.buf));
 
 
 2188    if (node!=NULL) ret = (
char*)(node->ldat.key.buf);
 
 
 2212    if (pp==NULL || pt==NULL) 
return NULL;
 
 2215    if (tt!=NULL) lp = tt->ldat.lst;    
 
 
 2228    if (pp==NULL || pt==NULL || attr==NULL) 
return ret;
 
 
 2245    if (pp==NULL || pt==NULL || attr==NULL) 
return ret;
 
 2252            char* ptr  = (
char*)buf.
buf;
 
 2253            if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] = 
'\0';
 
 2254            if (ptr[0]==
'"') ptr++;
 
 
 2272    if (pp==NULL || pt==NULL || attr==NULL) 
return ret;
 
 2279            char* ptr  = (
char*)buf.
buf;
 
 2280            if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] = 
'\0';
 
 2281            if (ptr[0]==
'"') ptr++;
 
 
 2311    if (pp==NULL || pt==NULL || at==NULL) 
return FALSE;
 
 
 2333    if (pp==NULL || pt==NULL || src==NULL || dst==NULL) 
return FALSE;
 
 2336    if (tt==NULL) 
return FALSE;
 
 
 2358    if (pp==NULL || str==NULL) 
return FALSE;
 
 
 2377    if (pp==NULL || str==NULL || val==NULL) 
return FALSE;
 
 
 2396    if (pp==NULL || str==NULL) 
return FALSE;
 
 
 2415    if (pp==NULL || str==NULL) 
return FALSE;
 
 
 2435    if (node!=NULL) ret = atoi((
char*)(node->ldat.key.buf));
 
 
 2451    if (node!=NULL) ret = (float)atof((
char*)(node->ldat.key.buf));
 
 
 2467    if (node!=NULL) ret = atof((
char*)(node->ldat.key.buf));
 
 
 2484    if (node!=NULL) ret = (
char*)(node->ldat.key.buf);
 
 
 2499    if (pp==NULL || str==NULL || val==NULL) 
return FALSE;
 
 
 2518    if (pp==NULL || str==NULL) 
return NULL;
 
 
 2536    if (pp==NULL || str==NULL || attr==NULL) 
return ret;
 
 
 2554    if (pp==NULL || str==NULL || attr==NULL) 
return ret;
 
 2561            char* ptr  = (
char*)buf.
buf;
 
 2562            if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] = 
'\0';
 
 2563            if (ptr[0]==
'"') ptr++;
 
 
 2582    if (pp==NULL || str==NULL || attr==NULL) 
return ret;
 
 2589            char* ptr  = (
char*)buf.
buf;
 
 2590            if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] = 
'\0';
 
 2591            if (ptr[0]==
'"') ptr++;
 
 
 2610    if (pp==NULL || str==NULL || at==NULL) 
return FALSE;
 
 
 2629    if (pp==NULL || src==NULL || src==NULL || dst==NULL) 
return FALSE;
 
 
 2660    if (pp==NULL || pt==NULL) 
return NULL;
 
 2663        if (pp->next!=NULL) pp = pp->next;
 
 2667        if (pt->next!=NULL) pt = pt->next;
 
 
 2696    if (pp==NULL || pt==NULL) 
return NULL;
 
 2699        if (pp->next!=NULL) pp = pp->next;
 
 2703        if (pt->next!=NULL) pt = pt->next;
 
 2708    if (dm==NULL) 
return NULL;
 
 2710    if (dm==NULL) 
return NULL;
 
 
 2737    if (pp==NULL  || pt==NULL || content==NULL)  
return 0;
 
 2740    if (lt==NULL) 
return 0;
 
 2743        if (lt->altp!=NULL) {
 
 
 2765    if (pp==NULL || str==NULL) 
return NULL;
 
 
 2785    if (pp==NULL || str==NULL) 
return NULL;
 
 
 2805    if (pp==NULL  || str==NULL || content==NULL) 
return 0;
 
 
 2856        if (ret) 
return TRUE;
 
 2858        if (pp->next!=NULL) {
 
 
 2892    while(pp->esis!=NULL) pp = pp->esis;
 
 
 2914        if (ret && te->altp!=NULL) {
 
 2916            lm->altp = te->altp;  
 
 2918            if (lp==NULL) lp = lt;
 
 2922        if (pp->next!=NULL) {     
 
 2926                if (lp==NULL) lp = lt;
 
 2931        if (!ret) pp = pp->ysis;    
 
 
 2954    if (pp==NULL || pt==NULL) 
return NULL;
 
 
 3001    if (tp==NULL || tr==NULL) 
return FALSE;
 
 3008        if (tt==NULL) 
return FALSE;          
 
 3013        while (tb!=NULL && ret) {
 
 3014            if (tb->next==NULL) ret = 
TRUE;
 
 3016            else if (tb->next!=NULL && ta->next==NULL) ret = 
FALSE;
 
 
 3078        while (ta!=NULL && tb!=NULL) {
 
 3082                if ((ta->ldat).key.buf!=NULL && (tb->ldat).key.buf!=NULL) {
 
 3083                    if (ta->ldat.id!=tb->ldat.id || strcmp((
char*)((ta->ldat).key.buf), (
char*)((tb->ldat).key.buf))) 
break;
 
 3095        if (tb==NULL) 
return ts;
 
 
 3125    if (tp==NULL || name==NULL) 
return content;
 
 3130        if (tt->next!=NULL) {
 
 3133            if (tt==NULL) 
return content;
 
 
 3154    if (content.
buf==NULL) ret = 0;
 
 3155    else                   ret = atoi((
const char*)content.
buf);
 
 
 3175    if (content!=NULL) *content = buf;
 
 
 3195    char nums[20], numd[20];
 
 
 3223    if (pp==NULL || dst==NULL) 
return 0;
 
 3226        if (pp->next!=NULL) pp = pp->next;
 
 3229    while(pp->esis!=NULL) pp = pp->esis;
 
 
 3247        if (pp->ldat.key.buf!=NULL && pp->ldat.id==
XML_NAME_NODE && pp->ldat.lv>0) {
 
 3248            if (name==NULL || !strcmp(name, (
const char*)(pp->ldat.key.buf))) {
 
 3249                tXML* tt = pp->next;
 
 3258                        else if (tt->ldat.key.buf!=NULL && strstr((
const char*)tt->ldat.key.buf, src)!=NULL) {
 
 
 3295    if (pp==NULL || dst==NULL) 
return 0;
 
 3298        if (pp->next!=NULL) pp = pp->next;
 
 3301    while(pp->esis!=NULL) pp = pp->esis;
 
 
 3319        if (id<0 || pp->ldat.id==
id) {
 
 3324            else if (pp->ldat.key.buf!=NULL && strstr((
const char*)pp->ldat.key.buf, src)!=NULL) {
 
 
 3410    if (name==NULL) 
return xml;
 
 3419    else if (kind[0]==
'\0') knd = 
add_xml_node(val, 
"string");
 
 
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
 
Buffer replace_sBuffer_bystr(Buffer buf, const char *frm, const char *tos)
buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す
 
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
 
Buffer read_Buffer_file(const char *fn)
ファイル fn の内容を Buffer型変数に読み込む.
 
Buffer init_Buffer()
初期化したBuffer型変数を返す.
 
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
 
int cat_Buffer(Buffer *src, Buffer *dst)
Buffer変数 srcから dstへバッファを catする.
 
void add_indent_Buffer(Buffer *buf, char cc, int len)
インデント(cc x num) を付加する.
 
#define copy_s2Buffer(src, dst)
copy_b2Buffer()
 
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
 
#define make_Buffer_bystr(str)
set_Buffer()
 
#define JBXL_XML_NODE_CLOSED
XMLノードは閉じている
 
#define JBXL_ARGS_ERROR
不正な引数(NULLなど)
 
#define JBXL_STATE_ANCHOR
アンカーノード
 
#define JBXL_XML_DEFAULT_STATE
XMLデータの初期状態
 
#define JBXL_XML_NODE_EMPTY
XMLの空のノード
 
#define JBXL_XML_NOT_CLOSED
XMLデータが閉じていない
 
#define JBXL_XML_NODE_OPENED
XMLノードは開いている
 
#define JBXL_XML_PARSE_ERROR
XML の解釈エラー
 
#define JBXL_XML_SEQUENCE_ERROR
XMLノードのリンクエラー
 
#define JBXL_MALLOC_ERROR
メモリ確保エラー
 
#define JBXL_XML_MULTI_ROOT
XMLは複数のルート(TOP)を持っている.(パース済み)
 
#define JBXL_XML_PARSED
XMLパース済み
 
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
 
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
 
tList * dup_tList(tList *pp)
リストを複製する.
 
void del_all_tList(tList **pp)
リストの全ノードの削除.ポインタ ppのノードを含むリスト全体を削除する.
 
tList * insert_tList(tList *pp, tList *pt)
ノードppの直ぐ後ろに ptを挿入する.
 
int count_tList(tList *pp)
リストの ppノード以降のノードの数を数える.
 
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
 
tList * find_tList_end(tList *pl)
リストの最後のノードを探す.
 
tList * add_tList_end(tList *pp, tList *pt)
リストppの最後に リストptを追加する.
 
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.
 
#define add_tList_node_str(p, k, v)
add_tList_node_bystr()
 
tTree * new_tTree_anchor_node(void)
ツリー用の ANCHORノードを動的に生成.
 
void adjust_tTree_depth(tTree *pp)
指定したノード ppを基準にして,木の深さを測り直す
 
tTree * strncmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ
 
int count_tTree(tTree *pp)
ツリーの ppノード以降のノードの数を数える.
 
tTree * dup_merge_tTree(tTree *pp, tTree *tp)
ツリー ppの直下にツリー tpを複製する.
 
tTree * insert_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを長子としてリストに追加.
 
void _clear_tTree_ctrl(tTree *pp)
ppツリーの ctrlをクリアする.
 
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
 
void _copy_tTree_byctrl(tTree *pt)
同じパターンの枝を検索し,ptのノードの属性をコピーする.
 
int find_match_tTree(tTree *pp, tTree *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
 
#define TREE_NOCMP_NODE
比較対照から外すノード.通常は無条件で一致させる.
 
#define TREE_NOCMP_COPY_NODE
比較対照から外し,最後にコピー処理を行うノード.通常は無条件で一致させる.
 
#define TREE_ALREADY_FOUND_NODE
検索などにおいて既に見つけたノード.見つけたことを確定したノード.
 
int _replace_all_node_byid_rcsv(tXML *pp, const char *src, const char *dst, int id)
replace_all_node_byid() の補助関数
 
double get_xml_double_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を double型で返す.
 
int _replace_all_node_contents_rcsv(tXML *pp, const char *name, const char *src, const char *dst)
replace_all_node_content() の補助関数
 
char * get_xml_char_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_char_attr() の _bystr バージョン.free() してはいけない.
 
tXML * xml_main_parse(tXML *xml, char *pp, int skip)
部分的な XMLデータを解釈して,tXMLのツリー構造に格納する.パーサの内部的なメイン関数.
 
void _xml_to_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
xml_inverse_parse()用の補助関数.
 
float get_xml_float_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を float型で返す.
 
void print_sister_xml_tree(FILE *fp, tXML *pp, const char *space)
XMLツリーの表示.ppの姉妹ノードも出力する.
 
tXML * xml_rpc_end_array(tXML *xml)
配列データを閉じて,送信用データを生成する.
 
int get_node_integer(tXML *tp, const char *name, int no)
tp中のXMLデータから no番目のノード '<node_name>node_content(整数)</node_name>' の node_content(整数)を得る.
 
void print_xml_node(FILE *fp, tXML *pp)
MLのノード情報を表示する.デバッグ用.
 
tXML * get_xml_node(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードへのポインタを返す.
 
tXML * xml_rpc_add_member(tXML *xml, char *name, char *value, char *kind)
XML-RPC の <member> データを作って,繋げていく.
 
int set_xml_end_node_bystr(tXML *pp, const char *str)
set_xml_end_node(tXML* pp, tXML* pt) の _bystr バージョン
 
tXML * add_xml_attr_double(tXML *xml, const char *name, double value)
xml に属性名 name, double型実数の属性値 value を持つノードを追加する.
 
int xml_parse_comment_node(char *pp, char **comment)
XMLのコメントノードを処理する.
 
int set_xml_node_bystr(tXML *pp, const char *str, const char *val)
set_xml_node(tXML* pp, tXML* pt, const char* val) の _bystr バージョン
 
tXML * add_xml_attr_str(tXML *xml, const char *name, const char *value)
xml に属性名 name, 文字列の属性値 value を持つノードを追加する.
 
int replace_xml_content(tXML *pp, tXML *pt, const char *src, const char *dst)
get_xml_content() を使用し,XMLキーの src部分を dstで書き換える.
 
float get_xml_float_content_bystr(tXML *pp, const char *str)
get_xml_float_content(tXML* pp, tXML* pt) の _bystr バージョン.
 
int find_match_xml(tXML *pp, tXML *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.姉妹ツリーも検索するので注意.
 
void print_xml_tree(FILE *fp, tXML *pp, const char *space)
XMLツリーをそのままツリー表示する.デバッグ用.
 
int set_xml_content(tXML *pp, tXML *pt, const char *content)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後ノードに対応したのノードのコンテントを contentで置き換える.
 
tXML * dup_merge_xml(tXML *pp, tXML *tp)
XMLツリー ppの直下にXMLツリー tpを複製する.
 
char * xml_get_node_attr(tXML *node, const char *attr)
属性値を持つノードのポインタから,指定された属性値へのポインタを返す.free() してはいけない.
 
tXML * xml_parse_file(const char *fn)
ファイルから読み込んでパースする.
 
double get_xml_double_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_double_attr() の _bystr バージョン.
 
void print_xml(FILE *fp, tXML *pp, int mode)
XMLの表示(出力).
 
tList * _find_match_xml_endlist_rcsv(tXML *pp, tXML *pt, tXML *te)
find_match_xml_endlist() の補助関数
 
char * get_xml_char_content_bystr(tXML *pp, const char *str)
get_xml_char_content(tXML* pp, tXML* pt) の _bystr バージョン.free() してはいけない.
 
tXML * xml_rpc_end_member(tXML *xml)
<struct><member> データを閉じて,<value> データを作り出す.
 
int replace_all_node_integer(tXML *tp, const char *name, int src, int dst)
XMLツリー pp内で ノード名が nameである全てのノードのコンテント(整数)を,srcから dstに書き換える.
 
tXML * set_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下のコンテントノードの値を置き換える.
 
int get_xml_int_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_int_attr() の _bystr バージョン.
 
tXML * xml_parse_seq(tXML *xml, char *pp)
部分的な XMLデータを解釈して,tXMLのツリー構造に格納する.断片的にXMLデータを入力する場合に使用する.
 
tXML * xml_rpc_add_array(tXML *xml, tXML *array)
<value><struct> データから 配列データ <data>...</data> を作って繋げていく.
 
int get_xml_int_content_bystr(tXML *pp, const char *str)
get_xml_int_content(tXML* pp, tXML* pt) の _bystr バージョン
 
Buffer xml_rpc_request_pack(const char *name, tXML *xml)
XML-RPC用のデータを生成する.
 
int set_xml_attr(tXML *pp, tXML *pt, tList *at)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのノードの属性としてatの値をコピーする.
 
tXML * get_xml_node_bystr(tXML *pp, const char *str)
get_xml_node(tXML* pp, tXML* pt) の _bystr バージョン
 
tList * get_xml_content_list_bystr(tXML *pp, const char *str)
get_xml_conetnt_list_bystr() の _bystr バージョン.
 
char * get_first_xml_nodename(tXML *xml)
XMLツリーの最初のノードの名前を返す.
 
int set_xml_content_list(tXML *pp, tXML *pt, const char *content)
get_xml_content_list() で検出したコンテントを, content で置き換える.
 
int xml_parse_start_node(char *pp, char **node_name, char **node_attr, int *node_end)
XMLの開始ノードを処理する.
 
int set_xml_end_node(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードへのポインタを返す.
 
int check_match_xml(tXML *tp, tXML *tr)
XMLツリー tpが XMLツリー trと同じかどうかを検査する.
 
int replace_all_node_byid(tXML *pp, const char *src, const char *dst, int id)
XMLツリー pp内で ノードの種別が idである全てのノードの内容を srcから dstに書き換える.
 
Buffer make_xml_attr_byfloat(const char *name, float value)
属性名 name, float型実数の属性値 value を持つ Buffer型変数を作成する.
 
Buffer make_xml_attr_bystr(const char *name, const char *value)
属性名 name, 文字列の属性値 value を持つ Buffer型変数を作成する.
 
tXML * init_xml_doc()
XML のドキュメントヘッダを作成する.
 
int set_xml_content_list_bystr(tXML *pp, const char *str, const char *content)
set_xml_content_list_bystr() の _bystr バージョン.
 
int set_xml_node(tXML *pp, tXML *pt, const char *name)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノード対応したノードにノード名をコピーする.
 
int xml_parse_processing_node(char *pp, char **node_name, char **node_attr)
XMLのプロセッシングノードを処理する
 
void close_xml(tXML *pp)
パースエラーを起こしたツリーを強制的に正常化する.
 
int replace_all_node_contents(tXML *pp, const char *name, const char *src, const char *dst)
XMLツリー pp内で ノード名が nameである全てのノードのコンテントを,srcから dstに書き換える.
 
void xml_attr_to_Buffer(tList *pp, Buffer *buf)
リストに保存されたノードの属性をテキストへ戻す.
 
tXML * add_xml_attr(tXML *xml, const char *attr)
xml に属性(attr)を追加する.
 
int set_xml_content_bystr(tXML *pp, const char *str, const char *val)
set_xml_content(tXML* pp, tXML* pt, char* val) の _bystr バージョン
 
tList * get_xml_attr(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのノード属性値へのリストを altp に入れて返す.
 
double get_xml_double_content_bystr(tXML *pp, const char *str)
get_xml_double_content(tXML* pp, tXML* pt) の _bystr バージョン.
 
tXML * add_xml_attr_float(tXML *xml, const char *name, float value)
xml に属性名 name, float型実数の属性値 value を持つノードを追加する.
 
int replace_xml_content_bystr(tXML *pp, const char *str, const char *src, const char *dst)
replace_xml_content(tXML*pp, tXML* pt, char* src, char* dst) の _bystr バージョン.
 
int xml_parse_data_node(char *pp, char **data)
XMLのデータノード(その他エレメントノードなど)を処理する.
 
tXML * insert_xml_node(tXML *xml, const char *name)
XMLツリーのxml の直下(姉妹の一番上:長子)にノード(属性は指定しない)を挿入する.
 
int get_xml_int_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を int型で返す.
 
tXML * add_xml_node(tXML *xml, const char *name)
XMLツリーのxml の直下(姉妹の一番下:末っ子)にノード(属性は指定しない)を挿入する.
 
int return_exist_node(tXML *tp, const char *name, int no, Buffer *content)
bufの中に ノード '<name>content</name>' が存在するかどうかチェックする.
 
tXML * xml_parse(char *pp)
文字列のXMLデータを解釈して,tXMLのツリーを生成する.
 
tList * xml_parse_attr(char *pp)
XMLのノード属性を解釈して,リスト(tList)にする.
 
char * get_xml_char_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を char*型で返す.free() してはいけない.
 
tXML * find_match_xml_end_node(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptの最後のノードに対応する pp内のノードへのポインタを返す.
 
tList * get_xml_content_list(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptに一致した枝の,ptの最後のノードに対応するノードのコンテントへのポインタをリストに格納して返す.
 
int add_xml_content_area(tXML *xml, int len)
xml に空のコンテントノードを追加する.
 
void xml_close_node_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
ツリー中のXMLのクローズノードのデータを元の書式に戻して Bufferに格納する.
 
int isnot_xml_name(unsigned char *pp)
XML名として不適切かどうかを大まかに判断する.
 
Buffer get_node_content(tXML *tp, const char *name, int no)
tp中のXMLデータから no番目のノード '<name>node_content</name>' のnode_contentのコピーを得る.
 
int get_xml_int_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を int型で取り出す.
 
char * get_xml_char_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を char*型で取り出す.free() してはいけない.
 
int set_xml_attr_bystr(tXML *pp, const char *str, tList *at)
set_xml_attr(tXML* pp, tXML* pt, tList* at) の _bystr バージョン.
 
int xml_parse_end_node(char *pp, char **node_name)
XMLの終了ノードを処理する.
 
Buffer make_xml_attr_bydouble(const char *name, double value)
属性名 name, double型実数の属性値 value を持つ Buffer型変数を作成する.
 
void xml_open_node_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
ツリー中のXMLのオープンノードのデータを元の書式に戻して Bufferに格納する.
 
tXML * find_match_xml_endlist(tXML *pp, tXML *pt)
ツリー pp内で ツリー ptと同じパターンの枝を全て探して,その枝のptの最後のノードに対応するノードの情報をリストにして返す.
 
Buffer make_xml_attr_byint(const char *name, int value)
属性名 name, 整数の属性値 value を持つ Buffer型変数を作成する.
 
char * xml_get_node_content(tXML *node)
コンテントへのポインタを返す.free() してはいけない.
 
tXML * append_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下のコンテントノードにコンテンツを追加する.
 
tXML * add_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下にコンテントを挿入する.
 
double get_xml_double_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を double型で取り出す.
 
tXML * get_xml_content(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのコンテントへのポインタを altp に入れて返す.
 
tXML * get_xml_attr_node(tXML *pp, const char *key, const char *val)
属性 key=val のノードを探し,最初に見つけたノードを返す.
 
tXML * get_xml_content_bystr(tXML *pp, const char *str)
get_xml_content(tXML* pp, tXML* pt) の _bystr バージョン
 
tList * get_xml_attr_bystr(tXML *pp, const char *str)
get_xml_attr(tXML* pp, tXML* pt, tList* at) の _bystr バージョン.
 
tXML * cmp_sisters_xml(tXML *tp, tXML *tr)
XMLノード tpの姉妹ノードが trの姉妹ノードと同じ XMLノードまたはコンテントであるかを比較する.
 
Buffer xml_inverse_parse(tXML *pp, int mode)
ppに格納された XMLデータを元の書式に戻して Bufferに格納する.xml_parse() の逆.
 
int xml_parse_content(char *pp, char **content)
XMLのコンテントを処理する.
 
tList * get_xml_node_list(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptに一致した枝の,ptの最後のノードに対応するノードへのポインタをリストに格納して返す.
 
tList * get_xml_node_list_bystr(tXML *pp, const char *str)
get_xml_node_list() の _bystr バージョン.
 
tXML * add_xml_attr_int(tXML *xml, const char *name, int value)
xml に属性名 name, 整数の属性値 value を持つノードを追加する.
 
#define XML_COMMENT_NODE
コメントノード
 
#define XML_PROCESS_NODE
XML_DOC_NODE 以外の <? ... ?>ノード
 
#define XML_DATA_NODE
<! ... > ノード
 
#define XML_DOC_NODE
<? xml... ?> ノード
 
#define XML_SPACE4_FORMAT
先頭に空白4つ "    " をつけ,ノードごとに改行する.
 
#define make_xml_attr_float(n, v)
make_xml_attr_byfloat()
 
#define make_xml_attr_int(n, v)
make_xml_attr_byint()
 
#define XML_TAB_FORMAT
先頭にインデント(TAB)をつけ,ノードごとに改行する.
 
#define join_xml(a, b)
ツリー aへノード bを末っ子として追加.
 
#define XML_CONTENT_NODE
内容(コンテント)ノード
 
#define XML_DATA_NODE_KEY
 
#define XML_NAME_NODE
ネームノード
 
#define find_xml_top(p)
find_tList_top()
 
#define make_xml_attr_str(n, v)
make_xml_attr_bystr()
 
#define del_xml(p)
指定したノード以下のXMLツリー(ppの姉妹は含まない)を削除する.
 
#define make_xml_attr_double(n, v)
make_xml_attr_bydouble()
 
#define del_all_xml(p)
XMLツリーの全ノードの削除.ポインタ ppのノードを含むXMLツリー全体を削除する.
 
#define new_xml_node()
new_tTree_node()
 
#define XML_COMMENT_NODE_KEY
 
#define XML_ANCHOR_NODE
アンカーノード
 
#define XML_ONELINE_FORMAT
改行なしの一行にする.
 
#define find_xml_end(p)
find_tTree_end()
 
#define XML_SPACE_FORMAT
先頭に空白2つ "  " をつけ,ノードごとに改行する.