/* Copyright (C) 2001-2002 Kenichi Suto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "defs.h" // ここからは内部関数 void get_tag_name(gchar *text, gchar *tag){ gchar *p; gint i; p = text; for(i=0; ; i++, p++){ tag[i] = '\0'; if((*p == ' ') || (*p == '>') || (*p == '\0')) break; tag[i] = *p; } } // 開始タグを取り出す。"<"や">"は含まない void get_start_tag(gchar *text, gchar *tag){ gchar *p; gint i; p = strchr(text, '<'); if(p == NULL){ // fprintf(stderr, "get_start_tag: format error\n"); tag[0] = '\0'; return; } // ">"までを開始タグとする p++; for(i=0; ; i++, p++){ if(i == 511) break; if(*p == '\0'){ tag[0] = '\0'; return; } tag[i] = '\0'; if(*p == '>') break; tag[i] = *p; } } // 終了タグを取り出す。"<"や">"は含まない // また、"/"も含まない void get_end_tag(gchar *text, gchar *tag_name, gchar *tag){ gchar buff[512]; gchar *p; gint i; sprintf(buff, ""までを終了タグとする p = p + 2; for(i=0; ; i++, p++){ tag[i] = '\0'; if(*p == '>') break; tag[i] = *p; } } void get_content(gchar *text, gchar *tag_name, gchar **content, gint *content_length){ gchar buff[512]; gchar *p; sprintf(buff, "<%s", tag_name); p = strstr(text, buff); if((p == NULL) || (p != text)){ fprintf(stderr, "get_content: format error\n"); *content = NULL; *content_length = 0; return; } // 開始タグの終わりを探す while(1){ if(*p == '>') break; p++; } p++; *content = p; // 終了タグを探す sprintf(buff, "') || (*p == '\"')) break; value[i] = *p; } } void skip_start_tag(gchar **text, gchar *tag_name){ gchar buff[512]; gchar *p; sprintf(buff, "<%s", tag_name); p = strstr(*text, buff); if(p == NULL){ fprintf(stderr, "skip_start_tag: format error.\n"); return; } while(1){ if(*p == '\0'){ *text = p; return; } if(*p == '>') break; p++; } p++; *text = p; } void skip_end_tag(gchar **text, gchar *tag_name){ gchar buff[512]; gchar *p; sprintf(buff, "') break; p++; } p++; *text = p; }