Add a document to the xmlwriter structure and pass document when writing

* xmlwriter.c: Add a document to the xmlwriter structure and
  pass document when writing attribute content for encoding support.
diff --git a/xmlwriter.c b/xmlwriter.c
index 43934b3..74838e6 100644
--- a/xmlwriter.c
+++ b/xmlwriter.c
@@ -91,6 +91,7 @@
     char qchar;                 /* character used for quoting attribute values */
     xmlParserCtxtPtr ctxt;
     int no_doc_free;
+    xmlDocPtr doc;
 };
 
 static void xmlFreeTextWriterStackEntry(xmlLinkPtr lk);
@@ -215,6 +216,9 @@
                         "xmlNewTextWriter : out of memory!\n");
         return NULL;
     }
+
+    ret->doc = xmlNewDoc(NULL);
+
     ret->no_doc_free = 0;
 
     return ret;
@@ -487,6 +491,9 @@
         xmlFreeParserCtxt(writer->ctxt);
     }
 
+    if (writer->doc != NULL)
+        xmlFreeDoc(writer->doc);
+
     if (writer->ichar != NULL)
         xmlFree(writer->ichar);
     xmlFree(writer);
@@ -539,6 +546,8 @@
     if (encoder != NULL) {
         writer->out->conv = xmlBufferCreateSize(4000);
         xmlCharEncOutFunc(encoder, writer->out->conv, NULL);
+        if ((writer->doc != NULL) && (writer->doc->encoding == NULL))
+            writer->doc->encoding = xmlStrdup((xmlChar *)writer->out->encoder->name);
     } else
         writer->out->conv = NULL;
 
@@ -1425,7 +1434,7 @@
                     break;
                 case XML_TEXTWRITER_ATTRIBUTE:
                     buf = NULL;
-                    xmlAttrSerializeTxtContent(writer->out->buffer, NULL,
+                    xmlAttrSerializeTxtContent(writer->out->buffer, writer->doc,
                                                NULL, content);
                     break;
 		default: