X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=XMLTree.cpp;fp=XMLTree.cpp;h=e23a06a12b2a23b209cc28e257f5b73ab537bf61;hb=b2df171c52f1e6d35a8b131299e4a7f494520333;hp=174c94c76ffe50379cfa1cdce354583e146dbac0;hpb=1c40b498ddd6d66b09aff3a22b9f7ddd845250dc;p=SXSI%2FXMLTree.git diff --git a/XMLTree.cpp b/XMLTree.cpp index 174c94c..e23a06a 100644 --- a/XMLTree.cpp +++ b/XMLTree.cpp @@ -941,18 +941,11 @@ bool XMLTree::IsOpen(treeNode x) { return fast_inspect(Par,x); } //WARNING this uses directly the underlying implementation for plain text -void XMLTree::Print(int fd,treeNode x){ +void XMLTree::Print(int fd,treeNode x, bool no_text){ int newfd = dup(fd); stream = fdopen(newfd,"wa"); - /* if (stream_fd != fd){ - if (stream != NULL) - fclose(stream); - int newfd = dup(fd); - stream = fdopen(newfd,"wa"); - stream_fd = fd; - }; - */ + FILE* fp = stream; treeNode fin = fast_find_close(Par,x); @@ -979,14 +972,17 @@ void XMLTree::Print(int fd,treeNode x){ std::stack st; while (n <= fin){ if (fast_inspect(Par,n)){ - if (tag == PCDATA_TAG_ID) { + if (tag == PCDATA_TAG_ID ) { // fputs((const char*) (GetText(MyTextUnsafe(n))),fp); - + if (no_text) + fputs("<$/>",fp); + else{ read = fprintf(fp,"%s",(const char*) current_text); current_text += (read + 1); - + } n+=2; // skip closing $ tag = Tag(n); + } else { @@ -1004,11 +1000,15 @@ void XMLTree::Print(int fd,treeNode x){ fputs((const char*) &(GetTagNameByRef(Tag(n))[3]),fp); fputs("=\"",fp); n++; + if (no_text) + fputs("<$@/>",fp); + else{ read = fprintf(fp,"%s",(const char*) current_text); current_text += (read + 1); //fputs((const char*) GetText(MyTextUnsafe(n)),fp); fputc('"',fp); - n+=3; //close @$ @@ + } + n+=3; //close @$ @@ }; fputc('>',fp); n++;