/* $OpenXM: OpenXM/src/kxx/xtag.c,v 1.1 2002/10/20 13:13:35 takayama Exp $ */ #include int findChar(char s[],int c); int findString(char s[],char a[]); int findString2(char s[],char a[]); char *getTag(char *s); char *getKeyValue(char *s,char *key); char *getBody(char *s); void *xtagMalloc(int n); void xtagFree(void *p); void xtagError(char *s); /* struct stringPair { char *first; char *rest; }; char *getKeyValue(char *s, char *key); struct stringPair *getNextBlock(char *s); */ main_assert1() { /* asserting functions. */ char *s1,*s2,*s3; s1 = " "; s2 = " ox -ox ox_asir "; s3 = " ox hogera "; printf("%s\n",getTag(s1)); printf("%s\n",getTag("hoge hoge hogera")); printf("%s\n",getTag("') || (s[j] == '/' && s[j+1] == '>') || (s[j] == ' ')) { goto aaa; } ans[j-i-1] = s[j]; ans[j-i] = 0; } } } aaa: ; if (strlen(ans) == 0) return NULL; ans2 = (char *) xtagMalloc(strlen(ans)+1); strcpy(ans2,ans); xtagFree(ans); return ans2; } char *getKeyValue(char *s,char *key) { char *key2; int p; int i,start,end; char *ans; key2 = xtagMalloc(3+strlen(key)); /* search the string " key=" */ strcpy(key2," "); strcat(key2,key); strcat(key2,"="); p = findString(s,key2); if (p < 0) return NULL; else { start = p + strlen(key2); /* skip blank and " */ for (i=start; i"); endTag = (char *)xtagMalloc(strlen(tag)+4); strcpy(endTag,""); /* printf("%s,%s, %s\n",tag,startTag,endTag); */ start = end = findString(s,startTag); if (start < 0) return NULL; start = start + strlen(startTag); level = 1; for (i=start; i