// strip spaces multiple spaces from in-between words char *XSD_StripSpaces (char *str) { char *buf, *ret; unsigned int p = 0, q = 0; if (str == NULL) return str; buf = (char *) Q_malloc(strlen(str)+1); for (p=0; p < strlen(str); p++) { if (XSD_IsSpace(str[p])) { if (q == 0 || XSD_IsSpace(buf[q-1])) ; else buf[q++] = ' '; } else buf[q++] = str[p]; } // strip spaces from the end while (q > 0 && XSD_IsSpace(buf[q-1])) q--; buf[q] = 0; ret = (char *) Q_strdup(buf); Q_free(buf); Q_free(str); return ret; }
// strip spaces from inline text, making links working char * StripInlineSpaces(char *str, document_rendered_link_t *links) { int cut = 0; char *buf, *ret; int p=0, q=0; if (str == NULL) return str; buf = (char *) Q_malloc(strlen(str)+1); for (p=0; p < strlen(str); p++) { // offset links document_rendered_link_t *l = links; while (l) { if (l->start == p) l->start -= cut; if (l->end == p) l->end -= cut; l = l->next; } if (XSD_IsSpace(str[p])) { if (q == 0 || XSD_IsSpace(buf[q-1])) cut++; else { // add this char, but replace with pure space buf[q++] = ' '; } } else buf[q++] = str[p]; } // strip spaces from the end while (q > 0 && XSD_IsSpace(buf[q-1])) q--; buf[q] = 0; ret = (char *) Q_strdup(buf); Q_free(buf); Q_free(str); return ret; }