static char *trimmedSubstring(CSSParser *p, size_t start, size_t pos) { char *untrimmed = DFSubstring(p->chars,start,pos); char *trimmed = DFStringTrimWhitespace(untrimmed); free(untrimmed); return trimmed; }
int unescapeCSSIdent(const char *filename, DFError **error) { char *input = readString(filename,error); if (input == NULL) return 0; char *escaped = DFStringTrimWhitespace(input); char *unescaped = CSSUnescapeIdent(escaped); printf("%s\n",unescaped); free(unescaped); free(escaped); free(input); return 1; }
void DFStripWhitespace(DFNode *node) { if (node->tag == DOM_TEXT) { char *trimmed = DFStringTrimWhitespace(node->value); if ((strlen(trimmed) == 0) && (node->parent != NULL)) DFRemoveNode(node); else DFSetNodeValue(node,trimmed); free(trimmed); } else { if (node->tag >= MIN_ELEMENT_TAG) { const char *space = DFGetAttribute(node,XML_SPACE); if ((space != NULL) && !strcmp(space,"preserve")) return; } DFNode *next; for (DFNode *child = node->first; child != NULL; child = next) { next = child->next; DFStripWhitespace(child); } } }
static DFNode *WordRunContentCreate(WordPutData *put, DFNode *abstract) { switch (abstract->tag) { case DOM_TEXT: { DFNode *text = DFCreateTextNode(put->contentDoc,abstract->value); // Text inside a <w:del> element must be stored in a <w:delText> element // Text *not* inside a <w:del> element is stored in a <w:t> element Tag tag = WORD_T; for (DFNode *a = abstract->parent; a != NULL; a = a->parent) { if (a->tag == HTML_DEL) tag = WORD_DELTEXT; } DFNode *t = DFCreateElement(put->contentDoc,tag); DFAppendChild(t,text); char *trimmed = DFStringTrimWhitespace(abstract->value); if (!DFStringEquals(trimmed,abstract->value)) DFSetAttribute(t,XML_SPACE,"preserve"); free(trimmed); return t; } case HTML_IMG: return WordDrawingCreate(put,abstract); case HTML_BR: return DFCreateElement(put->contentDoc,WORD_BR); case HTML_SPAN: { const char *className = DFGetAttribute(abstract,HTML_CLASS); if (DFStringEquals(className,DFTabClass)) return DFCreateElement(put->contentDoc,WORD_TAB); return NULL; } default: return NULL; } }