diff options
author | Uwe Steinmann <steinm@php.net> | 2000-03-08 17:51:58 +0000 |
---|---|---|
committer | Uwe Steinmann <steinm@php.net> | 2000-03-08 17:51:58 +0000 |
commit | d037fdc8be1e5a299c019ecd33123ee7c17b70e3 (patch) | |
tree | 923cbd40ef84cd966d850fcaba28402de937ed7f /ext/hyperwave | |
parent | b5e13a0f97423d6e8cb43089cc2f5d13e823bb81 (diff) | |
download | php-git-d037fdc8be1e5a299c019ecd33123ee7c17b70e3.tar.gz |
- several fixes and cleanups in hw module
Diffstat (limited to 'ext/hyperwave')
-rw-r--r-- | ext/hyperwave/hg_comm.c | 71 | ||||
-rw-r--r-- | ext/hyperwave/hw.c | 1 |
2 files changed, 49 insertions, 23 deletions
diff --git a/ext/hyperwave/hg_comm.c b/ext/hyperwave/hg_comm.c index 6cf1098025..45ee5c6ca8 100644 --- a/ext/hyperwave/hg_comm.c +++ b/ext/hyperwave/hg_comm.c @@ -457,15 +457,36 @@ DLIST *fnCreateAnchorList(hw_objectID objID, char **anchors, char **docofanchorr cur_ptr->fragment = estrdup(link); } - cur_ptr->htmlattr = NULL; - if(NULL != (str = strstr(object, "HtmlAttr="))) { + { + char *htmlattr, *str2; + int offset; + str1 = object; + htmlattr = emalloc(strlen(object)); + htmlattr[0] = '\0'; + offset = 0; + while(NULL != (str = strstr(str1, "HtmlAttr="))) { str += 9; str1 = str; while((*str1 != '\n') && (*str1 != '\0')) str1++; - cur_ptr->htmlattr = emalloc(str1 - str + 1); - strncpy(cur_ptr->htmlattr, str, str1 - str); - cur_ptr->htmlattr[str1 - str] = '\0'; + if(NULL != (str2 = strchr(str, '='))) { + str2++; + strncpy(&htmlattr[offset], str, str2 - str); + offset = offset + (str2 - str); + htmlattr[offset++] = '"'; + strncpy(&htmlattr[offset], str2, str1 - str2); + offset = offset + (str1 - str2); + htmlattr[offset++] = '"'; + htmlattr[offset++] = ' '; + htmlattr[offset] = '\0'; + } + } + if(offset){ + /* remove last space */ + htmlattr[offset-1] = '\0'; + cur_ptr->htmlattr = estrdup(htmlattr); + } + efree(htmlattr); } if(NULL != (str = strstr(object, "LinkType="))) { @@ -629,9 +650,14 @@ char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char default: newtext = fnInsStr(newtext, cur_ptr->end+offset, "</A>"); if(cur_ptr->fragment) - snprintf(istr, BUFFERLEN, "<A HREF='%s#%s' %s>", cur_ptr->link, cur_ptr->fragment, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + snprintf(istr, BUFFERLEN, "<A HREF='%s#%s'", cur_ptr->link, cur_ptr->fragment); else - snprintf(istr, BUFFERLEN, "<A HREF='%s' %s>", cur_ptr->link, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + snprintf(istr, BUFFERLEN, "<A HREF='%s'", cur_ptr->link); + if(cur_ptr->htmlattr) { + strncat(istr, " ", BUFFERLEN - 1 - strlen(istr)); + strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr)); + } + strncat(istr, ">", BUFFERLEN - 1 - strlen(istr)); } } else { switch(cur_ptr->linktype) { @@ -643,7 +669,6 @@ char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char break; case HW_INTAG_LINK: if(cur_ptr->fragment) -/* snprintf(istr, BUFFERLEN, " %s='%s/%s#%s'", cur_ptr->tagattr, scriptname == NULL ? "." : scriptname, cur_ptr->destdocname, cur_ptr->fragment);*/ snprintf(istr, BUFFERLEN, " %s='#%s'", cur_ptr->tagattr, cur_ptr->fragment); else snprintf(istr, BUFFERLEN, " %s='%s/%s'", cur_ptr->tagattr, scriptname == NULL ? "." : scriptname, cur_ptr->destdocname); @@ -661,19 +686,19 @@ char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char newtext = fnInsStr(newtext, cur_ptr->end+offset, "</A>"); if(cur_ptr->nameanchor) - snprintf(istr, BUFFERLEN, "<A HREF='%s/%s#%s' %s>", scriptname == NULL ? "schade" : scriptname, cur_ptr->destdocname, cur_ptr->nameanchor, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + snprintf(istr, BUFFERLEN, "<A HREF='%s/%s#%s'", scriptname == NULL ? "schade" : scriptname, cur_ptr->destdocname, cur_ptr->nameanchor); + else if(cur_ptr->fragment) + snprintf(istr, BUFFERLEN, "<A HREF=\"%s/%s#%s\"", scriptname == NULL ? "" : scriptname, cur_ptr->destdocname, cur_ptr->fragment); else - if(cur_ptr->fragment) - snprintf(istr, BUFFERLEN, "<A HREF='%s/%s#%s' %s>", scriptname == NULL ? "" : scriptname, cur_ptr->destdocname, cur_ptr->fragment, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); - else - snprintf(istr, BUFFERLEN, "<A HREF='%s/%s' %s>", scriptname == NULL ? "" : scriptname, cur_ptr->destdocname, cur_ptr->htmlattr == NULL ? "" : cur_ptr->htmlattr); + snprintf(istr, BUFFERLEN, "<A HREF='%s/%s'", scriptname == NULL ? "" : scriptname, cur_ptr->destdocname); + + if(cur_ptr->htmlattr) { + strncat(istr, " ", BUFFERLEN - 1 - strlen(istr)); + strncat(istr, cur_ptr->htmlattr, BUFFERLEN - 1 - strlen(istr)); + } + strncat(istr, ">", BUFFERLEN - 1 - strlen(istr)); } } - newtext = fnInsStr(newtext, cur_ptr->start, istr); - /* In case there are several TAGS nested, we accumulate the offset - You wonder what the 4 means? It's the length of </A> */ - offset += strlen(istr) + 4; - laststart = cur_ptr->start; } else { if(laststart >= cur_ptr->end) offset = 0; @@ -686,12 +711,12 @@ char *fnInsAnchorsIntoText(char *text, DLIST *pAnchorList, char **bodytag, char snprintf(istr, BUFFERLEN, "<A NAME='%s'>", cur_ptr->keyword); else if(cur_ptr->nameanchor) snprintf(istr, BUFFERLEN, "<A NAME='%s'>", cur_ptr->nameanchor); - newtext = fnInsStr(newtext, cur_ptr->start, istr); - /* In case there are several TAGS nested, we accumulate the offset - You wonder what the 4 means? It's the length of </A> */ - offset += strlen(istr) + 4; - laststart = cur_ptr->start; } + newtext = fnInsStr(newtext, cur_ptr->start, istr); + /* In case there are several TAGS nested, we accumulate the offset + You wonder what the 4 means? It's the length of </A> */ + offset += strlen(istr) + 4; + laststart = cur_ptr->start; #ifdef newlist ptr = (ANCHOR **) zend_llist_get_prev(pAnchorList); if(ptr) diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index af03df7ab0..1e6013c09a 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -299,6 +299,7 @@ int make2_return_array_from_objrec(pval **return_value, char *objrec, zval *sarr add_assoc_long(spec_arr, "Description", HW_ATTR_LANG); add_assoc_long(spec_arr, "Keyword", HW_ATTR_LANG); add_assoc_long(spec_arr, "Group", HW_ATTR_NONE); + add_assoc_long(spec_arr, "HtmlAttr", HW_ATTR_NONE); } if (array_init(*return_value) == FAILURE) { |