rem: Tcl_DStringAppendElement(attsPtr, as);
add: if (atts) { Tcl_DStringAppendElement(attsPtr, as); }
context: ParseAtts(char *s, char *e, int *servPtr, Tcl_DString *attsPtr){    char    *vs, *ve, *as, *ae, end, vsave, asave;        if (servPtr != NULL) {	*servPtr = 0;    }    while (s < e) {	/*	 * Trim attribute name.	 */	while (s < e && isspace(UCHAR(*s))) {	    ++s;	}	as = s;	while (s < e && !isspace(UCHAR(*s)) && *s != '=') {	    ++s;	}	ae = s;	while (s < e && isspace(UCHAR(*s))) {	    ++s;	}	if (*s++ != '=') {	    /*	     * Use attribute name as value.	     */	    vs = as;	} else {	    /*	     * Trim spaces and/or quotes from value.	     */	    while (s < e && isspace(UCHAR(*s))) {		++s;	    }	    vs = s;	    while (s < e && !isspace(UCHAR(*s))) {		++s;	    }	    ve = s;	    end = *vs;	    if (end != '=' && end != '\'' && end != '"') {		end = 0;	    }	    if (end && ve > vs && ve[-1] == end) {		++vs;		--ve;	    }	    vsave = *ve;	    *ve = '\0';	}	asave = *ae;	*ae = '\0';	/*	 * Append attributes or scan for special <script> pairs.	 */	if (attsPtr != NULL) {	    Tcl_DStringAppendElement(attsPtr, as);	    Tcl_DStringAppendElement(attsPtr, vs);	}	if (servPtr != NULL && vs != as) {	    if (STRIEQ(as, "runat") && STRIEQ(vs, "server")) {		*servPtr |= SERV_RUNAT;	    } else if (STRIEQ(as, "language") && !STRIEQ(vs, "tcl")) {		*servPtr |= SERV_NOTTCL;	    } else if (STRIEQ(as, "stream") && STRIEQ(vs, "on")) {		*servPtr |= SERV_STREAM;	    }	}	/*	 * Restore strings.	 */	*ae = asave;	if (vs != as) {	    *ve = vsave;	}    }}